From 8ae4585b6a4187f8ca3a6d6cd42c7212c8be8057 Mon Sep 17 00:00:00 2001 From: MikiraSora Date: Wed, 23 Oct 2024 02:37:25 +0800 Subject: [PATCH] fix bugs --- .../ShowNewVersionCommandDefinition.cs | 26 ---- .../ShowNewVersionCommandHandler.cs | 19 --- .../ProgramUpdater/DefaultProgramUpdater.cs | 117 +++++++++++++----- .../Kernel/ProgramUpdater/MenuDefinitions.cs | 37 ------ 4 files changed, 88 insertions(+), 111 deletions(-) delete mode 100644 OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandDefinition.cs delete mode 100644 OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandHandler.cs delete mode 100644 OngekiFumenEditor/Kernel/ProgramUpdater/MenuDefinitions.cs diff --git a/OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandDefinition.cs b/OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandDefinition.cs deleted file mode 100644 index fabbc8e2..00000000 --- a/OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandDefinition.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Gemini.Framework.Commands; -using OngekiFumenEditor.Properties; - -namespace OngekiFumenEditor.Kernel.ProgramUpdater.Commands.About -{ - [CommandDefinition] - public class ShowNewVersionCommandDefinition : CommandDefinition - { - public const string CommandName = "ProgramUpdater.StartUpdate"; - - public override string Name - { - get { return CommandName; } - } - - public override string Text - { - get { return "开始更新"; } - } - - public override string ToolTip - { - get { return Text; } - } - } -} \ No newline at end of file diff --git a/OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandHandler.cs b/OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandHandler.cs deleted file mode 100644 index 4ddc69fc..00000000 --- a/OngekiFumenEditor/Kernel/ProgramUpdater/Commands/StartUpdate/ShowNewVersionCommandHandler.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Caliburn.Micro; -using Gemini.Framework.Commands; -using Gemini.Framework.Threading; -using OngekiFumenEditor.Kernel.ProgramUpdater; -using OngekiFumenEditor.Kernel.ProgramUpdater.Dialogs.ViewModels; -using OngekiFumenEditor.UI.Dialogs; -using System.Threading.Tasks; - -namespace OngekiFumenEditor.Kernel.ProgramUpdater.Commands.About -{ - [CommandHandler] - public class ShowNewVersionCommandHandler : CommandHandlerBase - { - public override async Task Run(Command command) - { - await IoC.Get().ShowWindowAsync(new ShowNewVersionDialogViewModel()); - } - } -} \ No newline at end of file diff --git a/OngekiFumenEditor/Kernel/ProgramUpdater/DefaultProgramUpdater.cs b/OngekiFumenEditor/Kernel/ProgramUpdater/DefaultProgramUpdater.cs index 0788287c..40f4e413 100644 --- a/OngekiFumenEditor/Kernel/ProgramUpdater/DefaultProgramUpdater.cs +++ b/OngekiFumenEditor/Kernel/ProgramUpdater/DefaultProgramUpdater.cs @@ -4,8 +4,10 @@ using Gemini.Modules.MainMenu; using Gemini.Modules.MainMenu.Controls; using Gemini.Modules.MainMenu.Models; +using Gemini.Modules.MainMenu.Views; +using Gemini.Modules.MainWindow.Views; using OngekiFumenEditor.Kernel.MiscMenu.Commands.About; -using OngekiFumenEditor.Kernel.ProgramUpdater.Commands.About; +using OngekiFumenEditor.Kernel.ProgramUpdater.Dialogs.ViewModels; using OngekiFumenEditor.Properties; using OngekiFumenEditor.Utils; using System; @@ -21,6 +23,7 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; +using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; @@ -56,46 +59,102 @@ public VersionInfo RemoteVersionInfo Set(ref remoteVersionInfo, value); NotifyOfPropertyChange(nameof(HasNewVersion)); - if (HasNewVersion) - menuBar.Add(menuItem); - else - menuBar.Remove(menuItem); + if (updatableButton is not null) + updatableButton.Visibility = HasNewVersion ? Visibility.Visible : Visibility.Collapsed; } } private HttpClient http; - private IMenu menuBar; - private ICommandService commandService; - private MenuItemBase menuItem; - private BitmapImage icon; - private Image iconImg; + private bool isModified = false; + private Button updatableButton; - public DefaultProgramUpdater() + private void ModifyFrameworkMenuView() { - http = new HttpClient(); - menuBar = IoC.Get(); - - //build - var menuBuilder = IoC.Get(); - var dummyModel = new MenuModel(); - menuBuilder.BuildMenuBar(MenuDefinitions.dummyMenuBar, dummyModel); - menuItem = dummyModel.FirstOrDefault(); - icon = new BitmapImage(new Uri("pack://application:,,,/OngekiFumenEditor;component/Resources/Icons/notication.png")); + if (isModified) + return; + + IEnumerable GetAllMenuItems2(DependencyObject parent) + { + if (parent is T menuItem) + yield return menuItem; + + foreach (var child in LogicalTreeHelper.GetChildren(parent).OfType()) + foreach (var f in GetAllMenuItems2(child)) + yield return f; + } + + var mainMenuView2 = GetAllMenuItems2(App.Current.MainWindow).FirstOrDefault(); + var contentPresent = mainMenuView2.Parent as ContentControl; + contentPresent.Content = null; + + var grid = new Grid(); + + grid.SetResourceReference(Grid.BackgroundProperty, "MenuDefaultBackground"); + + ColumnDefinition column1 = new ColumnDefinition() + { + Width = new GridLength(1, GridUnitType.Star) + }; + ColumnDefinition column2 = new ColumnDefinition() + { + Width = GridLength.Auto + }; + grid.ColumnDefinitions.Add(column1); + grid.ColumnDefinitions.Add(column2); + + Grid.SetColumn(mainMenuView2, 0); + grid.Children.Add(mainMenuView2); + + var icon = new BitmapImage(new Uri("pack://application:,,,/OngekiFumenEditor;component/Resources/Icons/notication.png")); icon.Freeze(); + updatableButton = new Button() + { + BorderThickness = new Thickness(0), + BorderBrush = Brushes.Transparent, + Visibility = Visibility.Collapsed, + Content = new StackPanel() + { + Orientation = Orientation.Horizontal, + Children = + { + new Image() + { + Height = 20, + Source = icon + }, + new TextBlock() + { + FontWeight = FontWeights.Bold, + VerticalAlignment = VerticalAlignment.Center, + Text = "有新版本!" + } + } + }, + HorizontalAlignment = HorizontalAlignment.Right, + VerticalAlignment = VerticalAlignment.Center, + }; + updatableButton.SetResourceReference(Button.BackgroundProperty, "MenuDefaultBackground"); + updatableButton.Click += (e, ee) => + { + IoC.Get().ShowWindowAsync(new ShowNewVersionDialogViewModel()).Wait(); + }; + + Grid.SetColumn(updatableButton, 1); + grid.Children.Add(updatableButton); + + contentPresent.Content = grid; + + isModified = true; } - IEnumerable GetAllMenuItems(DependencyObject parent) + public DefaultProgramUpdater() { - int childCount = VisualTreeHelper.GetChildrenCount(parent); - for (int i = 0; i < childCount; i++) - { - var child = VisualTreeHelper.GetChild(parent, i); - if (child is T menuItem) - yield return menuItem; + http = new HttpClient(); - foreach (var child2 in GetAllMenuItems(child)) - yield return child2; + if ((App.Current as App)?.IsGUIMode ?? false) + { + ModifyFrameworkMenuView(); } } diff --git a/OngekiFumenEditor/Kernel/ProgramUpdater/MenuDefinitions.cs b/OngekiFumenEditor/Kernel/ProgramUpdater/MenuDefinitions.cs deleted file mode 100644 index c70eaab9..00000000 --- a/OngekiFumenEditor/Kernel/ProgramUpdater/MenuDefinitions.cs +++ /dev/null @@ -1,37 +0,0 @@ -using Gemini.Framework.Menus; -using OngekiFumenEditor.Kernel.ProgramUpdater.Commands.About; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace OngekiFumenEditor.Kernel.ProgramUpdater -{ - public static class MenuDefinitions - { - private class IconMenuDefinition : MenuDefinition - { - private readonly Uri uri; - - public IconMenuDefinition(MenuBarDefinition menuBar, int sortOrder, string text, Uri uri) : base(menuBar, sortOrder, text) - { - this.uri = uri; - } - - public override Uri IconSource => uri; - } - - [Export] - public static MenuBarDefinition dummyMenuBar = new MenuBarDefinition(); - [Export] - public static MenuDefinition newVersionMenu - = new IconMenuDefinition(dummyMenuBar, 0, "有新版本!", - new Uri("pack://application:,,,/OngekiFumenEditor;component/Resources/Icons/notication.png")); - [Export] - public static MenuItemGroupDefinition newVersionGroup = new MenuItemGroupDefinition(newVersionMenu, 0); - [Export] - public static MenuItemDefinition newVersionMenuItem = new CommandMenuItemDefinition(newVersionGroup, 0); - } -}