From bd10edc2aaa1ec1d8e9e6b5d979520d0a7933a13 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Tue, 27 Jun 2017 18:41:34 -0700 Subject: [PATCH] Revise temperature widgets --- ActionBar/PrintStatusRow.cs | 2 +- ActionBar/TemperatureWidgetBase.cs | 116 ++-- ActionBar/TemperatureWidgetBed.cs | 95 ++- ActionBar/TemperatureWidgetExtruder.cs | 212 +++++- ActionBar/TouchScreenPrintStatusRow.cs | 2 +- ApplicationView/ThemeConfig.cs | 1 + .../ApplicationSettings/SettingsItem.cs | 31 +- MatterControl.csproj | 7 - .../BaseClasses/PartPreview3DWidget.cs | 2 - PartPreviewWindow/OverflowDropdown.cs | 10 +- PartPreviewWindow/View3D/View3DWidget.cs | 78 +-- .../ControlWidgets/TemperatureControls.cs | 59 -- .../EditTemperaturePresetsWindow.cs | 238 ------- PrinterControls/ManualPrinterControls.cs | 88 --- PrinterControls/TemperatureIndicator.cs | 617 ------------------ .../SettingsControlSelectors.cs | 20 +- StaticData/Icons/bed.png | Bin 0 -> 1207 bytes StaticData/Icons/hotend.png | Bin 0 -> 1214 bytes Submodules/agg-sharp | 2 +- 19 files changed, 382 insertions(+), 1198 deletions(-) delete mode 100644 PrinterControls/ControlWidgets/TemperatureControls.cs delete mode 100644 PrinterControls/EditTemperaturePresetsWindow.cs delete mode 100644 PrinterControls/TemperatureIndicator.cs create mode 100644 StaticData/Icons/bed.png create mode 100644 StaticData/Icons/hotend.png diff --git a/ActionBar/PrintStatusRow.cs b/ActionBar/PrintStatusRow.cs index 58bec18ea..e8e67d61b 100644 --- a/ActionBar/PrintStatusRow.cs +++ b/ActionBar/PrintStatusRow.cs @@ -86,7 +86,7 @@ namespace MatterHackers.MatterControl.ActionBar { var temperatureWidgets = new FlowLayoutWidget(); { - extruderTemperatureWidget = new TemperatureWidgetExtruder(); + extruderTemperatureWidget = new TemperatureWidgetExtruder(ApplicationController.Instance.Theme.MenuButtonFactory); temperatureWidgets.AddChild(extruderTemperatureWidget); bedTemperatureWidget = new TemperatureWidgetBed(); diff --git a/ActionBar/TemperatureWidgetBase.cs b/ActionBar/TemperatureWidgetBase.cs index 3cb8897ac..98bf2cd4f 100644 --- a/ActionBar/TemperatureWidgetBase.cs +++ b/ActionBar/TemperatureWidgetBase.cs @@ -29,76 +29,108 @@ either expressed or implied, of the FreeBSD Project. using System; using MatterHackers.Agg; +using MatterHackers.Agg.PlatformAbstract; using MatterHackers.Agg.UI; -using MatterHackers.Agg.VertexSource; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.PrinterCommunication; +using MatterHackers.MatterControl.PartPreviewWindow; namespace MatterHackers.MatterControl.ActionBar { - internal class TemperatureWidgetBase : GuiWidget + internal class TemperatureWidgetBase : PopupButton { - private TextWidget currentTempIndicator; - protected TextWidget temperatureTypeName; + protected TextWidget CurrentTempIndicator; + private TextWidget goalTempIndicator; + protected TextWidget DirectionIndicator; - protected TextImageButtonFactory whiteButtonFactory = new TextImageButtonFactory() + protected ImageWidget ImageWidget = new ImageWidget(StaticData.Instance.LoadIcon("Hotend.png")) { - FixedHeight = 18 * GuiWidget.DeviceScale, - fontSize = 7, - normalFillColor = ApplicationController.Instance.Theme.TabBodyBackground, - normalTextColor = ActiveTheme.Instance.PrimaryTextColor, + VAnchor = VAnchor.ParentCenter, + Margin = new BorderDouble(right: 5) }; - private static RGBA_Bytes borderColor = new RGBA_Bytes(255, 255, 255); + protected EventHandler unregisterEvents; - public string IndicatorValue - { - get - { - return currentTempIndicator.Text; - } - set - { - if (currentTempIndicator.Text != value) - { - currentTempIndicator.Text = value; - } - } - } + protected virtual int ActualTemperature { get; } + protected virtual int TargetTemperature { get; } public TemperatureWidgetBase(string textValue) - : base(52 * GuiWidget.DeviceScale, 52 * GuiWidget.DeviceScale) { this.BackgroundColor = ApplicationController.Instance.Theme.SlightShade; this.Margin = new BorderDouble(0, 2) * GuiWidget.DeviceScale; + this.HAnchor = HAnchor.FitToChildren; + this.VAnchor = VAnchor.FitToChildren; + this.Cursor = Cursors.Hand; - temperatureTypeName = new TextWidget("", pointSize: 8) + this.AlignToRightEdge = true; + + var container = new FlowLayoutWidget() { - AutoExpandBoundsToText = true, - HAnchor = HAnchor.ParentCenter, - VAnchor = VAnchor.ParentTop, - Margin = new BorderDouble(0, 3), - TextColor = ActiveTheme.Instance.PrimaryTextColor, + HAnchor = HAnchor.FitToChildren, + VAnchor = VAnchor.FitToChildren, + Padding = new BorderDouble(5) }; - this.AddChild(temperatureTypeName); + this.AddChild(container); - currentTempIndicator = new TextWidget(textValue, pointSize: 11) + container.AddChild(this.ImageWidget); + + CurrentTempIndicator = new TextWidget(textValue, pointSize: 11) { TextColor = ActiveTheme.Instance.PrimaryTextColor, - HAnchor = HAnchor.ParentCenter, VAnchor = VAnchor.ParentCenter, AutoExpandBoundsToText = true }; - this.AddChild(currentTempIndicator); + container.AddChild(CurrentTempIndicator); - var buttonContainer = new GuiWidget() + container.AddChild(new TextWidget("/") { TextColor = ActiveTheme.Instance.PrimaryTextColor }); + + goalTempIndicator = new TextWidget(textValue, pointSize: 11) { - HAnchor = Agg.UI.HAnchor.ParentLeftRight, - Height = 18 * GuiWidget.DeviceScale + TextColor = ActiveTheme.Instance.PrimaryTextColor, + VAnchor = VAnchor.ParentCenter, + AutoExpandBoundsToText = true }; - this.AddChild(buttonContainer); + container.AddChild(goalTempIndicator); + + DirectionIndicator = new TextWidget(textValue, pointSize: 11) + { + TextColor = ActiveTheme.Instance.PrimaryTextColor, + VAnchor = VAnchor.ParentCenter, + AutoExpandBoundsToText = true, + Margin = new BorderDouble(left: 5) + }; + container.AddChild(DirectionIndicator); } + protected void DisplayCurrentTemperature() + { + int actualTemperature = this.ActualTemperature; + int targetTemperature = this.TargetTemperature; + + if (targetTemperature > 0) + { + int targetTemp = (int)(targetTemperature + 0.5); + int actualTemp = (int)(actualTemperature + 0.5); + + this.goalTempIndicator.Text = $"{targetTemperature:0.#}°"; + this.DirectionIndicator.Text = (targetTemp < actualTemp) ? "↓" : "↑"; + } + else + { + this.DirectionIndicator.Text = ""; + } + + + this.CurrentTempIndicator.Text = $"{actualTemperature:0.#}"; + } + + protected virtual void SetTargetTemperature() { } + + protected virtual GuiWidget GetPopupContent() { return null; } + + public override void OnClosed(ClosedEventArgs e) + { + unregisterEvents?.Invoke(this, null); + base.OnClosed(e); + } } -} \ No newline at end of file +} diff --git a/ActionBar/TemperatureWidgetBed.cs b/ActionBar/TemperatureWidgetBed.cs index 02b3b89a5..2e6ca9b4c 100644 --- a/ActionBar/TemperatureWidgetBed.cs +++ b/ActionBar/TemperatureWidgetBed.cs @@ -27,9 +27,11 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ -using System; +using MatterHackers.Agg; +using MatterHackers.Agg.PlatformAbstract; using MatterHackers.Agg.UI; using MatterHackers.Localizations; +using MatterHackers.MatterControl.ConfigurationPage; using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.MatterControl.SlicerConfiguration; @@ -37,41 +39,25 @@ namespace MatterHackers.MatterControl.ActionBar { internal class TemperatureWidgetBed : TemperatureWidgetBase { - private EventHandler unregisterEvents; - private string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.".Localize(); private string waitingForBedToHeatMessage = "The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in SETTINGS -> Filament -> Temperatures.\n\n{1}".Localize(); private string waitingForBedToHeatTitle = "Waiting For Bed To Heat".Localize(); - //Not currently hooked up to anything public TemperatureWidgetBed() : base("150.3°") { - temperatureTypeName.Text = "Print Bed"; - DisplayCurrentTemperature(); - ToolTipText = "Current bed temperature".Localize(); + this.DisplayCurrentTemperature(); + this.ToolTipText = "Current bed temperature".Localize(); + this.ImageWidget.Image = StaticData.Instance.LoadIcon("Bed.png"); + + this.PopupContent = this.GetPopupContent(); PrinterConnection.Instance.BedTemperatureRead.RegisterEvent((s, e) => DisplayCurrentTemperature(), ref unregisterEvents); } - private void DisplayCurrentTemperature() - { - string tempDirectionIndicator = ""; + protected override int TargetTemperature => (int)PrinterConnection.Instance.TargetBedTemperature; - if (PrinterConnection.Instance.TargetBedTemperature > 0) - { - if ((int)(PrinterConnection.Instance.TargetBedTemperature + 0.5) < (int)(PrinterConnection.Instance.ActualBedTemperature + 0.5)) - { - tempDirectionIndicator = "↓"; - } - else if ((int)(PrinterConnection.Instance.TargetBedTemperature + 0.5) > (int)(PrinterConnection.Instance.ActualBedTemperature + 0.5)) - { - tempDirectionIndicator = "↑"; - } - } - - this.IndicatorValue = string.Format(" {0:0.#}°{1}", PrinterConnection.Instance.ActualBedTemperature, tempDirectionIndicator); - } + protected override int ActualTemperature => (int)PrinterConnection.Instance.ActualBedTemperature; protected override void SetTargetTemperature() { @@ -93,10 +79,65 @@ namespace MatterHackers.MatterControl.ActionBar } } - public override void OnClosed(ClosedEventArgs e) + protected override GuiWidget GetPopupContent() { - unregisterEvents?.Invoke(this, null); - base.OnClosed(e); + var widget = new IgnoredPopupWidget() + { + Width = 300, + HAnchor = HAnchor.AbsolutePosition, + VAnchor = VAnchor.FitToChildren, + BackgroundColor = RGBA_Bytes.White, + Padding = new BorderDouble(12, 0) + }; + + var container = new FlowLayoutWidget(FlowDirection.TopToBottom) + { + HAnchor = HAnchor.ParentLeftRight, + VAnchor = VAnchor.FitToChildren | VAnchor.ParentTop, + BackgroundColor = RGBA_Bytes.White + }; + widget.AddChild(container); + + container.AddChild(new SettingsItem( + "Heated Bed".Localize(), + new SettingsItem.ToggleSwitchConfig() + { + Checked = false, + ToggleAction = (itemChecked) => + { + var goalTemp = itemChecked ? ActiveSliceSettings.Instance.GetValue(SettingsKey.bed_temperature) : 0; + + if (PrinterConnection.Instance.PrinterIsPrinting + && PrinterConnection.Instance.PrintingState == DetailedPrintingState.HeatingBed + && goalTemp != PrinterConnection.Instance.TargetBedTemperature) + { + string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print."; + string message = string.Format( + "The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", + PrinterConnection.Instance.TargetBedTemperature, + sliceSettingsNote); + + StyledMessageBox.ShowMessageBox(null, message, "Waiting For Bed To Heat"); + } + else + { + if (itemChecked) + { + SetTargetTemperature(); + } + else + { + PrinterConnection.Instance.TargetBedTemperature = 0; + + //string displayString = string.Format("{0:0.0}°C", PrinterConnectionAndCommunication.Instance.TargetBedTemperature); + //targetTemperatureDisplay.SetDisplayString(displayString); + } + } + } + }, + enforceGutter: false)); + + return widget; } } } \ No newline at end of file diff --git a/ActionBar/TemperatureWidgetExtruder.cs b/ActionBar/TemperatureWidgetExtruder.cs index 5f2f9a699..f6ddb8cb2 100644 --- a/ActionBar/TemperatureWidgetExtruder.cs +++ b/ActionBar/TemperatureWidgetExtruder.cs @@ -27,11 +27,14 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ -using MatterHackers.Localizations; -using MatterHackers.MatterControl.PrinterCommunication; -using MatterHackers.MatterControl.SlicerConfiguration; -using System; +using System.Linq; +using MatterHackers.Agg; using MatterHackers.Agg.UI; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.ConfigurationPage; +using MatterHackers.MatterControl.PrinterCommunication; +using MatterHackers.MatterControl.PrinterControls; +using MatterHackers.MatterControl.SlicerConfiguration; namespace MatterHackers.MatterControl.ActionBar { @@ -39,38 +42,28 @@ namespace MatterHackers.MatterControl.ActionBar { // Extruder widget is hard-wired to extruder 0 private const int extruderIndex = 0; - private EventHandler unregisterEvents; + private int moveAmount = 1; private string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.".Localize(); private string waitingForExtruderToHeatMessage = "The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}".Localize(); - public TemperatureWidgetExtruder() + private TextImageButtonFactory buttonFactory; + + public TemperatureWidgetExtruder(TextImageButtonFactory buttonFactory) : base("150.3°") { - temperatureTypeName.Text = "Extruder"; - DisplayCurrentTemperature(); + this.buttonFactory = buttonFactory; + this.DisplayCurrentTemperature(); + this.ToolTipText = "Current extruder temperature".Localize(); - ToolTipText = "Current extruder temperature".Localize(); + this.PopupContent = this.GetPopupContent(); PrinterConnection.Instance.ExtruderTemperatureRead.RegisterEvent((s, e) => DisplayCurrentTemperature(), ref unregisterEvents); } - private void DisplayCurrentTemperature() - { - string tempDirectionIndicator = ""; - if (PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex) > 0) - { - if ((int)(PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex) + 0.5) < (int)(PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex) + 0.5)) - { - tempDirectionIndicator = "↓"; - } - else if ((int)(PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex) + 0.5) > (int)(PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex) + 0.5)) - { - tempDirectionIndicator = "↑"; - } - } - this.IndicatorValue = string.Format(" {0:0.#}°{1}", PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex), tempDirectionIndicator); - } + protected override int TargetTemperature => (int)PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex); + + protected override int ActualTemperature => (int)PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex); protected override void SetTargetTemperature() { @@ -92,10 +85,173 @@ namespace MatterHackers.MatterControl.ActionBar } } - public override void OnClosed(ClosedEventArgs e) + protected override GuiWidget GetPopupContent() { - unregisterEvents?.Invoke(this, null); - base.OnClosed(e); + var widget = new IgnoredPopupWidget() + { + Width = 300, + HAnchor = HAnchor.AbsolutePosition, + VAnchor = VAnchor.FitToChildren, + BackgroundColor = RGBA_Bytes.White, + Padding = new BorderDouble(12, 0) + }; + + var container = new FlowLayoutWidget(FlowDirection.TopToBottom) + { + HAnchor = HAnchor.ParentLeftRight, + VAnchor = VAnchor.FitToChildren | VAnchor.ParentTop, + BackgroundColor = RGBA_Bytes.White + }; + + container.AddChild(new SettingsItem( + string.Format("{0} {1}", "HotEnd".Localize(), extruderIndex + 1), + new SettingsItem.ToggleSwitchConfig() + { + Checked = false, + ToggleAction = (itemChecked) => + { + if (itemChecked) + { + // Set to goal temp + SetTargetTemperature(); + } + else + { + // Turn off extruder + PrinterConnection.Instance.SetTargetExtruderTemperature(extruderIndex, 0); + } + } + }, + enforceGutter: false)); + + var presetsSelector = new PresetSelectorWidget(string.Format($"{"Material".Localize()} {extruderIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, extruderIndex) + { + Margin = 0, + BackgroundColor = RGBA_Bytes.Transparent, + HAnchor = HAnchor.AbsolutePosition, + Width = 150 + }; + + this.Width = 150; + + // HACK: remove undesired item + var label = presetsSelector.Children().FirstOrDefault(); + label.Close(); + + var pulldownContainer = presetsSelector.FindNamedChildRecursive("Preset Pulldown Container"); + if (pulldownContainer != null) + { + pulldownContainer.Padding = 0; + } + + var dropList = presetsSelector.FindNamedChildRecursive("Material") as DropDownList; + if (dropList != null) + { + dropList.TextColor = buttonFactory.normalTextColor; + } + + container.AddChild(new SettingsItem("Material".Localize(), presetsSelector, enforceGutter: false)); + + widget.AddChild(container); + + // Extrude buttons {{ + + var moveButtonFactory = new TextImageButtonFactory() + { + FixedHeight = 20 * GuiWidget.DeviceScale, + FixedWidth = 30 * GuiWidget.DeviceScale, + fontSize = 8, + Margin = new BorderDouble(2, 0), + checkedBorderColor = buttonFactory.normalTextColor, + normalTextColor = buttonFactory.normalTextColor, + normalFillColor = buttonFactory.normalFillColor, + hoverFillColor = buttonFactory.hoverFillColor, + pressedFillColor = buttonFactory.pressedFillColor, + pressedTextColor = buttonFactory.pressedTextColor + }; + + var buttonContainer = new FlowLayoutWidget() + { + HAnchor = HAnchor.FitToChildren, + VAnchor = VAnchor.FitToChildren + }; + + var retractButton = buttonFactory.Generate("Retract".Localize()); + retractButton.ToolTipText = "Retract filament".Localize(); + retractButton.Margin = new BorderDouble(8, 0); + retractButton.Click += (s, e) => + { + PrinterConnection.Instance.MoveExtruderRelative(moveAmount * -1, MovementControls.EFeedRate(extruderIndex), extruderIndex); + }; + buttonContainer.AddChild(retractButton); + + var extrudeButton = buttonFactory.Generate("Extrude".Localize()); + extrudeButton.ToolTipText = "Extrude filament".Localize(); + extrudeButton.Margin = 0; + extrudeButton.Click += (s, e) => + { + PrinterConnection.Instance.MoveExtruderRelative(moveAmount, MovementControls.EFeedRate(extruderIndex), extruderIndex); + }; + buttonContainer.AddChild(extrudeButton); + + container.AddChild(new SettingsItem( + string.Format("{0} {1}", "Extruder".Localize(), extruderIndex + 1), + buttonContainer, + enforceGutter: false)); + + var moveButtonsContainer = new FlowLayoutWidget() + { + VAnchor = VAnchor.FitToChildren, + HAnchor = HAnchor.FitToChildren, + Margin = new BorderDouble(0, 3) + }; + + RadioButton oneButton = moveButtonFactory.GenerateRadioButton("1"); + oneButton.VAnchor = VAnchor.ParentCenter; + oneButton.CheckedStateChanged += (s, e) => + { + if (oneButton.Checked) + { + moveAmount = 1; + } + }; + moveButtonsContainer.AddChild(oneButton); + + RadioButton tenButton = moveButtonFactory.GenerateRadioButton("10"); + tenButton.VAnchor = VAnchor.ParentCenter; + tenButton.CheckedStateChanged += (s, e) => + { + if (tenButton.Checked) + { + moveAmount = 10; + } + }; + moveButtonsContainer.AddChild(tenButton); + + RadioButton oneHundredButton = moveButtonFactory.GenerateRadioButton("100"); + oneHundredButton.VAnchor = VAnchor.ParentCenter; + oneHundredButton.CheckedStateChanged += (s, e) => + { + if (oneHundredButton.Checked) + { + moveAmount = 100; + } + }; + moveButtonsContainer.AddChild(oneHundredButton); + + tenButton.Checked = true; + + moveButtonsContainer.AddChild(new TextWidget("mm", textColor: buttonFactory.normalTextColor, pointSize: 8) + { + VAnchor = VAnchor.ParentCenter, + Margin = new BorderDouble(3, 0) + }); + + container.AddChild(new SettingsItem("Distance".Localize(), moveButtonsContainer, enforceGutter: false)); + + // Extrude buttons }} + + return widget; } } } \ No newline at end of file diff --git a/ActionBar/TouchScreenPrintStatusRow.cs b/ActionBar/TouchScreenPrintStatusRow.cs index b37275c4b..2d19b3682 100644 --- a/ActionBar/TouchScreenPrintStatusRow.cs +++ b/ActionBar/TouchScreenPrintStatusRow.cs @@ -114,7 +114,7 @@ namespace MatterHackers.MatterControl.ActionBar tempWidgets.Width = 120; - extruderTemperatureWidget = new TemperatureWidgetExtruder(); + extruderTemperatureWidget = new TemperatureWidgetExtruder(ApplicationController.Instance.Theme.MenuButtonFactory); //extruderTemperatureWidget.Margin = new BorderDouble(right: 6); extruderTemperatureWidget.VAnchor = VAnchor.ParentTop; diff --git a/ApplicationView/ThemeConfig.cs b/ApplicationView/ThemeConfig.cs index 840f4182a..17aafc1a2 100644 --- a/ApplicationView/ThemeConfig.cs +++ b/ApplicationView/ThemeConfig.cs @@ -187,6 +187,7 @@ namespace MatterHackers.MatterControl pressedTextColor = RGBA_Bytes.Black, disabledTextColor = theme.TertiaryBackgroundColor, normalFillColor = RGBA_Bytes.LightGray, + pressedFillColor = RGBA_Bytes.LightGray, Margin = new BorderDouble(8, 0), borderWidth = 0, FixedHeight = 32, diff --git a/ConfigurationPage/ApplicationSettings/SettingsItem.cs b/ConfigurationPage/ApplicationSettings/SettingsItem.cs index f0fb689d1..29b142181 100644 --- a/ConfigurationPage/ApplicationSettings/SettingsItem.cs +++ b/ConfigurationPage/ApplicationSettings/SettingsItem.cs @@ -18,9 +18,10 @@ namespace MatterHackers.MatterControl.ConfigurationPage private RGBA_Bytes menuTextColor = RGBA_Bytes.Black; - public SettingsItem(string text, ToggleSwitchConfig toggleSwitchConfig = null, GuiWidget optionalControls = null, ImageBuffer iconImage = null) + public SettingsItem(string text, ToggleSwitchConfig toggleSwitchConfig = null, GuiWidget optionalControls = null, ImageBuffer iconImage = null, bool enforceGutter = true) : base(FlowDirection.LeftToRight) { + this.HAnchor = HAnchor.ParentLeftRight; var switchContainer = new FlowLayoutWidget() { VAnchor = VAnchor.ParentCenter, @@ -40,16 +41,16 @@ namespace MatterHackers.MatterControl.ConfigurationPage switchContainer.SetBoundsToEncloseChildren(); } - CreateChildControls(text, switchContainer, optionalControls, iconImage); + CreateChildControls(text, switchContainer, optionalControls, enforceGutter, iconImage); } - public SettingsItem (string text, GuiWidget settingsControls, GuiWidget optionalControls = null, ImageBuffer iconImage = null) + public SettingsItem (string text, GuiWidget settingsControls, GuiWidget optionalControls = null, ImageBuffer iconImage = null, bool enforceGutter = true) : base (FlowDirection.LeftToRight) { - CreateChildControls(text, settingsControls, optionalControls, iconImage); + CreateChildControls(text, settingsControls, optionalControls, enforceGutter, iconImage); } - private void CreateChildControls(string text, GuiWidget settingsControls, GuiWidget optionalControls, ImageBuffer imageBuffer = null) + private void CreateChildControls(string text, GuiWidget settingsControls, GuiWidget optionalControls, bool enforceGutter, ImageBuffer imageBuffer = null) { this.HAnchor = HAnchor.ParentLeftRight; this.MinimumSize = new Vector2(0, 40); @@ -61,13 +62,6 @@ namespace MatterHackers.MatterControl.ConfigurationPage optionalControls.VAnchor |= VAnchor.ParentCenter; } - var sectionLabel = new TextWidget(text) - { - AutoExpandBoundsToText = true, - TextColor = menuTextColor, - VAnchor = VAnchor.ParentCenter - }; - if (imageBuffer != null) { if (!ActiveTheme.Instance.IsDarkTheme) @@ -81,7 +75,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage VAnchor = VAnchor.ParentCenter }); } - else + else if (enforceGutter) { // Add an icon place holder to get consistent label indenting on items lacking icons this.AddChild(new GuiWidget() @@ -92,13 +86,20 @@ namespace MatterHackers.MatterControl.ConfigurationPage }); } - // Add flag to align all labels - fill empty space if sectionIconPath is empty - this.AddChild(sectionLabel, -1); + this.AddChild(new TextWidget(text) + { + AutoExpandBoundsToText = true, + TextColor = menuTextColor, + VAnchor = VAnchor.ParentCenter, + }); + this.AddChild(new HorizontalSpacer()); + if (optionalControls != null) { this.AddChild(optionalControls); } + this.AddChild(settingsControls); } } diff --git a/MatterControl.csproj b/MatterControl.csproj index 3732ed501..3137ed64d 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -266,9 +266,6 @@ - - Code - @@ -319,9 +316,6 @@ - - Code - @@ -372,7 +366,6 @@ - diff --git a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs index d393dd516..f989b1c91 100644 --- a/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs +++ b/PartPreviewWindow/BaseClasses/PartPreview3DWidget.cs @@ -49,8 +49,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow protected bool autoRotating = false; protected bool allowAutoRotate = false; - protected GuiWidget buttonRightPanelDisabledCover; - public MeshViewerWidget meshViewerWidget; private EventHandler unregisterEvents; diff --git a/PartPreviewWindow/OverflowDropdown.cs b/PartPreviewWindow/OverflowDropdown.cs index 65ca3cd46..08b1800aa 100644 --- a/PartPreviewWindow/OverflowDropdown.cs +++ b/PartPreviewWindow/OverflowDropdown.cs @@ -109,7 +109,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private bool menuVisible = false; private PopupWidget popupWidget; - //private GuiWidget buttonView; + public PopupButton() + { + } + public PopupButton(GuiWidget buttonView) { this.Margin = 3; @@ -139,8 +142,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public override void OnMouseUp(MouseEventArgs mouseEvent) { + // HACK: Child controls seem to be interfering with this.MouseCaptured - this short term workaround ensure we get clicks but likely mean mouse down outside of the control will fire the popup + bool mouseUpInBounds = this.PositionWithinLocalBounds(mouseEvent.X, mouseEvent.Y); + // Only show the popup if the menu was hidden as the mouse events started - if ((buttonView.MouseCaptured || this.MouseCaptured) + if ((mouseUpInBounds || buttonView?.MouseCaptured == true) && !menuVisibileAtMouseDown) { ShowPopup(); diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index d1f9cce4c..fa9f9a40c 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -27,7 +27,6 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ using System; -using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; @@ -46,6 +45,7 @@ using MatterHackers.Agg.UI; using MatterHackers.Agg.VertexSource; using MatterHackers.DataConverters3D; using MatterHackers.Localizations; +using MatterHackers.MatterControl.ActionBar; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.DataStorage; using MatterHackers.MatterControl.Library; @@ -57,8 +57,6 @@ using MatterHackers.PolygonMesh; using MatterHackers.RayTracer; using MatterHackers.RenderOpenGl; using MatterHackers.VectorMath; -using MatterHackers.RayTracer.Traceable; -using MatterHackers.MatterControl.ActionBar; namespace MatterHackers.MatterControl.PartPreviewWindow { @@ -273,8 +271,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow GuiWidget viewArea = new GuiWidget(); viewArea.AnchorAll(); { - //viewControls3D.RegisterViewer(meshViewerWidget); - PutOemImageOnBed(); meshViewerWidget.AnchorAll(); @@ -447,64 +443,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow editToolBar.AddChild(doEdittingButtonsContainer); buttonBottomPanel.AddChild(editToolBar); - - var extruderTemperatureWidget = new TemperatureWidgetExtruder() - { - VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren | VAnchor.AbsolutePosition, - HAnchor = HAnchor.ParentRight | HAnchor.FitToChildren, - Visible = true, - Margin = new BorderDouble(0, 0, 210, 5) - }; - this.AddChild(extruderTemperatureWidget); - - if (ActiveSliceSettings.Instance.GetValue(SettingsKey.has_heated_bed)) - { - var bedTemperatureWidget = new TemperatureWidgetBed() - { - VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren | VAnchor.AbsolutePosition, - HAnchor = HAnchor.ParentRight | HAnchor.FitToChildren, - Visible = true, - Margin = new BorderDouble(0, 0, 150, 5) - }; - this.AddChild(bedTemperatureWidget); - } } - GuiWidget buttonRightPanelHolder = new GuiWidget() - { - HAnchor = HAnchor.FitToChildren, - VAnchor = VAnchor.ParentBottomTop - }; - buttonRightPanelHolder.Name = "buttonRightPanelHolder"; - centerPartPreviewAndControls.AddChild(buttonRightPanelHolder); - - buttonRightPanelDisabledCover = new GuiWidget() - { - HAnchor = HAnchor.ParentLeftRight, - VAnchor = VAnchor.ParentBottomTop - }; - buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150); - buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover); - LockEditControls(); - GuiWidget leftRightSpacer = new GuiWidget(); - leftRightSpacer.HAnchor = HAnchor.ParentLeftRight; - buttonBottomPanel.AddChild(leftRightSpacer); - - if (windowType == WindowMode.StandAlone) - { - Button closeButton = smallMarginButtonFactory.Generate("Close".Localize()); - buttonBottomPanel.AddChild(closeButton); - closeButton.Click += (sender, e) => - { - CloseOnIdle(); - }; - } - mainContainerTopToBottom.AddChild(buttonBottomPanel); this.AddChild(mainContainerTopToBottom); + + var temperatureBar = new FlowLayoutWidget() + { + VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren, + HAnchor = HAnchor.ParentRight | HAnchor.FitToChildren, + Margin = new BorderDouble(right: 165, top: 5) + }; + + temperatureBar.AddChild(new TemperatureWidgetExtruder(ApplicationController.Instance.Theme.MenuButtonFactory) + { + Margin = new BorderDouble(right: 10) + }); + + if (ActiveSliceSettings.Instance.GetValue(SettingsKey.has_heated_bed)) + { + temperatureBar.AddChild(new TemperatureWidgetBed()); + } + this.AddChild(temperatureBar); + this.AnchorAll(); meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation; @@ -2004,7 +1968,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { viewIsInEditModePreLock = doEdittingButtonsContainer.Visible; doEdittingButtonsContainer.Visible = false; - buttonRightPanelDisabledCover.Visible = true; if (viewControls3D.PartSelectVisible == true) { viewControls3D.PartSelectVisible = false; @@ -2403,7 +2366,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public void UnlockEditControls() { - buttonRightPanelDisabledCover.Visible = false; processingProgressControl.Visible = false; if (viewIsInEditModePreLock) diff --git a/PrinterControls/ControlWidgets/TemperatureControls.cs b/PrinterControls/ControlWidgets/TemperatureControls.cs deleted file mode 100644 index 6b61b1087..000000000 --- a/PrinterControls/ControlWidgets/TemperatureControls.cs +++ /dev/null @@ -1,59 +0,0 @@ -using MatterHackers.Agg; -using MatterHackers.Agg.UI; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.MatterControl.SlicerConfiguration; -using System.Collections.Generic; - -namespace MatterHackers.MatterControl.PrinterControls -{ - public class TemperatureControls : ControlWidgetBase - { - public List ExtruderWidgetContainers = new List(); - public DisableableWidget BedTemperatureControlWidget; - - public TemperatureControls() - { - AltGroupBox temperatureGroupBox = new AltGroupBox(new TextWidget("Temperature".Localize(), pointSize: 18, textColor: ActiveTheme.Instance.SecondaryAccentColor)); - temperatureGroupBox.Margin = new BorderDouble(0); - - FlowLayoutWidget mainContainer = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom); - mainContainer.HAnchor = HAnchor.ParentLeftRight; - mainContainer.Margin = new BorderDouble(left: 0); - - temperatureGroupBox.AddChild(mainContainer); - RGBA_Bytes separatorLineColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 100); - - int numberOfHeatedExtruders = ActiveSliceSettings.Instance.Helpers.NumberOfHotEnds(); - if (numberOfHeatedExtruders > 1) - { - for (int i = 0; i < numberOfHeatedExtruders; i++) - { - DisableableWidget extruderTemperatureControlWidget = new DisableableWidget(); - extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget(i)); - mainContainer.AddChild(extruderTemperatureControlWidget); - mainContainer.AddChild(new HorizontalLine(50)); - ExtruderWidgetContainers.Add(extruderTemperatureControlWidget); - } - } - else - { - DisableableWidget extruderTemperatureControlWidget = new DisableableWidget(); - extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget()); - mainContainer.AddChild(extruderTemperatureControlWidget); - mainContainer.AddChild(new HorizontalLine(50)); - ExtruderWidgetContainers.Add(extruderTemperatureControlWidget); - } - - BedTemperatureControlWidget = new DisableableWidget(); - BedTemperatureControlWidget.AddChild(new BedTemperatureControlWidget()); - - if (ActiveSliceSettings.Instance.GetValue(SettingsKey.has_heated_bed)) - { - mainContainer.AddChild(BedTemperatureControlWidget); - } - - this.AddChild(temperatureGroupBox); - } - } -} \ No newline at end of file diff --git a/PrinterControls/EditTemperaturePresetsWindow.cs b/PrinterControls/EditTemperaturePresetsWindow.cs deleted file mode 100644 index 7d7cbfc6d..000000000 --- a/PrinterControls/EditTemperaturePresetsWindow.cs +++ /dev/null @@ -1,238 +0,0 @@ -/* -Copyright (c) 2014, Lars Brubaker -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; -using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.VectorMath; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace MatterHackers.MatterControl -{ - public class EditTemperaturePresetsWindow : SystemWindow - { - protected TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); - private EventHandler functionToCallOnSave; - private List listWithValues = new List(); - - public EditTemperaturePresetsWindow(string windowTitle, string temperatureSettings, EventHandler functionToCallOnSave) - : base(360, 300) - { - AlwaysOnTopOfMain = true; - Title = LocalizedString.Get(windowTitle); - - FlowLayoutWidget topToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom); - topToBottom.AnchorAll(); - topToBottom.Padding = new BorderDouble(3, 0, 3, 5); - - FlowLayoutWidget headerRow = new FlowLayoutWidget(FlowDirection.LeftToRight); - headerRow.HAnchor = HAnchor.ParentLeftRight; - headerRow.Margin = new BorderDouble(0, 3, 0, 0); - headerRow.Padding = new BorderDouble(0, 3, 0, 3); - - { - string tempShortcutPresetLabel = "Temperature Shortcut Presets".Localize(); - string tempShortcutPresetLabelFull = string.Format("{0}:", tempShortcutPresetLabel); - TextWidget elementHeader = new TextWidget(tempShortcutPresetLabelFull, pointSize: 14); - elementHeader.TextColor = ActiveTheme.Instance.PrimaryTextColor; - elementHeader.HAnchor = HAnchor.ParentLeftRight; - elementHeader.VAnchor = Agg.UI.VAnchor.ParentBottom; - - headerRow.AddChild(elementHeader); - } - - topToBottom.AddChild(headerRow); - - FlowLayoutWidget presetsFormContainer = new FlowLayoutWidget(FlowDirection.TopToBottom); - //ListBox printerListContainer = new ListBox(); - { - presetsFormContainer.HAnchor = HAnchor.ParentLeftRight; - presetsFormContainer.VAnchor = VAnchor.ParentBottomTop; - presetsFormContainer.Padding = new BorderDouble(3); - presetsFormContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor; - } - - topToBottom.AddChild(presetsFormContainer); - - this.functionToCallOnSave = functionToCallOnSave; - BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor; - - double oldHeight = textImageButtonFactory.FixedHeight; - textImageButtonFactory.FixedHeight = 30 * GuiWidget.DeviceScale; - - TextWidget tempTypeLabel = new TextWidget(windowTitle, textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10); - tempTypeLabel.Margin = new BorderDouble(3); - tempTypeLabel.HAnchor = HAnchor.ParentLeft; - presetsFormContainer.AddChild(tempTypeLabel); - - FlowLayoutWidget leftRightLabels = new FlowLayoutWidget(); - leftRightLabels.Padding = new BorderDouble(3, 6); - leftRightLabels.HAnchor |= Agg.UI.HAnchor.ParentLeftRight; - - GuiWidget hLabelSpacer = new GuiWidget(); - hLabelSpacer.HAnchor = HAnchor.ParentLeftRight; - - GuiWidget labelLabelContainer = new GuiWidget(); - labelLabelContainer.Width = 66; - labelLabelContainer.Height = 16; - labelLabelContainer.Margin = new BorderDouble(3, 0); - - string labelLabelTxt = "Label".Localize(); - TextWidget labelLabel = new TextWidget(string.Format(labelLabelTxt), textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10); - labelLabel.HAnchor = HAnchor.ParentLeft; - labelLabel.VAnchor = VAnchor.ParentCenter; - - labelLabelContainer.AddChild(labelLabel); - - GuiWidget tempLabelContainer = new GuiWidget(); - tempLabelContainer.Width = 66; - tempLabelContainer.Height = 16; - tempLabelContainer.Margin = new BorderDouble(3, 0); - - TextWidget tempLabel = new TextWidget(string.Format("Temp (C)"), textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10); - tempLabel.HAnchor = HAnchor.ParentLeft; - tempLabel.VAnchor = VAnchor.ParentCenter; - - tempLabelContainer.AddChild(tempLabel); - - leftRightLabels.AddChild(hLabelSpacer); - leftRightLabels.AddChild(labelLabelContainer); - leftRightLabels.AddChild(tempLabelContainer); - - presetsFormContainer.AddChild(leftRightLabels); - - // put in the temperature edit controls - string[] settingsArray = temperatureSettings.Split(','); - int preset_count = 1; - int tab_index = 0; - for (int i = 0; i < settingsArray.Count() - 1; i += 2) - { - FlowLayoutWidget leftRightEdit = new FlowLayoutWidget(); - leftRightEdit.Padding = new BorderDouble(3); - leftRightEdit.HAnchor |= Agg.UI.HAnchor.ParentLeftRight; - string presetLabelTxt = "Preset".Localize(); - TextWidget label = new TextWidget(string.Format("{1} {0}", preset_count, presetLabelTxt), textColor: ActiveTheme.Instance.PrimaryTextColor); - label.VAnchor = VAnchor.ParentCenter; - leftRightEdit.AddChild(label); - - leftRightEdit.AddChild(new HorizontalSpacer()); - - MHTextEditWidget typeEdit = new MHTextEditWidget(settingsArray[i], pixelWidth: 60, tabIndex: tab_index++); - - typeEdit.Margin = new BorderDouble(3); - leftRightEdit.AddChild(typeEdit); - listWithValues.Add(typeEdit); - - double temperatureValue = 0; - double.TryParse(settingsArray[i + 1], out temperatureValue); - MHNumberEdit valueEdit = new MHNumberEdit(temperatureValue, minValue: 0, pixelWidth: 60, tabIndex: tab_index++); - valueEdit.Margin = new BorderDouble(3); - leftRightEdit.AddChild(valueEdit); - listWithValues.Add(valueEdit); - - //leftRightEdit.AddChild(textImageButtonFactory.Generate("Delete".Localize())); - presetsFormContainer.AddChild(leftRightEdit); - preset_count += 1; - } - - { - FlowLayoutWidget leftRightEdit = new FlowLayoutWidget(); - leftRightEdit.Padding = new BorderDouble(3); - leftRightEdit.HAnchor |= Agg.UI.HAnchor.ParentLeftRight; - - TextWidget maxWidgetLabel = new TextWidget("Max Temp".Localize(), textColor: ActiveTheme.Instance.PrimaryTextColor); - maxWidgetLabel.VAnchor = VAnchor.ParentCenter; - leftRightEdit.AddChild(maxWidgetLabel); - leftRightEdit.AddChild(new HorizontalSpacer()); - - double maxTemperature = 0; - double.TryParse(settingsArray[settingsArray.Count() - 1], out maxTemperature); - MHNumberEdit valueEdit = new MHNumberEdit(maxTemperature, minValue: 0, pixelWidth: 60, tabIndex: tab_index); - valueEdit.Margin = new BorderDouble(3); - leftRightEdit.AddChild(valueEdit); - listWithValues.Add(valueEdit); - - presetsFormContainer.AddChild(leftRightEdit); - } - - textImageButtonFactory.FixedHeight = oldHeight; - - ShowAsSystemWindow(); - MinimumSize = new Vector2(360, 300); - - Button savePresetsButton = textImageButtonFactory.Generate("Save".Localize()); - savePresetsButton.Click += save_Click; - - Button cancelPresetsButton = textImageButtonFactory.Generate("Cancel".Localize()); - cancelPresetsButton.Click += (sender, e) => { CloseOnIdle(); }; - - FlowLayoutWidget buttonRow = new FlowLayoutWidget(); - buttonRow.HAnchor = HAnchor.ParentLeftRight; - buttonRow.Padding = new BorderDouble(0, 3); - - GuiWidget hButtonSpacer = new GuiWidget(); - hButtonSpacer.HAnchor = HAnchor.ParentLeftRight; - - buttonRow.AddChild(savePresetsButton); - buttonRow.AddChild(hButtonSpacer); - buttonRow.AddChild(cancelPresetsButton); - - topToBottom.AddChild(buttonRow); - - AddChild(topToBottom); - } - - private void save_Click(object sender, EventArgs mouseEvent) - { - UiThread.RunOnIdle(save_OnIdle); - } - - private void save_OnIdle() - { - bool first = true; - StringBuilder settingString = new StringBuilder(); - foreach (GuiWidget valueToAdd in listWithValues) - { - if (!first) - { - settingString.Append(","); - } - - settingString.Append(valueToAdd.Text); - first = false; - } - functionToCallOnSave(this, new StringEventArgs(settingString.ToString())); - CloseOnIdle(); - } - } -} \ No newline at end of file diff --git a/PrinterControls/ManualPrinterControls.cs b/PrinterControls/ManualPrinterControls.cs index 4128a7803..c02c5ab9e 100644 --- a/PrinterControls/ManualPrinterControls.cs +++ b/PrinterControls/ManualPrinterControls.cs @@ -81,8 +81,6 @@ namespace MatterHackers.MatterControl private MovementControls movementControlsContainer; - private TemperatureControls temperatureControlsContainer; - private TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); private DisableableWidget tuningAdjustmentControlsContainer; @@ -107,7 +105,6 @@ namespace MatterHackers.MatterControl }; AddActionControls(controlsTopToBottomLayout); - AddTemperatureControls(controlsTopToBottomLayout); AddMovementControls(controlsTopToBottomLayout); if (!ActiveSliceSettings.Instance.GetValue(SettingsKey.has_hardware_leveling)) @@ -185,12 +182,6 @@ namespace MatterHackers.MatterControl controlsTopToBottomLayout.AddChild(movementControlsContainer); } - private void AddTemperatureControls(FlowLayoutWidget controlsTopToBottomLayout) - { - temperatureControlsContainer = new TemperatureControls(); - controlsTopToBottomLayout.AddChild(temperatureControlsContainer); - } - private void onPrinterStatusChanged(object sender, EventArgs e) { SetVisibleControls(); @@ -201,12 +192,6 @@ namespace MatterHackers.MatterControl { if (!ActiveSliceSettings.Instance.PrinterSelected) { - // no printer selected - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -222,11 +207,6 @@ namespace MatterHackers.MatterControl case CommunicationStates.Disconnected: case CommunicationStates.AttemptingToConnect: case CommunicationStates.FailedToConnect: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); @@ -243,11 +223,6 @@ namespace MatterHackers.MatterControl case CommunicationStates.FinishedPrint: case CommunicationStates.Connected: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); @@ -262,11 +237,6 @@ namespace MatterHackers.MatterControl break; case CommunicationStates.PrintingFromSd: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); @@ -282,11 +252,6 @@ namespace MatterHackers.MatterControl case DetailedPrintingState.HeatingBed: case DetailedPrintingState.HeatingExtruder: case DetailedPrintingState.Printing: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); actionControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -306,11 +271,6 @@ namespace MatterHackers.MatterControl break; case CommunicationStates.Paused: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); @@ -336,7 +296,6 @@ namespace MatterHackers.MatterControl { event EventHandler unregisterEvents; - TemperatureControls temperatureControlsContainer; MovementControls movementControlsContainer; DisableableWidget fanControlsContainer; DisableableWidget tuningAdjustmentControlsContainer; @@ -385,22 +344,6 @@ namespace MatterHackers.MatterControl } } - // add temperature tab - { - GuiWidget temperatureContainerContainer = new GuiWidget(); - temperatureContainerContainer.Padding = new BorderDouble(6); - temperatureContainerContainer.AnchorAll(); - - temperatureControlsContainer = new TemperatureControls(); - temperatureControlsContainer.VAnchor |= VAnchor.ParentTop; - - temperatureContainerContainer.AddChild(temperatureControlsContainer); - - TabPage temperatureTabPage = new TabPage(temperatureContainerContainer, "Temperature".Localize().ToUpper()); - this.AddTab(new SimpleTextTabWidget(temperatureTabPage, "Temperature Tab", TabTextSize, - ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes())); - } - // add movement tab { GuiWidget movementContainerContainer = new GuiWidget(); @@ -499,12 +442,6 @@ namespace MatterHackers.MatterControl { if (ActiveSliceSettings.Instance == null) { - // no printer selected - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -521,11 +458,6 @@ namespace MatterHackers.MatterControl case CommunicationStates.Disconnected: case CommunicationStates.AttemptingToConnect: case CommunicationStates.FailedToConnect: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -542,11 +474,6 @@ namespace MatterHackers.MatterControl case CommunicationStates.FinishedPrint: case CommunicationStates.Connected: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); @@ -562,11 +489,6 @@ namespace MatterHackers.MatterControl break; case CommunicationStates.PrintingFromSd: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); @@ -582,11 +504,6 @@ namespace MatterHackers.MatterControl case DetailedPrintingState.HeatingBed: case DetailedPrintingState.HeatingExtruder: case DetailedPrintingState.Printing: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); @@ -608,11 +525,6 @@ namespace MatterHackers.MatterControl break; case CommunicationStates.Paused: - foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers) - { - extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); - } - temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); diff --git a/PrinterControls/TemperatureIndicator.cs b/PrinterControls/TemperatureIndicator.cs deleted file mode 100644 index 2b519eea7..000000000 --- a/PrinterControls/TemperatureIndicator.cs +++ /dev/null @@ -1,617 +0,0 @@ -/* -Copyright (c) 2014, Lars Brubaker -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.Font; -using MatterHackers.Agg.UI; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.MatterControl.PrinterCommunication; -using MatterHackers.MatterControl.SlicerConfiguration; -using MatterHackers.VectorMath; -using System; -using System.Collections.Generic; - -namespace MatterHackers.MatterControl -{ - public abstract class TemperatureControlBase : FlowLayoutWidget - { - protected TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory(); - protected TextWidget actualTempIndicator; - protected FlowLayoutWidget presetButtonsContainer; - - protected EditableNumberDisplay targetTemperatureDisplay; - - protected string label; - protected string editWindowLabel; - protected int extruderIndex0Based = 0; - - protected TemperatureControlBase(int extruderIndex0Based, string label, string editWindowLabel) - : base(FlowDirection.TopToBottom) - { - this.extruderIndex0Based = extruderIndex0Based; - this.label = label; - this.editWindowLabel = editWindowLabel; - SetDisplayAttributes(); - } - - protected abstract double GetActualTemperature(); - - protected abstract double GetTargetTemperature(); - - protected abstract void SetTargetTemperature(double targetTemp); - - protected abstract string GetTemperaturePresets(); - - protected abstract double GetPreheatTemperature(); - - protected abstract void SetTemperaturePresets(object sender, EventArgs stringEvent); - - protected abstract string HelpText { get; } - - private void SetDisplayAttributes() - { - this.textImageButtonFactory.normalFillColor = RGBA_Bytes.Transparent; - - this.textImageButtonFactory.FixedWidth = 38 * GuiWidget.DeviceScale; - this.textImageButtonFactory.FixedHeight = 20 * GuiWidget.DeviceScale; - this.textImageButtonFactory.fontSize = 10; - this.textImageButtonFactory.borderWidth = 1; - this.textImageButtonFactory.normalBorderColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 200); - this.textImageButtonFactory.hoverBorderColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 200); - - this.textImageButtonFactory.disabledTextColor = RGBA_Bytes.Gray; - this.textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor; - this.textImageButtonFactory.normalTextColor = ActiveTheme.Instance.SecondaryTextColor; - this.textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor; - - this.HAnchor = HAnchor.ParentLeftRight; - } - - public override RectangleDouble LocalBounds - { - get - { - return base.LocalBounds; - } - set - { - base.LocalBounds = value; - } - } - - protected FlowLayoutWidget tempEditContainer; - private EditTemperaturePresetsWindow editSettingsWindow; - - protected void AddChildElements() - { - Button editButton; - AltGroupBox groupBox = new AltGroupBox(textImageButtonFactory.GenerateGroupBoxLabelWithEdit(label, out editButton)); - editButton.Click += (sender, e) => - { - if (editSettingsWindow == null) - { - editSettingsWindow = new EditTemperaturePresetsWindow(editWindowLabel, GetTemperaturePresets(), SetTemperaturePresets); - editSettingsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { editSettingsWindow = null; }; - } - else - { - editSettingsWindow.BringToFront(); - } - }; - - groupBox.TextColor = ActiveTheme.Instance.PrimaryTextColor; - groupBox.BorderColor = ActiveTheme.Instance.PrimaryTextColor; - groupBox.HAnchor |= Agg.UI.HAnchor.ParentLeftRight; - // make sure the client area will get smaller when the contents get smaller - groupBox.ClientArea.VAnchor = Agg.UI.VAnchor.FitToChildren; - - FlowLayoutWidget controlRow = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom); - controlRow.Margin = new BorderDouble(top: 2); - controlRow.HAnchor |= HAnchor.ParentLeftRight; - { - // put in the temperature slider and preset buttons - - tempEditContainer = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom); - - { - GuiWidget sliderLabels = GetSliderLabels(); - - tempEditContainer.HAnchor = HAnchor.ParentLeftRight; - tempEditContainer.AddChild(sliderLabels); - tempEditContainer.Visible = false; - } - GuiWidget spacer = new GuiWidget(0, 10); - spacer.HAnchor = Agg.UI.HAnchor.ParentLeftRight; - - // put in the temperature indicators - { - FlowLayoutWidget temperatureIndicator = new FlowLayoutWidget(); - temperatureIndicator.HAnchor = Agg.UI.HAnchor.ParentLeftRight; - temperatureIndicator.Margin = new BorderDouble(bottom: 0); - temperatureIndicator.Padding = new BorderDouble(0, 3); - - // put in the actual temperature controls - { - var extruderActualIndicator = new FlowLayoutWidget(Agg.UI.FlowDirection.LeftToRight); - - extruderActualIndicator.Margin = new BorderDouble(3, 0); - TextWidget extruderActualLabel = new TextWidget("Actual".Localize() + ": ", pointSize: 10); - extruderActualLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; - extruderActualLabel.VAnchor = VAnchor.ParentCenter; - - actualTempIndicator = new TextWidget(string.Format("{0:0.0}°C", GetActualTemperature()), pointSize: 12); - actualTempIndicator.AutoExpandBoundsToText = true; - actualTempIndicator.TextColor = ActiveTheme.Instance.PrimaryTextColor; - actualTempIndicator.VAnchor = VAnchor.ParentCenter; - - extruderActualIndicator.AddChild(extruderActualLabel); - extruderActualIndicator.AddChild(actualTempIndicator); - - var extruderTargetLabel = new TextWidget("Target".Localize() + ": ", pointSize: 10); - extruderTargetLabel.Margin = new BorderDouble(left: 10); - extruderTargetLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; - extruderTargetLabel.VAnchor = VAnchor.ParentCenter; - - extruderActualIndicator.AddChild(extruderTargetLabel); - temperatureIndicator.AddChild(extruderActualIndicator); - } - - // put in the target temperature controls - temperatureIndicator.AddChild(GetTargetTemperatureDisplay()); - - FlowLayoutWidget helperTextWidget = GetHelpTextWidget(); - - LinkButtonFactory linkFactory = new LinkButtonFactory(); - linkFactory.textColor = ActiveTheme.Instance.PrimaryTextColor; - linkFactory.fontSize = 10; - - Button helpTextLink = linkFactory.Generate("?"); - - helpTextLink.Click += (sender, e) => - { - helperTextWidget.Visible = !helperTextWidget.Visible; - }; - - this.presetButtonsContainer = GetPresetsContainer(); - temperatureIndicator.AddChild(new HorizontalSpacer()); - temperatureIndicator.AddChild(presetButtonsContainer); - - controlRow.AddChild(temperatureIndicator); - } - } - - groupBox.AddChild(controlRow); - - this.AddChild(groupBox); - } - - private FlowLayoutWidget GetPresetsContainer() - { - FlowLayoutWidget presetsContainer = new FlowLayoutWidget(); - presetsContainer.Margin = new BorderDouble(3, 0); - - string presetsLabelTxt = "Presets".Localize(); - string presetsLabelTxtFull = string.Format("{0}: ", presetsLabelTxt); - - TextWidget presetsLabel = new TextWidget(presetsLabelTxtFull, pointSize: 10); - presetsLabel.Margin = new BorderDouble(right: 5); - presetsLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor; - presetsLabel.VAnchor = VAnchor.ParentCenter; - //presetsContainer.AddChild(presetsLabel); - - SortedDictionary labels = GetTemperaturePresetLabels(); - - foreach (KeyValuePair keyValue in labels) - { - Button tempButton = textImageButtonFactory.Generate(keyValue.Value); - tempButton.Margin = new BorderDouble(right: 5); - presetsContainer.AddChild(tempButton); - - // We push the value into a temp double so that the function will not point to a shared keyValue instance. - double temp = keyValue.Key; - tempButton.Click += (sender, e) => - { - UiThread.RunOnIdle(() => - { - SetTargetTemperature(temp); - tempEditContainer.Visible = false; - }); - }; - } - - this.textImageButtonFactory.FixedWidth = 76 * GuiWidget.DeviceScale; - { - Button tempButton = textImageButtonFactory.Generate("Preheat".Localize().ToUpper()); - tempButton.Margin = new BorderDouble(right: 5); - presetsContainer.AddChild(tempButton); - - // We push the value into a temp double so that the function will not point to a shared keyValue instance. - tempButton.Click += (sender, e) => - { - UiThread.RunOnIdle(() => - { - SetTargetTemperature(GetPreheatTemperature()); - tempEditContainer.Visible = false; - }); - }; - } - this.textImageButtonFactory.FixedWidth = 38 * GuiWidget.DeviceScale; - - return presetsContainer; - } - - private EditableNumberDisplay GetTargetTemperatureDisplay() - { - targetTemperatureDisplay = new EditableNumberDisplay(textImageButtonFactory, string.Format("{0:0.0}°C", GetTargetTemperature()), string.Format("{0:0.0}°C", 240.2)); - targetTemperatureDisplay.EditEnabled += (sender, e) => - { - tempEditContainer.Visible = true; - }; - - targetTemperatureDisplay.EditComplete += (sender, e) => - { - SetTargetTemperature(targetTemperatureDisplay.GetValue()); - }; - return targetTemperatureDisplay; - } - - private FlowLayoutWidget GetHelpTextWidget() - { - FlowLayoutWidget allText = new FlowLayoutWidget(FlowDirection.TopToBottom); - double textRegionWidth = 260 * GuiWidget.DeviceScale; - allText.Margin = new BorderDouble(3); - allText.Padding = new BorderDouble(3); - allText.HAnchor = HAnchor.ParentLeftRight; - allText.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay; - - double helpPointSize = 10; - EnglishTextWrapping wrapper = new EnglishTextWrapping(helpPointSize); - List wrappedText = wrapper.WrapText(HelpText, textRegionWidth - allText.Padding.Width); - foreach (string line in wrappedText) - { - GuiWidget helpWidget = new TextWidget(line, pointSize: helpPointSize, textColor: RGBA_Bytes.White); - allText.AddChild(helpWidget); - } - - allText.MinimumSize = new Vector2(textRegionWidth, allText.MinimumSize.y); - allText.Visible = false; - return allText; - } - - protected SortedDictionary GetTemperaturePresetLabels() - { - string sliderLabelDefinitions = GetTemperaturePresets(); - - SortedDictionary labels = new SortedDictionary() { }; - labels.Add(0.0, "OFF"); - - string[] labelItems = sliderLabelDefinitions.Split(','); - for (int i = 0; i < labelItems.Length / 2; i++) - { - string name = labelItems[i * 2]; - double temp; - double.TryParse(labelItems[i * 2 + 1], out temp); - - //Ignore temp values that already exits - if (temp > 0 && !labels.ContainsKey(temp)) - { - labels.Add(temp, name); - } - } - - return labels; - } - - protected GuiWidget GetSliderLabels() - { - GuiWidget sliderLabels = new GuiWidget(); - sliderLabels.HAnchor = HAnchor.ParentLeftRight; - sliderLabels.Height = 20 * GuiWidget.DeviceScale; - { - double buttonOffset = -10 * GuiWidget.DeviceScale; - var offPosition = buttonOffset; - - SortedDictionary labels = GetTemperaturePresetLabels(); - - bool firstElement = true; - double minButtonPosition = 0; - foreach (KeyValuePair keyValue in labels) - { - if (firstElement) - { - minButtonPosition = buttonOffset; - firstElement = false; - } - else - { - double wantedButtonPosition = buttonOffset; - minButtonPosition = Math.Max(minButtonPosition + textImageButtonFactory.FixedWidth + 3, wantedButtonPosition); - } - Button tempButton = textImageButtonFactory.Generate(keyValue.Value); - tempButton.OriginRelativeParent = new Vector2(minButtonPosition, 0); - - sliderLabels.AddChild(tempButton); - - // We push the value into a temp double so that the function will not point to a shared keyValue instance. - double temp = keyValue.Key; - tempButton.Click += (sender, e) => - { - SetTargetTemperature(temp); - tempEditContainer.Visible = false; - }; - } - } - - sliderLabels.HAnchor = HAnchor.FitToChildren; - sliderLabels.VAnchor = VAnchor.FitToChildren; - sliderLabels.MinimumSize = new Vector2(sliderLabels.Width, sliderLabels.Height); - return sliderLabels; - } - - private double MaxTemp - { - get - { - string presets = GetTemperaturePresets(); - string[] list = presets.Split(','); - double max = 0; - foreach (string item in list) - { - double value = 0; - double.TryParse(item, out value); - max = Math.Max(max, value); - } - return max; - } - } - - protected void onTemperatureRead(Object sender, EventArgs e) - { - TemperatureEventArgs tempArgs = e as TemperatureEventArgs; - if (tempArgs != null && tempArgs.Index0Based == extruderIndex0Based) - { - actualTempIndicator.Text = string.Format("{0:0.0}°C", tempArgs.Temperature); - } - } - - protected void ExtruderTemperatureSet(Object sender, EventArgs e) - { - TemperatureEventArgs tempArgs = e as TemperatureEventArgs; - if (tempArgs != null && tempArgs.Index0Based == extruderIndex0Based) - { - string displayString = string.Format("{0:0.0}°C", tempArgs.Temperature); - targetTemperatureDisplay.SetDisplayString(displayString); - } - } - - protected void BedTemperatureSet(Object sender, EventArgs e) - { - TemperatureEventArgs tempArgs = e as TemperatureEventArgs; - if (tempArgs != null) - { - string displayString = string.Format("{0:0.0}°C", tempArgs.Temperature); - targetTemperatureDisplay.SetDisplayString(displayString); - } - } - } - - public class ExtruderTemperatureControlWidget : TemperatureControlBase - { - public ExtruderTemperatureControlWidget() - : base(0, "Extruder Temperature".Localize(), "Extruder Temperature Settings".Localize()) - { - AddChildElements(); - AddHandlers(); - } - - public ExtruderTemperatureControlWidget(int extruderIndex0Based) - : base(extruderIndex0Based, string.Format("{0} {1}", "Extruder Temperature".Localize(), extruderIndex0Based + 1), "Extruder Temperature Settings".Localize()) - { - AddChildElements(); - AddHandlers(); - } - - override protected string HelpText - { - get { return "Override the current extruder temperature. While printing, the extruder temperature is normally determined by the 'Slice Settings'."; } - } - - private EventHandler unregisterEvents; - - private void AddHandlers() - { - PrinterConnection.Instance.ExtruderTemperatureRead.RegisterEvent(onTemperatureRead, ref unregisterEvents); - PrinterConnection.Instance.ExtruderTemperatureSet.RegisterEvent(ExtruderTemperatureSet, ref unregisterEvents); - } - - public override void OnClosed(ClosedEventArgs e) - { - unregisterEvents.Invoke(this, null); - base.OnClosed(e); - } - - protected override string GetTemperaturePresets() - { - string default_presets = ",0,,0,,0,250"; - - string presets; - string presetKey = string.Format("Extruder{0}PresetTemps", extruderIndex0Based + 1); - if (UserSettings.Instance.get(presetKey) == null) - { - UserSettings.Instance.set(presetKey, default_presets); - } - presets = UserSettings.Instance.get(presetKey); - return presets; - } - - protected override void SetTemperaturePresets(object seder, EventArgs e) - { - StringEventArgs stringEvent = e as StringEventArgs; - if (stringEvent != null && stringEvent.Data != null) - { - UserSettings.Instance.set(string.Format("Extruder{0}PresetTemps", extruderIndex0Based + 1), stringEvent.Data); - ApplicationController.Instance.ReloadAdvancedControlsPanel(); - } - } - - protected override double GetPreheatTemperature() - { - return ActiveSliceSettings.Instance.Helpers.ExtruderTemperature(extruderIndex0Based); - } - - protected override double GetTargetTemperature() - { - return PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based); - } - - protected override double GetActualTemperature() - { - return PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex0Based); - } - - protected override void SetTargetTemperature(double targetTemp) - { - UiThread.RunOnIdle(() => - { - double goalTemp = (int)(targetTemp + .5); - if (PrinterConnection.Instance.PrinterIsPrinting - && PrinterConnection.Instance.PrintingState == DetailedPrintingState.HeatingExtruder - && goalTemp != PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based)) - { - string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print."; - string message = string.Format("The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based), sliceSettingsNote); - StyledMessageBox.ShowMessageBox(null, message, "Waiting For Extruder To Heat"); - } - else - { - PrinterConnection.Instance.SetTargetExtruderTemperature(extruderIndex0Based, (int)(targetTemp + .5)); - string displayString = string.Format("{0:0.0}°C", PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based)); - targetTemperatureDisplay.SetDisplayString(displayString); - } - }); - } - } - - public class BedTemperatureControlWidget : TemperatureControlBase - { - public BedTemperatureControlWidget() - : base(0, "Bed Temperature".Localize(), "Bed Temperature Settings".Localize()) - { - AddChildElements(); - AddHandlers(); - this.Name = "Bed Temperature Controls Widget"; - } - - override protected string HelpText - { - get { return "Override the current bed temperature. While printing, the bed temperature is normally determined by the 'Slice Settings'."; } - } - - private EventHandler unregisterEvents; - - private void AddHandlers() - { - PrinterConnection.Instance.BedTemperatureRead.RegisterEvent(onTemperatureRead, ref unregisterEvents); - PrinterConnection.Instance.BedTemperatureSet.RegisterEvent(BedTemperatureSet, ref unregisterEvents); - } - - public override void OnClosed(ClosedEventArgs e) - { - if (unregisterEvents != null) - { - unregisterEvents(this, null); - } - base.OnClosed(e); - } - - private void onOffButtonClicked(object sender, EventArgs e) - { - SetTargetTemperature(0); - } - - protected override string GetTemperaturePresets() - { - string default_presets = ",0,,0,,0,150"; - string presets; - - if (UserSettings.Instance.get("BedPresetTemps") == null) - { - UserSettings.Instance.set("BedPresetTemps", default_presets); - } - presets = UserSettings.Instance.get("BedPresetTemps"); - - return presets; - } - - protected override void SetTemperaturePresets(object seder, EventArgs e) - { - StringEventArgs stringEvent = e as StringEventArgs; - if (stringEvent != null && stringEvent.Data != null) - { - UserSettings.Instance.set("BedPresetTemps", stringEvent.Data); - ApplicationController.Instance.ReloadAdvancedControlsPanel(); - } - } - - protected override double GetPreheatTemperature() - { - return ActiveSliceSettings.Instance.GetValue(SettingsKey.bed_temperature); - } - - protected override double GetActualTemperature() - { - return PrinterConnection.Instance.ActualBedTemperature; - } - - protected override double GetTargetTemperature() - { - return PrinterConnection.Instance.TargetBedTemperature; - } - - protected override void SetTargetTemperature(double targetTemp) - { - double goalTemp = (int)(targetTemp + .5); - if (PrinterConnection.Instance.PrinterIsPrinting - && PrinterConnection.Instance.PrintingState == DetailedPrintingState.HeatingBed - && goalTemp != PrinterConnection.Instance.TargetBedTemperature) - { - string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print."; - string message = string.Format("The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", PrinterConnection.Instance.TargetBedTemperature, sliceSettingsNote); - StyledMessageBox.ShowMessageBox(null, message, "Waiting For Bed To Heat"); - } - else - { - PrinterConnection.Instance.TargetBedTemperature = goalTemp; - string displayString = string.Format("{0:0.0}°C", PrinterConnection.Instance.TargetBedTemperature); - targetTemperatureDisplay.SetDisplayString(displayString); - } - } - } -} \ No newline at end of file diff --git a/SlicerConfiguration/SettingsControlSelectors.cs b/SlicerConfiguration/SettingsControlSelectors.cs index d69005710..04a43a1a4 100644 --- a/SlicerConfiguration/SettingsControlSelectors.cs +++ b/SlicerConfiguration/SettingsControlSelectors.cs @@ -28,20 +28,15 @@ either expressed or implied, of the FreeBSD Project. */ //#define DO_IN_PLACE_EDIT -using MatterHackers.Agg; -using MatterHackers.Agg.Image; -using MatterHackers.Agg.ImageProcessing; -using MatterHackers.Agg.PlatformAbstract; -using MatterHackers.Agg.UI; -using MatterHackers.ImageProcessing; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.MatterControl.DataStorage; -using MatterHackers.VectorMath; using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; +using MatterHackers.Agg; +using MatterHackers.Agg.PlatformAbstract; +using MatterHackers.Agg.UI; +using MatterHackers.Localizations; +using MatterHackers.MatterControl.CustomWidgets; +using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.SlicerConfiguration { @@ -108,7 +103,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration FlowLayoutWidget container = new FlowLayoutWidget() { HAnchor = HAnchor.ParentLeftRight, - Padding = new BorderDouble(12, 0) + Padding = new BorderDouble(12, 0), + Name = "Preset Pulldown Container" }; editButton = TextImageButtonFactory.GetThemedEditButton(); diff --git a/StaticData/Icons/bed.png b/StaticData/Icons/bed.png new file mode 100644 index 0000000000000000000000000000000000000000..73e229c52dbff4169cd027ad52495458cdeb0f96 GIT binary patch literal 1207 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y9?C1WI$jZRL z%n;xc;>y6laQ5ukyLaz0jDpb+7Y%D})N z6S AK>z>% literal 0 HcmV?d00001 diff --git a/StaticData/Icons/hotend.png b/StaticData/Icons/hotend.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7690da6365136c4d4a633a46abed297f81335b GIT binary patch literal 1214 zcmeAS@N?(olHy`uVBq!ia0y~yVBiB`4rT@h290TVA2Tp8u%tWsIx;Y9?C1WI$jZRL z%n;xc;>y6laQ5t3hEXsY0wXd6{{0u@W?*1sC<*cl{y(w-L-2QYRR#tI&H|6fVg?4j zLm-L1P>`6JSE84fTB2a0XP{?j=90PoD+2?AvZsq< zh(vhukN^Mem01`f|2xL07|cj{XtN?of`6I#q2K@I87y8+SbSyg?T4V$=IQF^vd$@? F2>|L`H;w=R literal 0 HcmV?d00001 diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 14e178745..3d0d8dd95 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 14e17874500a7b15a008c21228e5ee341bdbc30b +Subproject commit 3d0d8dd95263063982b25a954fffb7559ee60924