From 580312f05d893bf6d8f2d82398b0da00a8c41b3f Mon Sep 17 00:00:00 2001 From: John Lewin Date: Mon, 14 Aug 2017 12:34:44 -0700 Subject: [PATCH] Move Undo operations to ViewControls3D --- ControlElements/TextImageButtonFactory.cs | 6 +-- PartPreviewWindow/PrinterTabPage.cs | 2 +- PartPreviewWindow/View3D/PrinterActionsBar.cs | 35 --------------- PartPreviewWindow/ViewControls3D.cs | 44 ++++++++++++++++++- Tests/MatterControl.Tests/SceneTests.cs | 2 +- 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/ControlElements/TextImageButtonFactory.cs b/ControlElements/TextImageButtonFactory.cs index e8b5dc822..19fd1b1e5 100644 --- a/ControlElements/TextImageButtonFactory.cs +++ b/ControlElements/TextImageButtonFactory.cs @@ -94,14 +94,14 @@ namespace MatterHackers.MatterControl return groupLableAndEditControl; } - public Button GenerateIconButton(ImageBuffer icon) + public Button GenerateIconButton(ImageBuffer icon, bool forceWhite = false) { - if (ActiveTheme.Instance.IsDarkTheme) + if (ActiveTheme.Instance.IsDarkTheme || forceWhite) { icon.InvertLightness(); } - return new Button(0, 0, + return new Button(0, 0, new ButtonViewThreeImage( icon.AjustAlpha(.7), icon.AjustAlpha(.9), diff --git a/PartPreviewWindow/PrinterTabPage.cs b/PartPreviewWindow/PrinterTabPage.cs index 7462076a2..631718568 100644 --- a/PartPreviewWindow/PrinterTabPage.cs +++ b/PartPreviewWindow/PrinterTabPage.cs @@ -80,7 +80,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow double buildHeight = activeSettings.GetValue(SettingsKey.build_height); - viewControls3D = new ViewControls3D(ApplicationController.Instance.Theme) + viewControls3D = new ViewControls3D(ApplicationController.Instance.Theme, printer.BedPlate.Scene.UndoBuffer) { PartSelectVisible = false, VAnchor = VAnchor.Top | VAnchor.Fit | VAnchor.Absolute, diff --git a/PartPreviewWindow/View3D/PrinterActionsBar.cs b/PartPreviewWindow/View3D/PrinterActionsBar.cs index 8c95eca36..b12086532 100644 --- a/PartPreviewWindow/View3D/PrinterActionsBar.cs +++ b/PartPreviewWindow/View3D/PrinterActionsBar.cs @@ -160,41 +160,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AddChild(new TemperatureWidgetBed()); } - var theme = ApplicationController.Instance.Theme; - double height = theme.ButtonFactory.FixedHeight; - - Button undoButton = buttonFactory.GenerateIconButton(StaticData.Instance.LoadIcon("Undo_grey_16x.png", 16, 16)); - undoButton.Name = "3D View Undo"; - undoButton.ToolTipText = "Undo"; - undoButton.Enabled = false; - undoButton.MinimumSize = new Vector2(height, height); - undoButton.Margin = defaultMargin; - undoButton.Click += (sender, e) => - { - undoBuffer.Undo(); - }; - this.AddChild(undoButton); - undoButton.VAnchor = VAnchor.Center; - - Button redoButton = buttonFactory.GenerateIconButton(StaticData.Instance.LoadIcon("Redo_grey_16x.png", 16, 16)); - redoButton.Name = "3D View Redo"; - redoButton.Margin = defaultMargin; - redoButton.MinimumSize = new Vector2(height, height); - redoButton.ToolTipText = "Redo"; - redoButton.Enabled = false; - redoButton.VAnchor = VAnchor.Center; - redoButton.Click += (sender, e) => - { - undoBuffer.Redo(); - }; - this.AddChild(redoButton); - - undoBuffer.Changed += (sender, e) => - { - undoButton.Enabled = undoBuffer.UndoCount > 0; - redoButton.Enabled = undoBuffer.RedoCount > 0; - }; - overflowDropdown = new OverflowDropdown(allowLightnessInvert: true) { AlignToRightEdge = true, diff --git a/PartPreviewWindow/ViewControls3D.cs b/PartPreviewWindow/ViewControls3D.cs index 252ec25d8..243c6911e 100644 --- a/PartPreviewWindow/ViewControls3D.cs +++ b/PartPreviewWindow/ViewControls3D.cs @@ -36,6 +36,8 @@ using MatterHackers.Agg.ImageProcessing; using MatterHackers.Agg.PlatformAbstract; using MatterHackers.Agg.UI; using MatterHackers.Localizations; +using MatterHackers.MatterControl.CustomWidgets; +using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.PartPreviewWindow { @@ -132,7 +134,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - public ViewControls3D(ThemeConfig theme) + public ViewControls3D(ThemeConfig theme, UndoBuffer undoBuffer) { this.BackgroundColor = new RGBA_Bytes(0, 0, 0, overlayAlpha); this.HAnchor |= HAnchor.Left; @@ -140,10 +142,48 @@ namespace MatterHackers.MatterControl.PartPreviewWindow string iconPath; - var commonMargin = ApplicationController.Instance.Theme.ButtonSpacing; + var commonMargin = theme.ButtonSpacing; var buttonFactory = theme.RadioButtons; + double height = theme.ButtonFactory.FixedHeight; + + Button undoButton = buttonFactory.GenerateIconButton(StaticData.Instance.LoadIcon("Undo_grey_16x.png", 16, 16), forceWhite: true); + undoButton.Name = "3D View Undo"; + undoButton.ToolTipText = "Undo"; + undoButton.Enabled = false; + undoButton.MinimumSize = new Vector2(height, height); + undoButton.Margin = commonMargin; + undoButton.Click += (sender, e) => + { + undoBuffer.Undo(); + }; + this.AddChild(undoButton); + undoButton.VAnchor = VAnchor.Center; + + Button redoButton = buttonFactory.GenerateIconButton(StaticData.Instance.LoadIcon("Redo_grey_16x.png", 16, 16), forceWhite: true); + redoButton.Name = "3D View Redo"; + redoButton.Margin = commonMargin; + redoButton.MinimumSize = new Vector2(height, height); + redoButton.ToolTipText = "Redo"; + redoButton.Enabled = false; + redoButton.VAnchor = VAnchor.Center; + redoButton.Click += (sender, e) => + { + undoBuffer.Redo(); + }; + this.AddChild(redoButton); + + this.AddChild(new VerticalLine(50) + { + Margin = 4 + }); + + undoBuffer.Changed += (sender, e) => + { + undoButton.Enabled = undoBuffer.UndoCount > 0; + redoButton.Enabled = undoBuffer.RedoCount > 0; + }; iconPath = Path.Combine("ViewTransformControls", "reset.png"); resetViewButton = theme.NoMarginWhite.Generate("", StaticData.Instance.LoadIcon(iconPath,32,32).InvertLightness()); resetViewButton.ToolTipText = "Reset View".Localize(); diff --git a/Tests/MatterControl.Tests/SceneTests.cs b/Tests/MatterControl.Tests/SceneTests.cs index da97601da..0f2f8a4c3 100644 --- a/Tests/MatterControl.Tests/SceneTests.cs +++ b/Tests/MatterControl.Tests/SceneTests.cs @@ -113,7 +113,7 @@ namespace MatterHackers.PolygonMesh.UnitTests MeshVisualizer.BedShape.Rectangular, View3DWidget.WindowMode.Embeded, View3DWidget.AutoRotate.Disabled, - new ViewControls3D(ApplicationController.Instance.Theme), + new ViewControls3D(ApplicationController.Instance.Theme, new Agg.UI.UndoBuffer()), new MatterControl.ThemeConfig(), View3DWidget.OpenMode.Editing);