From f2e09fc091f0602534ceea22bae9e9e4bc4afd43 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 5 Nov 2019 12:20:15 +0000 Subject: [PATCH 01/25] begin implementing default app menu for osx. --- .../AvaloniaNativeMenuExporter.cs | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 950943d54a..3571f84131 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Text; +using Avalonia.Collections; using Avalonia.Controls; using Avalonia.Controls.Platform; using Avalonia.Input; @@ -211,6 +212,25 @@ namespace Avalonia.Native DoLayoutReset(); } + private static NativeMenu CreateDefaultAppMenu() + { + var result = new NativeMenu(); + + var aboutItem = new NativeMenuItem + { + Header = "About Avalonia", + }; + + aboutItem.Clicked += (sender, e) => + { + // Open about dialog. + }; + + result.Add(aboutItem); + + return result; + } + private void OnItemPropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) { QueueReset(); @@ -241,6 +261,10 @@ namespace Avalonia.Native { SetMenu(_menu); } + else + { + SetMenu(CreateDefaultAppMenu()); + } } else { From f6f9c575bef43ce4baff4c7ea0af23a69fc54d4c Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 6 Nov 2019 11:37:20 +0000 Subject: [PATCH 02/25] remove old osx app menu from control catalog. --- samples/ControlCatalog/App.xaml | 12 ------------ samples/ControlCatalog/App.xaml.cs | 9 --------- 2 files changed, 21 deletions(-) diff --git a/samples/ControlCatalog/App.xaml b/samples/ControlCatalog/App.xaml index 335c460b40..e40509dfda 100644 --- a/samples/ControlCatalog/App.xaml +++ b/samples/ControlCatalog/App.xaml @@ -17,16 +17,4 @@ - - - - - - - - - - - - diff --git a/samples/ControlCatalog/App.xaml.cs b/samples/ControlCatalog/App.xaml.cs index 4fc63ea054..7adceddacf 100644 --- a/samples/ControlCatalog/App.xaml.cs +++ b/samples/ControlCatalog/App.xaml.cs @@ -13,15 +13,6 @@ namespace ControlCatalog public override void Initialize() { AvaloniaXamlLoader.Load(this); - - Name = "Avalonia"; - - _recentMenu = (NativeMenu.GetMenu(this).Items[1] as NativeMenuItem).Menu; - } - - public void OnOpenClicked(object sender, EventArgs args) - { - _recentMenu.Items.Insert(0, new NativeMenuItem("Item " + (_recentMenu.Items.Count + 1))); } public override void OnFrameworkInitializationCompleted() From 3e8138cfe4782e5ca007f96abb5db41083a43d76 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 6 Nov 2019 11:38:21 +0000 Subject: [PATCH 03/25] Set a default Avalonia application name. --- src/Avalonia.Controls/Application.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Avalonia.Controls/Application.cs b/src/Avalonia.Controls/Application.cs index ce60a0f0b9..59c6c47ed9 100644 --- a/src/Avalonia.Controls/Application.cs +++ b/src/Avalonia.Controls/Application.cs @@ -48,6 +48,14 @@ namespace Avalonia /// public event EventHandler ResourcesChanged; + /// + /// Creates an instance of the class. + /// + public Application() + { + Name = "Avalonia Application"; + } + /// /// Gets the current instance of the class. /// From 48234ad3ab8aea1c8ff5801ff20c4ea565f2e615 Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Wed, 6 Nov 2019 20:21:15 +0800 Subject: [PATCH 04/25] Add a Avalonia about window default implementation. --- src/Avalonia.Dialogs/DefaultAboutWindow.xaml | 109 ++++++++++++++++++ .../DefaultAboutWindow.xaml.cs | 16 +++ 2 files changed, 125 insertions(+) create mode 100644 src/Avalonia.Dialogs/DefaultAboutWindow.xaml create mode 100644 src/Avalonia.Dialogs/DefaultAboutWindow.xaml.cs diff --git a/src/Avalonia.Dialogs/DefaultAboutWindow.xaml b/src/Avalonia.Dialogs/DefaultAboutWindow.xaml new file mode 100644 index 0000000000..8d666f7e54 --- /dev/null +++ b/src/Avalonia.Dialogs/DefaultAboutWindow.xaml @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Avalonia.Dialogs/DefaultAboutWindow.xaml.cs b/src/Avalonia.Dialogs/DefaultAboutWindow.xaml.cs new file mode 100644 index 0000000000..b5adab5b7c --- /dev/null +++ b/src/Avalonia.Dialogs/DefaultAboutWindow.xaml.cs @@ -0,0 +1,16 @@ +// Copyright (c) The Avalonia Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. + +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace Avalonia.Dialogs +{ + public class DefaultAboutWindow : Window + { + public DefaultAboutWindow() + { + AvaloniaXamlLoader.Load(this); + } + } +} From 5da9bcd72304537e9f4eb6978775f6a1bfde729f Mon Sep 17 00:00:00 2001 From: Jumar Macato Date: Wed, 6 Nov 2019 22:51:47 +0800 Subject: [PATCH 05/25] Change to AboutAvaloniaDialog --- .../{DefaultAboutWindow.xaml => AboutAvaloniaDialog.xaml} | 2 +- ...DefaultAboutWindow.xaml.cs => AboutAvaloniaDialog.xaml.cs} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/Avalonia.Dialogs/{DefaultAboutWindow.xaml => AboutAvaloniaDialog.xaml} (98%) rename src/Avalonia.Dialogs/{DefaultAboutWindow.xaml.cs => AboutAvaloniaDialog.xaml.cs} (79%) diff --git a/src/Avalonia.Dialogs/DefaultAboutWindow.xaml b/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml similarity index 98% rename from src/Avalonia.Dialogs/DefaultAboutWindow.xaml rename to src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml index 8d666f7e54..fd62bddd3c 100644 --- a/src/Avalonia.Dialogs/DefaultAboutWindow.xaml +++ b/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml @@ -6,7 +6,7 @@ MinHeight="220" Title="About Avalonia" Background="Purple" - x:Class="Avalonia.Dialogs.DefaultAboutWindow"> + x:Class="Avalonia.Dialogs.AboutAvaloniaDialog"> - + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - + - + \ No newline at end of file From 08bb2399f6944c6fbcc444b1582a932a289641b1 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 7 Nov 2019 13:41:38 +0000 Subject: [PATCH 12/25] implement File -> Exit and Help -> About in control catalog. --- samples/ControlCatalog/MainWindow.xaml | 4 ++-- .../ViewModels/MainWindowViewModel.cs | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/samples/ControlCatalog/MainWindow.xaml b/samples/ControlCatalog/MainWindow.xaml index c45548e439..248f94082d 100644 --- a/samples/ControlCatalog/MainWindow.xaml +++ b/samples/ControlCatalog/MainWindow.xaml @@ -45,10 +45,10 @@ - + - + diff --git a/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs b/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs index adf0345a70..89e7653618 100644 --- a/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs +++ b/samples/ControlCatalog/ViewModels/MainWindowViewModel.cs @@ -1,5 +1,7 @@ using System.Reactive; +using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Controls.Notifications; +using Avalonia.Dialogs; using ReactiveUI; namespace ControlCatalog.ViewModels @@ -26,6 +28,20 @@ namespace ControlCatalog.ViewModels { NotificationManager.Show(new Avalonia.Controls.Notifications.Notification("Error", "Native Notifications are not quite ready. Coming soon.", NotificationType.Error)); }); + + AboutCommand = ReactiveCommand.CreateFromTask(async () => + { + var dialog = new AboutAvaloniaDialog(); + + var mainWindow = (App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow; + + await dialog.ShowDialog(mainWindow); + }); + + ExitCommand = ReactiveCommand.Create(() => + { + (App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime).Shutdown(); + }); } public IManagedNotificationManager NotificationManager @@ -39,5 +55,9 @@ namespace ControlCatalog.ViewModels public ReactiveCommand ShowManagedNotificationCommand { get; } public ReactiveCommand ShowNativeNotificationCommand { get; } + + public ReactiveCommand AboutCommand { get; } + + public ReactiveCommand ExitCommand { get; } } } From 868b125848f2380f80adb659cd6ac697d41581c7 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 7 Nov 2019 14:13:14 +0000 Subject: [PATCH 13/25] add hyper links. --- src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml | 12 +++- .../AboutAvaloniaDialog.xaml.cs | 55 +++++++++++++++++++ 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml b/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml index d7fcb22b95..ffc23cc5b0 100644 --- a/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml +++ b/src/Avalonia.Dialogs/AboutAvaloniaDialog.xaml @@ -73,6 +73,14 @@ - + + +