improving undo in property editor

issue: MatterHackers/MCCentral#5945
Undo on part properties panel does not undo back to initial value
This commit is contained in:
LarsBrubaker 2020-07-11 09:19:41 -07:00
parent 889fcb756b
commit e24550d054
6 changed files with 32 additions and 11 deletions

View file

@ -350,6 +350,7 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new DoubleField(theme);
field.Initialize(0);
field.DoubleValue = doubleValue;
field.ClearUndoHistory();
RegisterValueChanged(field, (valueString) => { return double.Parse(valueString); });
void RefreshField(object s, InvalidateArgs e)
@ -388,6 +389,8 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new Vector2Field(theme);
field.Initialize(0);
field.Vector2 = vector2;
field.ClearUndoHistory();
RegisterValueChanged(field,
(valueString) => Vector2.Parse(valueString),
(value) =>
@ -395,6 +398,7 @@ namespace MatterHackers.MatterControl.DesignTools
var s = ((Vector2)value).ToString();
return s.Substring(1, s.Length - 2);
});
rowContainer = CreateSettingsColumn(property, field);
}
else if (propertyValue is Vector3 vector3)
@ -402,6 +406,7 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new Vector3Field(theme);
field.Initialize(0);
field.Vector3 = vector3;
field.ClearUndoHistory();
RegisterValueChanged(
field,
@ -419,6 +424,8 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new DirectionVectorField(theme);
field.Initialize(0);
field.SetValue(directionVector);
field.ClearUndoHistory();
field.ValueChanged += (s, e) =>
{
property.SetValue(field.DirectionVector);
@ -434,6 +441,8 @@ namespace MatterHackers.MatterControl.DesignTools
var field1 = new DirectionVectorField(theme);
field1.Initialize(0);
field1.ClearUndoHistory();
field1.SetValue(new DirectionVector()
{
Normal = directionAxis.Normal
@ -447,6 +456,7 @@ namespace MatterHackers.MatterControl.DesignTools
var field2 = new Vector3Field(theme);
field2.Initialize(0);
field2.Vector3 = directionAxis.Origin - property.Item.Children.First().GetAxisAlignedBoundingBox().Center;
field2.ClearUndoHistory();
var row2 = CreateSettingsColumn("Offset".Localize(), field2);
@ -580,6 +590,8 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new IntField(theme);
field.Initialize(0);
field.IntValue = intValue;
field.ClearUndoHistory();
RegisterValueChanged(field, (valueString) => { return int.Parse(valueString); });
void RefreshField(object s, InvalidateArgs e)
@ -629,6 +641,7 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new TextField(theme);
field.Initialize(0);
field.SetValue(stringValue, false);
field.ClearUndoHistory();
field.Content.HAnchor = HAnchor.Stretch;
RegisterValueChanged(field, (valueString) => valueString);
rowContainer = CreateSettingsRow(property, field, theme);
@ -649,6 +662,7 @@ namespace MatterHackers.MatterControl.DesignTools
var field = new CharField(theme);
field.Initialize(0);
field.SetValue(charValue.ToString(), false);
field.ClearUndoHistory();
field.ValueChanged += (s, e) =>
{
property.SetValue(Convert.ToChar(field.Value));

View file

@ -810,14 +810,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
uiField.Content.ToolTipText = "";
// make sure the undo data goes back to the initial value after a change
if (uiField.Content is MHTextEditWidget textWidget)
{
textWidget.ActualTextEditWidget.InternalTextEditWidget.ClearUndoHistory();
}
else if (uiField.Content is MHNumberEdit numberWidget)
{
numberWidget.ActuallNumberEdit.InternalTextEditWidget.ClearUndoHistory();
}
uiField.ClearUndoHistory();
uiField.ValueChanged += (s, e) =>
{

View file

@ -34,9 +34,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
public abstract class NumberField : UIField
{
protected MHNumberEdit numberEdit;
private ThemeConfig theme;
private readonly ThemeConfig theme;
protected bool AllowNegatives { get; set; } = true;
protected bool AllowDecimals { get; set; } = true;
public NumberField(ThemeConfig theme)

View file

@ -77,5 +77,18 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
{
ValueChanged?.Invoke(this, fieldChangedEventArgs);
}
public void ClearUndoHistory()
{
foreach (var widget in this.Content.DescendantsAndSelf<MHTextEditWidget>())
{
widget.ActualTextEditWidget.InternalTextEditWidget.ClearUndoHistory();
}
foreach (var widget in this.Content.DescendantsAndSelf<MHNumberEdit>())
{
widget.ActuallNumberEdit.InternalTextEditWidget.ClearUndoHistory();
}
}
}
}

@ -1 +1 @@
Subproject commit afb3857da3d30fe9957f8d4654ea2eb7218743b8
Subproject commit 71e3ef9688101735b4c7b98f7f0c02c14b1af118

@ -1 +1 @@
Subproject commit 3623ff4084d7c3b09e7b5bd0e5f0b2c5c7e408d9
Subproject commit 8e697d187f74cf35b10a2674606aa047973c8e91