diff --git a/ConfigurationPage/CalibrationSettings/CalibrationControls.cs b/ConfigurationPage/CalibrationSettings/CalibrationControls.cs index fd51b24f3..1a7aa471e 100644 --- a/ConfigurationPage/CalibrationSettings/CalibrationControls.cs +++ b/ConfigurationPage/CalibrationSettings/CalibrationControls.cs @@ -19,59 +19,12 @@ namespace MatterHackers.MatterControl.PrinterControls private TextImageButtonFactory buttonFactory; private PrinterConfig printer; - public CalibrationControls(PrinterConfig printer, ThemeConfig theme) + private CalibrationControls(PrinterConfig printer, ThemeConfig theme) : base(FlowDirection.TopToBottom) { this.printer = printer; this.buttonFactory = theme.ButtonFactory; - var container = new FlowLayoutWidget(FlowDirection.TopToBottom) - { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit, - Padding = new BorderDouble(3, 0) - }; - - Button editButton = buttonFactory.GenerateIconButton(AggContext.StaticData.LoadIcon("icon_edit.png", 16, 16, IconColor.Theme)); - editButton.Click += (sender, e) => - { - UiThread.RunOnIdle(() => - { - if (editLevelingSettingsWindow == null) - { - editLevelingSettingsWindow = new EditLevelingSettingsWindow(printer.Settings); - editLevelingSettingsWindow.Closed += (sender2, e2) => - { - editLevelingSettingsWindow = null; - }; - } - else - { - editLevelingSettingsWindow.BringToFront(); - } - }); - }; - - this.AddChild( - new SectionWidget( - "Calibration".Localize(), - container, - theme, - editButton)); - - if (!printer.Settings.GetValue(SettingsKey.has_hardware_leveling)) - { - container.AddChild(GetAutoLevelControl()); - } - - printer.Connection.CommunicationStateChanged.RegisterEvent(PrinterStatusChanged, ref unregisterEvents); - printer.Connection.EnableChanged.RegisterEvent(PrinterStatusChanged, ref unregisterEvents); - - SetVisibleControls(); - } - - private FlowLayoutWidget GetAutoLevelControl() - { var buttonRow = new FlowLayoutWidget() { Name = "AutoLevelRowItem", @@ -127,7 +80,29 @@ namespace MatterHackers.MatterControl.PrinterControls buttonRow.AddChild(printLevelingSwitch); } - return buttonRow; + this.AddChild(buttonRow); + + printer.Connection.CommunicationStateChanged.RegisterEvent(PrinterStatusChanged, ref unregisterEvents); + printer.Connection.EnableChanged.RegisterEvent(PrinterStatusChanged, ref unregisterEvents); + + SetVisibleControls(); + } + + public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme) + { + var widget = new CalibrationControls(printer, theme); + + var editButton = new IconButton(AggContext.StaticData.LoadIcon("icon_edit.png", 16, 16, IconColor.Theme), theme); + editButton.Click += (s, e) => + { + widget.EditOptions(); + }; + + return new SectionWidget( + "Calibration".Localize(), + widget, + theme, + editButton); } public override void OnClosed(ClosedEventArgs e) @@ -136,6 +111,25 @@ namespace MatterHackers.MatterControl.PrinterControls base.OnClosed(e); } + private void EditOptions() + { + UiThread.RunOnIdle(() => + { + if (editLevelingSettingsWindow == null) + { + editLevelingSettingsWindow = new EditLevelingSettingsWindow(printer.Settings); + editLevelingSettingsWindow.Closed += (s, e) => + { + editLevelingSettingsWindow = null; + }; + } + else + { + editLevelingSettingsWindow.BringToFront(); + } + }); + } + private void PrinterStatusChanged(object sender, EventArgs e) { SetVisibleControls(); diff --git a/PartPreviewWindow/SectionWidget.cs b/PartPreviewWindow/SectionWidget.cs index 397de1f94..6632c7f7e 100644 --- a/PartPreviewWindow/SectionWidget.cs +++ b/PartPreviewWindow/SectionWidget.cs @@ -47,7 +47,7 @@ namespace MatterHackers.MatterControl.CustomWidgets { heading = new TextWidget(sectionTitle, pointSize: pointSize, textColor: theme.Colors.PrimaryTextColor); } - heading.Padding = new BorderDouble(0, 3, 0, 6); + heading.Padding = new BorderDouble(0, 5, 0, 6); if (rightAlignedContent == null) { diff --git a/PartPreviewWindow/SelectedObjectPanel.cs b/PartPreviewWindow/SelectedObjectPanel.cs index ca0f469e8..5f81d0e52 100644 --- a/PartPreviewWindow/SelectedObjectPanel.cs +++ b/PartPreviewWindow/SelectedObjectPanel.cs @@ -205,7 +205,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow foreach(var sectionWidget in scrollableContent.Children()) { var contentPanel = sectionWidget.ContentPanel; - contentPanel.Padding = new BorderDouble(16, 8, 8, 4); + contentPanel.Padding = new BorderDouble(16, 8, 8, 2); } HashSet mappedEditors; diff --git a/PrinterControls/ControlWidgets/AdjustmentControls.cs b/PrinterControls/ControlWidgets/AdjustmentControls.cs index cb8d75d10..77546fa9f 100644 --- a/PrinterControls/ControlWidgets/AdjustmentControls.cs +++ b/PrinterControls/ControlWidgets/AdjustmentControls.cs @@ -53,16 +53,9 @@ namespace MatterHackers.MatterControl.PrinterControls private EventHandler unregisterEvents; - public AdjustmentControls(PrinterConfig printer, ThemeConfig theme) + private AdjustmentControls(PrinterConfig printer, ThemeConfig theme) : base (FlowDirection.TopToBottom) { - var topToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom) - { - Margin = new BorderDouble(0, 0, 0, 0), - HAnchor = HAnchor.Stretch, - Padding = new BorderDouble(3, 0, 3, 0) - }; - double sliderWidth = 300 * GuiWidget.DeviceScale; double sliderThumbWidth = 10 * GuiWidget.DeviceScale; @@ -128,7 +121,7 @@ namespace MatterHackers.MatterControl.PrinterControls }; row.AddChild(feedRateValue); - topToBottom.AddChild(row); + this.AddChild(row); } { @@ -194,15 +187,9 @@ namespace MatterHackers.MatterControl.PrinterControls row.AddChild(extrusionRatioSlider); row.AddChild(extrusionValue); - topToBottom.AddChild(row); + this.AddChild(row); } - this.AddChild( - new SectionWidget( - "Tuning Adjustment".Localize(), - topToBottom, - theme)); - ActiveSliceSettings.SettingChanged.RegisterEvent((s, e) => { var eventArgs = e as StringEventArgs; @@ -221,6 +208,14 @@ namespace MatterHackers.MatterControl.PrinterControls }, ref unregisterEvents); } + public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme) + { + return new SectionWidget( + "Tuning Adjustment".Localize(), + new AdjustmentControls(printer, theme), + theme); + } + public override void OnLoad(EventArgs args) { // This is a hack to fix the layout issue this control is having. diff --git a/PrinterControls/ControlWidgets/FanControls.cs b/PrinterControls/ControlWidgets/FanControls.cs index 12beed7ee..d21c24b02 100644 --- a/PrinterControls/ControlWidgets/FanControls.cs +++ b/PrinterControls/ControlWidgets/FanControls.cs @@ -45,7 +45,7 @@ namespace MatterHackers.MatterControl.PrinterControls private CheckBox toggleSwitch; - public FanControls(PrinterConnection printerConnection, ThemeConfig theme) + private FanControls(PrinterConnection printerConnection, ThemeConfig theme) : base(FlowDirection.TopToBottom) { this.HAnchor = HAnchor.Stretch; @@ -103,11 +103,7 @@ namespace MatterHackers.MatterControl.PrinterControls VAnchor = VAnchor.Center }); - this.AddChild( - new SectionWidget( - "Fan".Localize(), - leftToRight, - theme)); + this.AddChild(leftToRight); // CreateFanControls printerConnection.FanSpeedSet.RegisterEvent((s, e) => @@ -126,6 +122,14 @@ namespace MatterHackers.MatterControl.PrinterControls , ref unregisterEvents); } + public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme) + { + return new SectionWidget( + "Fan".Localize(), + new FanControls(printer.Connection, theme), + theme); + } + public override void OnClosed(ClosedEventArgs e) { unregisterEvents?.Invoke(this, null); diff --git a/PrinterControls/ControlWidgets/MacroControls.cs b/PrinterControls/ControlWidgets/MacroControls.cs index 29be7b74f..1370d2fde 100644 --- a/PrinterControls/ControlWidgets/MacroControls.cs +++ b/PrinterControls/ControlWidgets/MacroControls.cs @@ -37,65 +37,56 @@ using MatterHackers.MatterControl.SlicerConfiguration; namespace MatterHackers.MatterControl.PrinterControls { - public class MacroControls : FlowLayoutWidget + public class MacroControls : FlowLeftRightWithWrapping { //private PrinterConfig printer; - public MacroControls(PrinterConfig printer, ThemeConfig theme) - : base(FlowDirection.TopToBottom) + private MacroControls(PrinterConfig printer, ThemeConfig theme) { - this.HAnchor = HAnchor.Stretch; + var noMacrosFound = new TextWidget("No macros are currently set up for this printer.".Localize(), pointSize: 10) + { + TextColor = ActiveTheme.Instance.PrimaryTextColor, + }; + this.AddChild(noMacrosFound); - var buttonFactory = ApplicationController.Instance.Theme.HomingButtons; + if (printer.Settings?.GetMacros(MacroUiLocation.Controls).Any() != true) + { + noMacrosFound.Visible = true; + return; + } - // add the widgets to this window - Button editButton = buttonFactory.GenerateIconButton(AggContext.StaticData.LoadIcon("icon_edit.png", 16, 16, IconColor.Theme)); + foreach (GCodeMacro macro in printer.Settings.GetMacros(MacroUiLocation.Controls)) + { + Button macroButton = theme.HomingButtons.Generate(GCodeMacro.FixMacroName(macro.Name)); + macroButton.Margin = new BorderDouble(right: 5); + macroButton.Click += (s, e) => macro.Run(printer.Connection); + + this.AddChild(macroButton); + } + + this.Children.CollectionChanged += (s, e) => + { + if (!this.HasBeenClosed) + { + noMacrosFound.Visible = this.Children.Count == 0; + } + }; + } + + public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme) + { + var widget = new MacroControls(printer, theme); + + var editButton = new IconButton(AggContext.StaticData.LoadIcon("icon_edit.png", 16, 16, IconColor.Theme), theme); editButton.Click += (s, e) => { DialogWindow.Show(new MacroListPage(printer.Settings)); }; - this.AddChild( - new SectionWidget( - "Macros".Localize(), - GetMacroButtonContainer(buttonFactory, printer), - theme, - editButton)); - } - - private FlowLayoutWidget GetMacroButtonContainer(TextImageButtonFactory buttonFactory, PrinterConfig printer) - { - var macroContainer = new FlowLeftRightWithWrapping(); - - var noMacrosFound = new TextWidget("No macros are currently set up for this printer.".Localize(), pointSize: 10) - { - TextColor = ActiveTheme.Instance.PrimaryTextColor, - }; - macroContainer.AddChild(noMacrosFound); - - if (printer.Settings?.GetMacros(MacroUiLocation.Controls).Any() != true) - { - noMacrosFound.Visible = true; - return macroContainer; - } - - foreach (GCodeMacro macro in printer.Settings.GetMacros(MacroUiLocation.Controls)) - { - Button macroButton = buttonFactory.Generate(GCodeMacro.FixMacroName(macro.Name)); - macroButton.Margin = new BorderDouble(right: 5); - macroButton.Click += (s, e) => macro.Run(printer.Connection); - - macroContainer.AddChild(macroButton); - } - - macroContainer.Children.CollectionChanged += (s, e) => - { - if (!this.HasBeenClosed) - { - noMacrosFound.Visible = macroContainer.Children.Count == 0; - } - }; - - return macroContainer; + return new SectionWidget( + "Macros".Localize(), + widget, + theme, + editButton); } } } \ No newline at end of file diff --git a/PrinterControls/ControlWidgets/MovementControls.cs b/PrinterControls/ControlWidgets/MovementControls.cs index b8b010c9f..d78d9a20c 100644 --- a/PrinterControls/ControlWidgets/MovementControls.cs +++ b/PrinterControls/ControlWidgets/MovementControls.cs @@ -64,12 +64,67 @@ namespace MatterHackers.MatterControl.PrinterControls private EventHandler unregisterEvents; + private MovementControls(PrinterConfig printer, ThemeConfig theme) + : base (FlowDirection.TopToBottom) + { + this.printer = printer; + this.theme = theme; + + jogControls = new JogControls(printer, new XYZColors()) + { + HAnchor = HAnchor.Left | HAnchor.Stretch, + Margin = 0 + }; + + this.AddChild(CreateDisableableContainer(GetHomeButtonBar())); + + // Separator line + this.AddChild(new HorizontalLine(alpha: 50) + { + Margin = new BorderDouble(0, 5) + }); + + this.AddChild(jogControls); + + this.AddChild(CreateDisableableContainer(GetHWDestinationBar())); + } + + public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme) + { + var widget = new MovementControls(printer, theme); + + var editButton = new IconButton(AggContext.StaticData.LoadIcon("icon_edit.png", 16, 16, IconColor.Theme), theme); + editButton.Click += (s, e) => widget.EditOptions(); + + return new SectionWidget( + "Movement".Localize(), + widget, + theme, + editButton); + } + public override void OnClosed(ClosedEventArgs e) { unregisterEvents?.Invoke(this, null); base.OnClosed(e); } + private void EditOptions() + { + if (editManualMovementSettingsWindow == null) + { + editManualMovementSettingsWindow = new EditManualMovementSpeedsWindow("Movement Speeds".Localize(), printer.Settings.Helpers.GetMovementSpeedsString(), SetMovementSpeeds); + editManualMovementSettingsWindow.Closed += (s, e) => + { + editManualMovementSettingsWindow = null; + }; + } + else + { + editManualMovementSettingsWindow.BringToFront(); + } + } + /// /// Helper method to create DisableableWidget containers and populate the DisableableWidgets local property. /// @@ -87,63 +142,6 @@ namespace MatterHackers.MatterControl.PrinterControls return container; } - public MovementControls(PrinterConfig printer, ThemeConfig theme) - : base (FlowDirection.TopToBottom) - { - this.printer = printer; - this.theme = theme; - - var buttonFactory = theme.DisableableControlBase; - - Button editButton = buttonFactory.GenerateIconButton(AggContext.StaticData.LoadIcon("icon_edit.png", 16, 16, IconColor.Theme)); - editButton.Click += (sender, e) => - { - if (editManualMovementSettingsWindow == null) - { - editManualMovementSettingsWindow = new EditManualMovementSpeedsWindow("Movement Speeds".Localize(), printer.Settings.Helpers.GetMovementSpeedsString(), SetMovementSpeeds); - editManualMovementSettingsWindow.Closed += (s, e2) => - { - editManualMovementSettingsWindow = null; - }; - } - else - { - editManualMovementSettingsWindow.BringToFront(); - } - }; - - jogControls = new JogControls(printer, new XYZColors()) - { - HAnchor = HAnchor.Left | HAnchor.Stretch, - Margin = 0 - }; - - manualControlsLayout = new FlowLayoutWidget(FlowDirection.TopToBottom) - { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit, - }; - - manualControlsLayout.AddChild(CreateDisableableContainer(GetHomeButtonBar())); - - // Separator line - manualControlsLayout.AddChild(new HorizontalLine(alpha: 50) - { - Margin = new BorderDouble(0, 5) - }); - - manualControlsLayout.AddChild(jogControls); - - manualControlsLayout.AddChild(CreateDisableableContainer(GetHWDestinationBar())); - - this.AddChild( - new SectionWidget( - "Movement".Localize(), - manualControlsLayout, - theme, - editButton)); - } - private void SetMovementSpeeds(string speedString) { if (!string.IsNullOrEmpty(speedString)) @@ -369,5 +367,4 @@ namespace MatterHackers.MatterControl.PrinterControls base.OnClosed(e); } } - } diff --git a/PrinterControls/ControlWidgets/PowerControls.cs b/PrinterControls/ControlWidgets/PowerControls.cs index b0c5ebcfb..af4ebca97 100644 --- a/PrinterControls/ControlWidgets/PowerControls.cs +++ b/PrinterControls/ControlWidgets/PowerControls.cs @@ -31,6 +31,7 @@ using System; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.Localizations; +using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.SlicerConfiguration; namespace MatterHackers.MatterControl.PrinterControls @@ -41,33 +42,26 @@ namespace MatterHackers.MatterControl.PrinterControls private CheckBox atxPowertoggleSwitch; private PrinterConfig printer; - public PowerControls(PrinterConfig printer, int headingPointSize) + private PowerControls(PrinterConfig printer) : base(FlowDirection.TopToBottom) { this.printer = printer; - - var fanControlsGroupBox = new AltGroupBox(new TextWidget("ATX Power Control".Localize(), pointSize: headingPointSize, textColor: ActiveTheme.Instance.SecondaryAccentColor, bold: true)); - fanControlsGroupBox.Margin = new BorderDouble(0); - fanControlsGroupBox.BorderColor = ActiveTheme.Instance.PrimaryTextColor; - fanControlsGroupBox.HAnchor |= HAnchor.Stretch; - this.AddChild(fanControlsGroupBox); + this.HAnchor = HAnchor.Stretch; + this.VAnchor = VAnchor.Stretch; + this.Visible = printer.Settings.GetValue(SettingsKey.has_power_control); + this.Enabled = printer.Connection.PrinterIsConnected; atxPowertoggleSwitch = ImageButtonFactory.CreateToggleSwitch(false); + atxPowertoggleSwitch.HAnchor = HAnchor.Left; atxPowertoggleSwitch.Margin = new BorderDouble(6, 0, 6, 6); atxPowertoggleSwitch.CheckedStateChanged += (sender, e) => { printer.Connection.AtxPowerEnabled = atxPowertoggleSwitch.Checked; }; - - FlowLayoutWidget paddingContainer = new FlowLayoutWidget(); - paddingContainer.Padding = new BorderDouble(3, 5, 3, 0); - { - paddingContainer.AddChild(atxPowertoggleSwitch); - } - fanControlsGroupBox.AddChild(paddingContainer); + this.AddChild(atxPowertoggleSwitch); printer.Connection.CommunicationStateChanged.RegisterEvent((s, e) => - { + { this.Visible = printer.Settings.GetValue(SettingsKey.has_power_control); this.Enabled = printer.Connection.PrinterIsConnected; }, ref unregisterEvents); @@ -76,12 +70,14 @@ namespace MatterHackers.MatterControl.PrinterControls { this.atxPowertoggleSwitch.Checked = printer.Connection.AtxPowerEnabled; }, ref unregisterEvents); + } - this.Visible = printer.Settings.GetValue(SettingsKey.has_power_control); - this.Enabled = printer.Connection.PrinterIsConnected; - - this.HAnchor = HAnchor.Stretch; - this.VAnchor = VAnchor.Stretch; + public static SectionWidget CreateSection(PrinterConfig printer, ThemeConfig theme) + { + return new SectionWidget( + "ATX Power Control".Localize(), + new PowerControls(printer), + theme); } public override void OnClosed(ClosedEventArgs e) diff --git a/PrinterControls/ManualPrinterControls.cs b/PrinterControls/ManualPrinterControls.cs index bfbd13b16..a91d8bcae 100644 --- a/PrinterControls/ManualPrinterControls.cs +++ b/PrinterControls/ManualPrinterControls.cs @@ -29,7 +29,10 @@ either expressed or implied, of the FreeBSD Project. using System; using MatterHackers.Agg; +using MatterHackers.Agg.Platform; using MatterHackers.Agg.UI; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.MatterControl.PrinterControls; using MatterHackers.MatterControl.SlicerConfiguration; @@ -109,48 +112,46 @@ namespace MatterHackers.MatterControl }; this.AddChild(controlsTopToBottomLayout); - movementControlsContainer = new MovementControls(printer, theme) - { - Margin = new BorderDouble(top: 6), - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit - }; - controlsTopToBottomLayout.AddChild(movementControlsContainer); + SectionWidget sectionWidget; + + sectionWidget = MovementControls.CreateSection(printer, theme); + controlsTopToBottomLayout.AddChild(sectionWidget); + movementControlsContainer = sectionWidget.ContentPanel as MovementControls; if (!printer.Settings.GetValue(SettingsKey.has_hardware_leveling)) { - calibrationControlsContainer = new CalibrationControls(printer, theme); - controlsTopToBottomLayout.AddChild(calibrationControlsContainer); + sectionWidget = CalibrationControls.CreateSection(printer, theme); + controlsTopToBottomLayout.AddChild(sectionWidget); + calibrationControlsContainer = sectionWidget.ContentPanel; } - macroControlsContainer = new MacroControls(printer, theme); - controlsTopToBottomLayout.AddChild(macroControlsContainer); + sectionWidget = MacroControls.CreateSection(printer, theme); + controlsTopToBottomLayout.AddChild(sectionWidget); + macroControlsContainer = sectionWidget.ContentPanel; - var linearPanel = new FlowLayoutWidget() - { - HAnchor = HAnchor.Stretch - }; - controlsTopToBottomLayout.AddChild(linearPanel); - - fanControlsContainer = new FanControls(printer.Connection, theme); if (printer.Settings.GetValue(SettingsKey.has_fan)) { - controlsTopToBottomLayout.AddChild(fanControlsContainer); + sectionWidget = FanControls.CreateSection(printer, theme); + controlsTopToBottomLayout.AddChild(sectionWidget); + fanControlsContainer = sectionWidget.ContentPanel; } #if !__ANDROID__ - controlsTopToBottomLayout.AddChild(new PowerControls(printer, headingPointSize) - { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit - }); + sectionWidget = PowerControls.CreateSection(printer, theme); + controlsTopToBottomLayout.AddChild(sectionWidget); #endif - tuningAdjustmentControlsContainer = new AdjustmentControls(printer, theme) + + sectionWidget = AdjustmentControls.CreateSection(printer, theme); + controlsTopToBottomLayout.AddChild(sectionWidget); + tuningAdjustmentControlsContainer = sectionWidget.ContentPanel; + + + // Enforce panel padding in sidebar + foreach (var widget in controlsTopToBottomLayout.Children()) { - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit - }; - controlsTopToBottomLayout.AddChild(tuningAdjustmentControlsContainer); + var contentPanel = widget.ContentPanel; + contentPanel.Padding = new BorderDouble(16, 16, 8, 2); + } // HACK: this is a hack to make the layout engine fire again for this control UiThread.RunOnIdle(() => tuningAdjustmentControlsContainer.Width = tuningAdjustmentControlsContainer.Width + 1);