From eb0958cd3a433e53e4351ead44a9b6d52e11b434 Mon Sep 17 00:00:00 2001 From: MikiraSora Date: Sat, 26 Oct 2024 23:40:49 +0800 Subject: [PATCH] title show current editor display name --- OngekiFumenEditor/AppBootstrapper.cs | 8 +- .../Commands/OpenRecentFileCommandHandler.cs | 9 +- .../DefaultEditorDocumentManager.cs | 3 + .../ViewModels/FumenVisualEditorViewModel.cs | 3 + .../OgkiFumenListBrowserViewModel.cs | 7 +- OngekiFumenEditor/Utils/DocumentOpenHelper.cs | 8 +- OngekiFumenEditor/Utils/WindowTitleHelper.cs | 111 ++++++++++++------ 7 files changed, 94 insertions(+), 55 deletions(-) diff --git a/OngekiFumenEditor/AppBootstrapper.cs b/OngekiFumenEditor/AppBootstrapper.cs index 8bf82231..fcf67d64 100644 --- a/OngekiFumenEditor/AppBootstrapper.cs +++ b/OngekiFumenEditor/AppBootstrapper.cs @@ -257,12 +257,10 @@ public async void OnStartupForGUI(object sender, StartupEventArgs e) if (CheckIfAdminPermission()) { Log.LogWarn("Program is within admin permission."); - IoC.Get().TitleContent = "(以管理员权限运行)"; - } - else - { - IoC.Get().TitleContent = ""; + var prevSuffix = IoC.Get().TitleSuffix; + IoC.Get().TitleSuffix = prevSuffix + "(以管理员权限运行)"; } + IoC.Get().UpdateWindowTitle(); IoC.Get().ToolBars.Visible = true; diff --git a/OngekiFumenEditor/Kernel/RecentFiles/Commands/OpenRecentFileCommandHandler.cs b/OngekiFumenEditor/Kernel/RecentFiles/Commands/OpenRecentFileCommandHandler.cs index 13a35f9f..c754c56c 100644 --- a/OngekiFumenEditor/Kernel/RecentFiles/Commands/OpenRecentFileCommandHandler.cs +++ b/OngekiFumenEditor/Kernel/RecentFiles/Commands/OpenRecentFileCommandHandler.cs @@ -94,8 +94,11 @@ private async Task OpenRecentFileByEditorDocument(RecentRecordInfo info) } var doc = pickEditorProvider.Create(); - var viewAware = (IViewAware)doc; - viewAware.ViewAttached += (sender, e) => + var docName = info.DisplayName; + doc.DisplayName = docName; + + var viewAware = (IViewAware)doc; + viewAware.ViewAttached += (sender, e) => { var frameworkElement = (FrameworkElement)e.View; @@ -104,9 +107,7 @@ private async Task OpenRecentFileByEditorDocument(RecentRecordInfo info) { frameworkElement.Loaded -= loadedHandler; await pickEditorProvider.Open(doc, info.FileName); - var docName = info.DisplayName; - doc.DisplayName = docName; IoC.Get().PostRecord(new(info.FileName, docName, RecentOpenType.CommandOpen)); }; frameworkElement.Loaded += loadedHandler; diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/Kernel/DefaultImpl/DefaultEditorDocumentManager.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/Kernel/DefaultImpl/DefaultEditorDocumentManager.cs index da84cc67..7eebaf7a 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/Kernel/DefaultImpl/DefaultEditorDocumentManager.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/Kernel/DefaultImpl/DefaultEditorDocumentManager.cs @@ -1,4 +1,5 @@ using Caliburn.Micro; +using Microsoft.CodeAnalysis.Differencing; using OngekiFumenEditor.Kernel.Scheduler; using OngekiFumenEditor.Modules.FumenVisualEditor.ViewModels; using OngekiFumenEditor.Utils; @@ -39,6 +40,8 @@ private set var old = currentActivatedEditor; currentActivatedEditor = value; OnActivateEditorChanged?.Invoke(value, old); + + IoC.Get().UpdateWindowTitleByEditor(value); } } diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs index bdd8d280..27e1ca7a 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs @@ -66,6 +66,9 @@ void setupFumen(OngekiFumen cur, OngekiFumen prev) } setupFumen(editorProjectData?.Fumen, prevFumen); + + if (EditorManager.CurrentActivatedEditor == this) + IoC.Get().UpdateWindowTitleByEditor(this); } } diff --git a/OngekiFumenEditor/Modules/OgkiFumenListBrowser/ViewModels/OgkiFumenListBrowserViewModel.cs b/OngekiFumenEditor/Modules/OgkiFumenListBrowser/ViewModels/OgkiFumenListBrowserViewModel.cs index 8a77e21b..79f3e50d 100644 --- a/OngekiFumenEditor/Modules/OgkiFumenListBrowser/ViewModels/OgkiFumenListBrowserViewModel.cs +++ b/OngekiFumenEditor/Modules/OgkiFumenListBrowser/ViewModels/OgkiFumenListBrowserViewModel.cs @@ -300,7 +300,10 @@ public async void LoadFumen(OngekiFumenDiff diff) var fumenProvider = IoC.Get(); var editor = IoC.Get().Create(); - var viewAware = (IViewAware)editor; + var docName = $"[{Resources.FastOpen}] {diff.RefSet.Title}"; + editor.DisplayName = docName; + + var viewAware = (IViewAware)editor; viewAware.ViewAttached += (sender, e) => { var frameworkElement = (FrameworkElement)e.View; @@ -310,9 +313,7 @@ public async void LoadFumen(OngekiFumenDiff diff) { frameworkElement.Loaded -= loadedHandler; await fumenProvider.Open(editor, newProj); - var docName = $"[{Resources.FastOpen}] {diff.RefSet.Title}"; - editor.DisplayName = docName; IoC.Get().PostRecord(new(diff.FilePath, docName, RecentOpenType.CommandOpen)); }; frameworkElement.Loaded += loadedHandler; diff --git a/OngekiFumenEditor/Utils/DocumentOpenHelper.cs b/OngekiFumenEditor/Utils/DocumentOpenHelper.cs index 28253f0b..0abf4d58 100644 --- a/OngekiFumenEditor/Utils/DocumentOpenHelper.cs +++ b/OngekiFumenEditor/Utils/DocumentOpenHelper.cs @@ -44,9 +44,11 @@ public static async Task TryOpenOgkrFileAsDocument(string ogkrFilePath) var newProj = await TryCreateEditorProjectDataModel(ogkrFilePath); if (newProj is null) return false; + var docName = await TryFormatOpenFileName(ogkrFilePath); - var fumenProvider = IoC.Get(); var editor = IoC.Get().Create(); + editor.DisplayName = docName; + var viewAware = (IViewAware)editor; viewAware.ViewAttached += (sender, e) => { @@ -56,10 +58,8 @@ public static async Task TryOpenOgkrFileAsDocument(string ogkrFilePath) loadedHandler = async (sender2, e2) => { frameworkElement.Loaded -= loadedHandler; - await fumenProvider.Open(editor, newProj); - var docName = await TryFormatOpenFileName(ogkrFilePath); + await IoC.Get().Open(editor, newProj); - editor.DisplayName = docName; IoC.Get().PostRecord(new(ogkrFilePath, docName, RecentOpenType.CommandOpen)); }; frameworkElement.Loaded += loadedHandler; diff --git a/OngekiFumenEditor/Utils/WindowTitleHelper.cs b/OngekiFumenEditor/Utils/WindowTitleHelper.cs index 8ae1b68e..f42ef27c 100644 --- a/OngekiFumenEditor/Utils/WindowTitleHelper.cs +++ b/OngekiFumenEditor/Utils/WindowTitleHelper.cs @@ -1,45 +1,78 @@ -using Gemini.Framework.Services; +using Caliburn.Micro; +using Gemini.Framework.Services; +using OngekiFumenEditor.Modules.FumenVisualEditor.ViewModels; using System.ComponentModel.Composition; using System.Windows.Media; namespace OngekiFumenEditor.Utils { - [Export(typeof(WindowTitleHelper))] - [PartCreationPolicy(CreationPolicy.Shared)] - public class WindowTitleHelper - { - [Import(typeof(IMainWindow))] - private IMainWindow window = default; - - public string TitlePrefix { get; set; } = "Ongeki Fumen Editor"; - - public string TitleContent - { - get - { - return window.Title; - } - set - { - var title = value; - if (!(title?.StartsWith(TitlePrefix) ?? false)) - { - title = TitlePrefix + (string.IsNullOrWhiteSpace(title) ? string.Empty : (" - " + title)); - } - window.Title = title; - } - } - - public ImageSource Icon - { - get - { - return window.Icon; - } - set - { - window.Icon = value; - } - } - } + [Export(typeof(WindowTitleHelper))] + [PartCreationPolicy(CreationPolicy.Shared)] + public class WindowTitleHelper + { + [Import(typeof(IMainWindow))] + private IMainWindow window = default; + + private string titlePrefix = "Ongeki Fumen Editor"; + public string TitlePrefix + { + get => titlePrefix; + set + { + titlePrefix = value; + UpdateWindowTitle(); + } + } + + private string titleSuffix = string.Empty; + public string TitleSuffix + { + get => titleSuffix; + set + { + titleSuffix = value; + UpdateWindowTitle(); + } + } + + private string titleContent = string.Empty; + public string TitleContent + { + get + { + return titleContent; + } + set + { + titleContent = value; + UpdateWindowTitle(); + } + } + + public string ActualFormattedWindowTitle => window.Title; + + public ImageSource Icon + { + get + { + return window.Icon; + } + set + { + window.Icon = value; + } + } + + public void UpdateWindowTitle() + { + var actualTitle = TitlePrefix + TitleContent + TitleSuffix; + window.Title = actualTitle; + } + + public void UpdateWindowTitleByEditor(FumenVisualEditorViewModel editor) + { + var titleContent = editor != null ? $" - {editor.DisplayName} " : string.Empty; + TitleContent = titleContent; + } + } }