From e07d4c73dc7fdb4beafa2c7196dea5b722ef0fc4 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 19 Oct 2017 10:50:40 -0700 Subject: [PATCH 1/5] Remove SliceSettingsMissingWidget --- MatterControl.csproj | 1 - PartPreviewWindow/PrinterTabPage.cs | 23 +++---- .../SliceSettingsMissingWidget.cs | 62 ------------------- 3 files changed, 8 insertions(+), 78 deletions(-) delete mode 100644 SlicerConfiguration/SliceSettingsMissingWidget.cs diff --git a/MatterControl.csproj b/MatterControl.csproj index 6ab754fd1..aff9cd4bd 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -312,7 +312,6 @@ - diff --git a/PartPreviewWindow/PrinterTabPage.cs b/PartPreviewWindow/PrinterTabPage.cs index 3b5f324ce..6b27e1d4a 100644 --- a/PartPreviewWindow/PrinterTabPage.cs +++ b/PartPreviewWindow/PrinterTabPage.cs @@ -626,21 +626,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; parent.AddChild(sideBar); - if (printer.Settings.PrinterSelected) - { - sideBar.AddPage( - "Slice Settings".Localize(), - new SliceSettingsWidget( - printer, - new SettingsContext( - printer, - null, - SlicerConfiguration.NamedSettingsLayers.All))); - } - else - { - sideBar.AddPage("Slice Settings".Localize(), new SliceSettingsMissingWidget()); - } + sideBar.AddPage( + "Slice Settings".Localize(), + new SliceSettingsWidget( + printer, + new SettingsContext( + printer, + null, + NamedSettingsLayers.All))); sideBar.AddPage("Controls".Localize(), new ManualPrinterControls(printer)); diff --git a/SlicerConfiguration/SliceSettingsMissingWidget.cs b/SlicerConfiguration/SliceSettingsMissingWidget.cs deleted file mode 100644 index 0edc89b2a..000000000 --- a/SlicerConfiguration/SliceSettingsMissingWidget.cs +++ /dev/null @@ -1,62 +0,0 @@ -/* -Copyright (c) 2017, Lars Brubaker, John Lewin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. -*/ - -using MatterHackers.Agg; -using MatterHackers.Agg.UI; -using MatterHackers.Localizations; - -namespace MatterHackers.MatterControl.SlicerConfiguration -{ - public class SliceSettingsMissingWidget : FlowLayoutWidget - { - public SliceSettingsMissingWidget() : base(FlowDirection.TopToBottom) - { - this.AnchorAll(); - this.Padding = new BorderDouble(3, 0); - - var noConnectionMessageContainer = new AltGroupBox(new WrappedTextWidget("No Printer Selected".Localize(), pointSize: 18, textColor: ActiveTheme.Instance.SecondaryAccentColor)) - { - Margin = new BorderDouble(top: 10), - BorderColor = ActiveTheme.Instance.PrimaryTextColor, - HAnchor = HAnchor.Stretch, - Height = 90 - }; - string noConnectionString = "No printer is currently selected. Please select a printer to edit slice settings.".Localize(); - noConnectionString += "\n\n" + "NOTE: You need to select a printer, but do not need to connect to it.".Localize(); - var noConnectionMessage = new WrappedTextWidget(noConnectionString, pointSize: 10) - { - Margin = new BorderDouble(5), - TextColor = ActiveTheme.Instance.PrimaryTextColor, - HAnchor = HAnchor.Stretch - }; - noConnectionMessageContainer.AddChild(noConnectionMessage); - this.AddChild(noConnectionMessageContainer); - } - } -} From e8e8cc8ccf6272b9b6e20bf1f0b945f9d6422448 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 19 Oct 2017 11:22:19 -0700 Subject: [PATCH 2/5] Remove ResizeContainer coupling to DockingTabControl --- CustomWidgets/DockingTabControl.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CustomWidgets/DockingTabControl.cs b/CustomWidgets/DockingTabControl.cs index 97a5dc156..1479287ed 100644 --- a/CustomWidgets/DockingTabControl.cs +++ b/CustomWidgets/DockingTabControl.cs @@ -269,16 +269,16 @@ namespace MatterHackers.MatterControl.CustomWidgets internal class ResizeContainer : FlowLayoutWidget { - private DockingTabControl dockingTabControl; + private GuiWidget resizeTarget; private double downWidth = 0; private bool mouseDownOnBar = false; private double mouseDownX; private int splitterWidth = 10; - internal ResizeContainer(DockingTabControl dockingTabControl) + internal ResizeContainer(GuiWidget resizeTarget) { - this.dockingTabControl = dockingTabControl; + this.resizeTarget = resizeTarget; this.HAnchor = HAnchor.Absolute; this.Cursor = Cursors.VSplit; } @@ -322,8 +322,8 @@ namespace MatterHackers.MatterControl.CustomWidgets int currentMouseX = (int)TransformToScreenSpace(mouseEvent.Position).x; UiThread.RunOnIdle(() => { - dockingTabControl.PageWidth = downWidth + mouseDownX - currentMouseX; - Width = dockingTabControl.PageWidth; + resizeTarget.PageWidth = downWidth + mouseDownX - currentMouseX; + Width = resizeTarget.PageWidth; }); } base.OnMouseMove(mouseEvent); From 179d40ee1d2eac2424c52d228687befd62c6db53 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 19 Oct 2017 15:25:52 -0700 Subject: [PATCH 3/5] Extract embedded type to new file --- CustomWidgets/DockingTabControl.cs | 76 ++------------------- CustomWidgets/ResizeContainer.cs | 103 +++++++++++++++++++++++++++++ MatterControl.csproj | 1 + 3 files changed, 110 insertions(+), 70 deletions(-) create mode 100644 CustomWidgets/ResizeContainer.cs diff --git a/CustomWidgets/DockingTabControl.cs b/CustomWidgets/DockingTabControl.cs index 1479287ed..8aaf3642f 100644 --- a/CustomWidgets/DockingTabControl.cs +++ b/CustomWidgets/DockingTabControl.cs @@ -32,7 +32,6 @@ using System.Collections.Generic; using System.Linq; using MatterHackers.Agg; using MatterHackers.Agg.Font; -using MatterHackers.Agg.ImageProcessing; using MatterHackers.Agg.Platform; using MatterHackers.Agg.Transform; using MatterHackers.Agg.UI; @@ -118,6 +117,12 @@ namespace MatterHackers.MatterControl.CustomWidgets return imageWidget; } + public override double Width + { + get => this.PageWidth; + set => this.PageWidth = value; + } + // Clamped to MinDockingWidth or value double PageWidth { @@ -267,75 +272,6 @@ namespace MatterHackers.MatterControl.CustomWidgets } } - internal class ResizeContainer : FlowLayoutWidget - { - private GuiWidget resizeTarget; - private double downWidth = 0; - private bool mouseDownOnBar = false; - private double mouseDownX; - - private int splitterWidth = 10; - - internal ResizeContainer(GuiWidget resizeTarget) - { - this.resizeTarget = resizeTarget; - this.HAnchor = HAnchor.Absolute; - this.Cursor = Cursors.VSplit; - } - - public RGBA_Bytes SpliterBarColor { get; set; } = ActiveTheme.Instance.TertiaryBackgroundColor; - - public int SplitterWidth - { - get => splitterWidth; - set - { - if (splitterWidth != value) - { - splitterWidth = value; - this.Padding = new BorderDouble(splitterWidth, 0, 0, 0); - } - } - } - - public override void OnDraw(Graphics2D graphics2D) - { - graphics2D.FillRectangle(LocalBounds.Left, LocalBounds.Bottom, LocalBounds.Left + this.SplitterWidth, LocalBounds.Top, this.SpliterBarColor); - base.OnDraw(graphics2D); - } - - public override void OnMouseDown(MouseEventArgs mouseEvent) - { - if (mouseEvent.Position.x < this.SplitterWidth) - { - mouseDownOnBar = true; - mouseDownX = TransformToScreenSpace(mouseEvent.Position).x; - downWidth = Width; - } - base.OnMouseDown(mouseEvent); - } - - public override void OnMouseMove(MouseEventArgs mouseEvent) - { - if (mouseDownOnBar) - { - int currentMouseX = (int)TransformToScreenSpace(mouseEvent.Position).x; - UiThread.RunOnIdle(() => - { - resizeTarget.PageWidth = downWidth + mouseDownX - currentMouseX; - Width = resizeTarget.PageWidth; - }); - } - base.OnMouseMove(mouseEvent); - } - - public override void OnMouseUp(MouseEventArgs mouseEvent) - { - mouseDownOnBar = false; - base.OnMouseUp(mouseEvent); - } - } - private class DockingWindowContent : GuiWidget, IIgnoredPopupChild { internal DockingWindowContent(DockingTabControl dockingControl, GuiWidget child, string title) diff --git a/CustomWidgets/ResizeContainer.cs b/CustomWidgets/ResizeContainer.cs new file mode 100644 index 000000000..e3ec103e2 --- /dev/null +++ b/CustomWidgets/ResizeContainer.cs @@ -0,0 +1,103 @@ +/* +Copyright (c) 2017, Lars Brubaker, John Lewin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of the FreeBSD Project. +*/ + +using MatterHackers.Agg; +using MatterHackers.Agg.UI; + +namespace MatterHackers.MatterControl.CustomWidgets +{ + public class ResizeContainer : FlowLayoutWidget + { + private GuiWidget resizeTarget; + private double downWidth = 0; + private bool mouseDownOnBar = false; + private double mouseDownX; + + private int splitterWidth = 10; + + internal ResizeContainer(GuiWidget resizeTarget) + { + this.resizeTarget = resizeTarget; + this.HAnchor = HAnchor.Absolute; + this.Cursor = Cursors.VSplit; + } + + public RGBA_Bytes SpliterBarColor { get; set; } = ActiveTheme.Instance.TertiaryBackgroundColor; + + public int SplitterWidth + { + get => splitterWidth; + set + { + if (splitterWidth != value) + { + splitterWidth = value; + this.Padding = new BorderDouble(splitterWidth, 0, 0, 0); + } + } + } + + public override void OnDraw(Graphics2D graphics2D) + { + graphics2D.FillRectangle(LocalBounds.Left, LocalBounds.Bottom, LocalBounds.Left + this.SplitterWidth, LocalBounds.Top, this.SpliterBarColor); + base.OnDraw(graphics2D); + } + + public override void OnMouseDown(MouseEventArgs mouseEvent) + { + if (mouseEvent.Position.x < this.SplitterWidth) + { + mouseDownOnBar = true; + mouseDownX = TransformToScreenSpace(mouseEvent.Position).x; + downWidth = Width; + } + base.OnMouseDown(mouseEvent); + } + + public override void OnMouseMove(MouseEventArgs mouseEvent) + { + if (mouseDownOnBar) + { + int currentMouseX = (int)TransformToScreenSpace(mouseEvent.Position).x; + UiThread.RunOnIdle(() => + { + resizeTarget.Width = downWidth + mouseDownX - currentMouseX; + Width = resizeTarget.Width; + }); + } + base.OnMouseMove(mouseEvent); + } + + public override void OnMouseUp(MouseEventArgs mouseEvent) + { + mouseDownOnBar = false; + base.OnMouseUp(mouseEvent); + } + } +} \ No newline at end of file diff --git a/MatterControl.csproj b/MatterControl.csproj index aff9cd4bd..b1c821c9c 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -141,6 +141,7 @@ + From 12d4fb66a41e5f391758587d01328b8fe2e653bd Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 19 Oct 2017 15:29:01 -0700 Subject: [PATCH 4/5] Host SelectedObjectPanel in ResizeContainer --- PartPreviewWindow/View3D/View3DWidget.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index 2e94aa0b6..d58482e0a 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -436,7 +436,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow HAnchor = HAnchor.Left | HAnchor.Fit, Margin = new BorderDouble(0, 5, 5, viewControls3D.LocalBounds.Height) }; - AddChild(selectedObjectPanel); + + var resizeContainer = new ResizeContainer(selectedObjectPanel) + { + Width = 200, + VAnchor = VAnchor.Fit | VAnchor.Top, + HAnchor = HAnchor.Right, + SpliterBarColor = new RGBA_Bytes(RGBA_Bytes.Red, 30), + SplitterWidth = ApplicationController.Instance.Theme.SplitterWidth, + }; + AddChild(resizeContainer); + resizeContainer.AddChild(selectedObjectPanel); UiThread.RunOnIdle(AutoSpin); From 95ae67b32f28d87c4e5846480f5ec79c0e9b6cd8 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 19 Oct 2017 15:11:34 -0700 Subject: [PATCH 5/5] Resolve list predicates before executing operations - Issue MatterHackers/MCCentral#2104 Paint material removes all characters, only intersect with first --- PartPreviewWindow/View3D/DifferenceObject3D.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/PartPreviewWindow/View3D/DifferenceObject3D.cs b/PartPreviewWindow/View3D/DifferenceObject3D.cs index 7ad2ba27f..e829dc261 100644 --- a/PartPreviewWindow/View3D/DifferenceObject3D.cs +++ b/PartPreviewWindow/View3D/DifferenceObject3D.cs @@ -273,9 +273,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D await Task.Run(() => { var container = this; - var participants = this.VisibleMeshes().Where((obj) => obj.OwnerID == this.ID); - var removeObjects = participants.Where((obj) => obj.OutputType == PrintOutputTypes.Hole); - var keepObjects = participants.Where((obj) => obj.OutputType != PrintOutputTypes.Hole); + var participants = this.VisibleMeshes().Where((obj) => obj.OwnerID == this.ID).ToList(); + var removeObjects = participants.Where((obj) => obj.OutputType == PrintOutputTypes.Hole).ToList(); + var keepObjects = participants.Where((obj) => obj.OutputType != PrintOutputTypes.Hole).ToList(); if (removeObjects.Any() && keepObjects.Any())