From c3a1516811cf8f55ab2fe461c971b32c897fac79 Mon Sep 17 00:00:00 2001 From: Michael Becker Date: Mon, 16 Dec 2019 07:58:20 -0500 Subject: [PATCH] the entire undo/redo system in Universal Editor needs a MAJOR overhaul --- .../UniversalEditor.UserInterface/Editor.cs | 10 +++++++ .../Editors/Text/Plain/PlainTextEditor.cs | 30 ++++++++++++++++--- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/Editor.cs b/CSharp/Libraries/UniversalEditor.UserInterface/Editor.cs index b4379cc4..79c5c8d4 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/Editor.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/Editor.cs @@ -399,6 +399,7 @@ namespace UniversalEditor.UserInterface mvarUpdating--; } + public bool InEdit { get { return mvarEditing > 0; } } public void BeginEdit() { if (mvarUpdating > 0) return; @@ -424,6 +425,15 @@ namespace UniversalEditor.UserInterface // clear out all the redos redo.Clear(); } + public void ContinueEdit() + { + if (undo.Count > 0) + { + EDITINFO edit = undo.Pop(); + edit.oldValue = mvarObjectModel.Clone() as ObjectModel; + undo.Push(edit); + } + } public void BeginEdit(string PropertyName, object Value = null, object ParentObject = null, Control editingControl = null) { if (mvarEditing > 0) diff --git a/CSharp/Libraries/UniversalEditor.UserInterface/Editors/Text/Plain/PlainTextEditor.cs b/CSharp/Libraries/UniversalEditor.UserInterface/Editors/Text/Plain/PlainTextEditor.cs index ce72fb4c..79d06d60 100644 --- a/CSharp/Libraries/UniversalEditor.UserInterface/Editors/Text/Plain/PlainTextEditor.cs +++ b/CSharp/Libraries/UniversalEditor.UserInterface/Editors/Text/Plain/PlainTextEditor.cs @@ -26,6 +26,7 @@ using UniversalEditor.UserInterface; using MBS.Framework.UserInterface; using MBS.Framework.UserInterface.Controls; using MBS.Framework.UserInterface.Layouts; +using System.ComponentModel; namespace UniversalEditor.Editors.Text.Plain { @@ -62,18 +63,35 @@ namespace UniversalEditor.Editors.Text.Plain return _er; } + bool working = false; + private void txt_Changed(object sender, EventArgs e) { PlainTextObjectModel om = (this.ObjectModel as PlainTextObjectModel); - BeginEdit(); - om.Text = txt.Text; - EndEdit(); + if (!working) + { + if (!InEdit) + { + BeginEdit(); + } + om.Text = txt.Text; + + txt.ResetChangedByUser(); + } + } + + protected override void OnObjectModelSaving(CancelEventArgs e) + { + base.OnObjectModelSaving(e); + + if (InEdit) + EndEdit(); } public PlainTextEditor () { - txt = new TextBox(); + txt = new TextBox(); txt.Changed += txt_Changed; txt.Multiline = true; @@ -85,12 +103,16 @@ namespace UniversalEditor.Editors.Text.Plain { base.OnObjectModelChanged(e); + working = true; txt.Text = String.Empty; + working = false; PlainTextObjectModel om = (this.ObjectModel as PlainTextObjectModel); if (om == null) return; + working = true; txt.Text = om.Text; + working = false; } } }