From 3b47322cdaa4389868d1d995a63d592e62f5ba5d Mon Sep 17 00:00:00 2001 From: MikiraSora Date: Sat, 19 Feb 2022 16:07:44 +0800 Subject: [PATCH] implement ask save dialog when document is dirty --- OngekiFumenEditor/Base/OngekiFumen.cs | 12 ++++++++++++ .../ViewModels/FumenVisualEditorViewModel.cs | 8 ++++++++ gemini | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/OngekiFumenEditor/Base/OngekiFumen.cs b/OngekiFumenEditor/Base/OngekiFumen.cs index 35795df0..a4672ff7 100644 --- a/OngekiFumenEditor/Base/OngekiFumen.cs +++ b/OngekiFumenEditor/Base/OngekiFumen.cs @@ -25,6 +25,8 @@ public FumenMetaInfo MetaInfo } } + public virtual event PropertyChangedEventHandler ObjectModifiedChanged; + public BulletPalleteList BulletPalleteList { get; } = new(); public BpmList BpmList { get; } = new(); public LaneList Lanes { get; } = new(); @@ -165,6 +167,8 @@ public void AddObject(OngekiObjectBase obj) Log.LogWarn($"add-in list target not found, object type : {obj?.GetType()?.GetTypeName()}"); return; } + + obj.PropertyChanged += OnOngekiObjectModify; } public void RemoveObject(OngekiObjectBase obj) @@ -230,6 +234,14 @@ public void RemoveObject(OngekiObjectBase obj) Log.LogWarn($"delete list target not found, object type : {obj?.GetType()?.GetTypeName()}"); return; } + + obj.PropertyChanged -= OnOngekiObjectModify; + } + + private void OnOngekiObjectModify(object sender, PropertyChangedEventArgs e) + { + //Log.LogDebug($"Modified property name: {e.PropertyName} , Obj : {sender}"); + ObjectModifiedChanged?.Invoke(sender, e); } public IEnumerable GetAllDisplayableObjects() diff --git a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs index 9183cda0..075a07b2 100644 --- a/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs +++ b/OngekiFumenEditor/Modules/FumenVisualEditor/ViewModels/FumenVisualEditorViewModel.cs @@ -1,5 +1,6 @@ using Caliburn.Micro; using Gemini.Framework; +using Gemini.Modules.Shell.Commands; using Microsoft.Win32; using OngekiFumenEditor.Base; using OngekiFumenEditor.Modules.AudioPlayerToolViewer; @@ -102,11 +103,13 @@ public OngekiFumen Fumen { EditorProjectData.Fumen.BpmList.OnChangedEvent -= OnTimeSignatureListChanged; EditorProjectData.Fumen.MeterChanges.OnChangedEvent -= OnTimeSignatureListChanged; + EditorProjectData.Fumen.ObjectModifiedChanged -= OnFumenObjectModifiedChanged; } if (value is not null) { value.BpmList.OnChangedEvent += OnTimeSignatureListChanged; value.MeterChanges.OnChangedEvent += OnTimeSignatureListChanged; + value.ObjectModifiedChanged += OnFumenObjectModifiedChanged; } EditorProjectData.Fumen = value; Redraw(RedrawTarget.All); @@ -114,6 +117,11 @@ public OngekiFumen Fumen } } + private void OnFumenObjectModifiedChanged(object sender, PropertyChangedEventArgs e) + { + IsDirty = true; + } + private double canvasWidth = default; public double CanvasWidth { diff --git a/gemini b/gemini index c155f54b..f6b9de60 160000 --- a/gemini +++ b/gemini @@ -1 +1 @@ -Subproject commit c155f54b17b242612ed9a0b2bea9b9a48bd5ddbc +Subproject commit f6b9de60cc534909bb0b1b8d4da0ab37f74aa1eb