From 63d48b49f53ddf5097847a24f931c1b6662e0275 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Wed, 26 Oct 2022 18:22:30 -0700 Subject: [PATCH] Adding ability to see markdown edits live in description object --- .../Attributes/MultiLineEditAttribute.cs | 5 +++ .../Primitives/DescriptionObject3D.cs | 3 +- .../DesignTools/PublicPropertyEditor.cs | 2 +- .../UIFields/MultilineStringField.cs | 42 +++++++++++++++---- Submodules/agg-sharp | 2 +- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/MatterControlLib/DesignTools/Attributes/MultiLineEditAttribute.cs b/MatterControlLib/DesignTools/Attributes/MultiLineEditAttribute.cs index 1693c7952..2cdc5e32a 100644 --- a/MatterControlLib/DesignTools/Attributes/MultiLineEditAttribute.cs +++ b/MatterControlLib/DesignTools/Attributes/MultiLineEditAttribute.cs @@ -36,4 +36,9 @@ namespace MatterHackers.MatterControl.DesignTools public class MultiLineEditAttribute : Attribute { } + + [AttributeUsage(AttributeTargets.Property)] + public class UpdateOnEveryKeystrokeAttribute : Attribute + { + } } \ No newline at end of file diff --git a/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs b/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs index ad05e31c5..28bf7a3b1 100644 --- a/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs +++ b/MatterControlLib/DesignTools/Primitives/DescriptionObject3D.cs @@ -116,6 +116,7 @@ namespace MatterHackers.MatterControl.DesignTools [DisplayName("Description - Markdown Text")] [MultiLineEdit] + [UpdateOnEveryKeystroke] public string Description { get; set; } = "You can edit this description in the properties panel"; public enum Placements @@ -352,7 +353,7 @@ namespace MatterHackers.MatterControl.DesignTools FixSelectableBasedOnLinks(markdownWidget); - controlLayer.GuiSurface.AddChild(markdownWidget); + controlLayer.GuiSurface.AddChild(markdownWidget); controlLayer.GuiSurface.AfterDraw += GuiSurface_AfterDraw; markdownWidget.MouseDown += MarkdownWidget_MouseDown; markdownWidget.MouseMove += MarkdownWidget_MouseMove; diff --git a/MatterControlLib/DesignTools/PublicPropertyEditor.cs b/MatterControlLib/DesignTools/PublicPropertyEditor.cs index 5327def06..95c2f7a65 100644 --- a/MatterControlLib/DesignTools/PublicPropertyEditor.cs +++ b/MatterControlLib/DesignTools/PublicPropertyEditor.cs @@ -1073,7 +1073,7 @@ namespace MatterHackers.MatterControl.DesignTools if (property.PropertyInfo.GetCustomAttributes(true).OfType().FirstOrDefault() != null) { // create a a multi-line string editor - var field = new MultilineStringField(theme); + var field = new MultilineStringField(theme, property.PropertyInfo.GetCustomAttributes(true).OfType().FirstOrDefault() != null); field.Initialize(0); field.SetValue(stringValue, false); field.ClearUndoHistory(); diff --git a/MatterControlLib/SlicerConfiguration/UIFields/MultilineStringField.cs b/MatterControlLib/SlicerConfiguration/UIFields/MultilineStringField.cs index a904e7cb5..12ea2f205 100644 --- a/MatterControlLib/SlicerConfiguration/UIFields/MultilineStringField.cs +++ b/MatterControlLib/SlicerConfiguration/UIFields/MultilineStringField.cs @@ -35,11 +35,20 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public class MultilineStringField : UIField { private ThemedTextEditWidget editWidget; + + public bool SetValueOnEveryEdit { get; } + private ThemeConfig theme; - public MultilineStringField(ThemeConfig theme) + /// + /// The constructor of a Multiline String Field + /// + /// The theme to use + /// Sets if SetValue gets called with every keystroke or only after EditComplete. + public MultilineStringField(ThemeConfig theme, bool setValueOnEveryEdit = false) { - this.theme = theme; + this.SetValueOnEveryEdit = setValueOnEveryEdit; + this.theme = theme; } public override void Initialize(int tabIndex) @@ -51,15 +60,30 @@ namespace MatterHackers.MatterControl.SlicerConfiguration Name = this.Name }; editWidget.DrawFromHintedCache(); - editWidget.ActualTextEditWidget.EditComplete += (sender, e) => + if (SetValueOnEveryEdit) { - if (sender is TextEditWidget textEditWidget) + editWidget.ActualTextEditWidget.TextChanged += (sender, e) => + { + if (sender is TextEditWidget textEditWidget) + { + this.SetValue( + textEditWidget.Text.Replace("\n", "\\n"), + userInitiated: true); + } + }; + } + else + { + editWidget.ActualTextEditWidget.EditComplete += (sender, e) => { - this.SetValue( - textEditWidget.Text.Replace("\n", "\\n"), - userInitiated: true); - } - }; + if (sender is TextEditWidget textEditWidget) + { + this.SetValue( + textEditWidget.Text.Replace("\n", "\\n"), + userInitiated: true); + } + }; + } editWidget.ActualTextEditWidget.TextChanged += (s, e) => { diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index fd09e961b..7ae6015ea 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit fd09e961bc6c5d5c104cc093ef303fd591b960f2 +Subproject commit 7ae6015eadfeaae062b5e00dfd7a3a4a4c66304d