diff --git a/CustomWidgets/DockingTabControl.cs b/CustomWidgets/DockingTabControl.cs
index 97a5dc156..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 DockingTabControl dockingTabControl;
- private double downWidth = 0;
- private bool mouseDownOnBar = false;
- private double mouseDownX;
-
- private int splitterWidth = 10;
-
- internal ResizeContainer(DockingTabControl dockingTabControl)
- {
- this.dockingTabControl = dockingTabControl;
- 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(() =>
- {
- dockingTabControl.PageWidth = downWidth + mouseDownX - currentMouseX;
- Width = dockingTabControl.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 6ab754fd1..b1c821c9c 100644
--- a/MatterControl.csproj
+++ b/MatterControl.csproj
@@ -141,6 +141,7 @@
+
@@ -312,7 +313,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/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())
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);
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);
- }
- }
-}