diff --git a/ActionBar/TemperatureWidgetBed.cs b/ActionBar/TemperatureWidgetBed.cs index e0949db82..63bde8edf 100644 --- a/ActionBar/TemperatureWidgetBed.cs +++ b/ActionBar/TemperatureWidgetBed.cs @@ -43,7 +43,6 @@ namespace MatterHackers.MatterControl.ActionBar { internal class TemperatureWidgetBed : TemperatureWidgetBase { - private EditableNumberDisplay settingsTemperature; 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(); @@ -62,12 +61,6 @@ namespace MatterHackers.MatterControl.ActionBar protected override int ActualTemperature => (int)printer.Connection.ActualBedTemperature; protected override int TargetTemperature => (int)printer.Connection.TargetBedTemperature; - public override void OnClosed(ClosedEventArgs e) - { - ActiveSliceSettings.MaterialPresetChanged -= ActiveSliceSettings_MaterialPresetChanged; - base.OnClosed(e); - } - protected override GuiWidget GetPopupContent() { var widget = new IgnoredPopupWidget() @@ -101,7 +94,7 @@ namespace MatterHackers.MatterControl.ActionBar if (itemChecked) { - SetTargetTemperature(settingsTemperature.Value); + SetTargetTemperature(goalTemp); } else { @@ -111,28 +104,15 @@ namespace MatterHackers.MatterControl.ActionBar }, enforceGutter: false)); - heatToggle = hotendRow.ChildrenRecursive().FirstOrDefault(); + heatToggle = hotendRow.Decendants().FirstOrDefault(); heatToggle.Name = "Toggle Heater"; - // put in the temp control - settingsTemperature = new EditableNumberDisplay(printer.Settings.GetValue(SettingsKey.bed_temperature), "000") - { - TextColor = Color.Black, - BorderColor = Color.Black, - Name = "Temperature Input" - }; - settingsTemperature.ValueChanged += (s, e) => - { - if (heatToggle.Checked) - { - SetTargetTemperature(settingsTemperature.Value); - } - }; + int tabIndex = 0; + var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All); - container.AddChild(new SettingsItem( - "Temperature".Localize(), - settingsTemperature, - enforceGutter: false)); + var settingsData = SliceSettingsOrganizer.Instance.GetSettingsData(SettingsKey.bed_temperature); + var row = SliceSettingsWidget.CreateItemRow(settingsData, settingsContext, printer, Color.Black, ref tabIndex); + container.AddChild(row); // add in the temp graph Action fillGraph = null; @@ -142,16 +122,13 @@ namespace MatterHackers.MatterControl.ActionBar MinValue = 0, ShowGoal = true, GoalColor = ActiveTheme.Instance.PrimaryAccentColor, - GoalValue = settingsTemperature.Value, + GoalValue = printer.Settings.GetValue(SettingsKey.bed_temperature), MaxValue = 150, // could come from some profile value in the future Width = widget.Width - 20, Height = 35, // this works better if it is a common multiple of the Width Margin = new BorderDouble(0, 5, 0, 0), }; - settingsTemperature.ValueChanged += (s, e) => - { - graph.GoalValue = settingsTemperature.Value; - }; + fillGraph = () => { graph.AddData(this.ActualTemperature); @@ -161,11 +138,28 @@ namespace MatterHackers.MatterControl.ActionBar } }; + var valueField = row.Decendants().FirstOrDefault(); + var settingsRow = row.Decendants().FirstOrDefault(); + ActiveSliceSettings.SettingChanged.RegisterEvent((s, e) => + { + if (e is StringEventArgs stringEvent) + { + var temp = printer.Settings.GetValue(SettingsKey.bed_temperature); + valueField.Value = temp; + graph.GoalValue = temp; + settingsRow.UpdateStyle(); + if (stringEvent.Data == SettingsKey.bed_temperature + && heatToggle.Checked) + { + SetTargetTemperature(temp); + } + }; + }, ref unregisterEvents); + + UiThread.RunOnIdle(fillGraph); container.AddChild(graph); - ActiveSliceSettings.MaterialPresetChanged += ActiveSliceSettings_MaterialPresetChanged; - return widget; } @@ -194,13 +188,5 @@ namespace MatterHackers.MatterControl.ActionBar printer.Connection.TargetBedTemperature = (int)(targetTemp + .5); } } - - private void ActiveSliceSettings_MaterialPresetChanged(object sender, EventArgs e) - { - if (settingsTemperature != null && printer.Settings != null) - { - settingsTemperature.Text = printer.Settings.GetValue(SettingsKey.bed_temperature); - } - } } } \ No newline at end of file diff --git a/ActionBar/TemperatureWidgetExtruder.cs b/ActionBar/TemperatureWidgetExtruder.cs index 6c1f9b575..886b5da97 100644 --- a/ActionBar/TemperatureWidgetExtruder.cs +++ b/ActionBar/TemperatureWidgetExtruder.cs @@ -172,7 +172,6 @@ namespace MatterHackers.MatterControl.ActionBar private TextImageButtonFactory buttonFactory; private int hotendIndex = -1; - private EditableNumberDisplay settingsTemperature; 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(); @@ -191,12 +190,6 @@ namespace MatterHackers.MatterControl.ActionBar protected override int ActualTemperature => (int)printer.Connection.GetActualHotendTemperature(hotendIndex); protected override int TargetTemperature => (int)printer.Connection.GetTargetHotendTemperature(hotendIndex); - public override void OnClosed(ClosedEventArgs e) - { - ActiveSliceSettings.MaterialPresetChanged -= ActiveSliceSettings_MaterialPresetChanged; - base.OnClosed(e); - } - protected override GuiWidget GetPopupContent() { var widget = new IgnoredPopupWidget() @@ -227,7 +220,7 @@ namespace MatterHackers.MatterControl.ActionBar if (itemChecked) { // Set to goal temp - SetTargetTemperature(settingsTemperature.Value); + SetTargetTemperature(printer.Settings.Helpers.ExtruderTemperature(hotendIndex)); } else { @@ -238,26 +231,16 @@ namespace MatterHackers.MatterControl.ActionBar }, enforceGutter: false)); - heatToggle = hotendRow.ChildrenRecursive().FirstOrDefault(); + heatToggle = hotendRow.Decendants().FirstOrDefault(); heatToggle.Name = "Toggle Heater"; - // put in the temp control - settingsTemperature = new EditableNumberDisplay(printer.Settings.GetValue(SettingsKey.temperature), "000") - { - TextColor = Color.Black, - BorderColor = Color.Black, - Name = "Temperature Input" - }; - settingsTemperature.ValueChanged += (s, e) => - { - if (heatToggle.Checked) - { - SetTargetTemperature(settingsTemperature.Value); - } - }; - container.AddChild(new SettingsItem( - "Temperature".Localize(), - settingsTemperature, enforceGutter: false)); + int tabIndex = 0; + var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All); + // TODO: make this be for the correct extruder + var settingsData = SliceSettingsOrganizer.Instance.GetSettingsData(SettingsKey.temperature); + var row = SliceSettingsWidget.CreateItemRow(settingsData, settingsContext, printer, Color.Black, ref tabIndex); + + container.AddChild(row); // add in the temp graph Action fillGraph = null; @@ -267,15 +250,11 @@ namespace MatterHackers.MatterControl.ActionBar MinValue = 0, ShowGoal = true, GoalColor = ActiveTheme.Instance.PrimaryAccentColor, - GoalValue = settingsTemperature.Value, + GoalValue = printer.Settings.Helpers.ExtruderTemperature(hotendIndex), MaxValue = 280, // could come from some profile value in the future Width = widget.Width - 20, Height = 35, // this works better if it is a common multiple of the Width }; - settingsTemperature.ValueChanged += (s, e) => - { - graph.GoalValue = settingsTemperature.Value; - }; fillGraph = () => { graph.AddData(this.ActualTemperature); @@ -285,6 +264,25 @@ namespace MatterHackers.MatterControl.ActionBar } }; + var valueField = row.Decendants().FirstOrDefault(); + valueField.Name = "Temperature Input"; + var settingsRow = row.Decendants().FirstOrDefault(); + ActiveSliceSettings.SettingChanged.RegisterEvent((s, e) => + { + if (e is StringEventArgs stringEvent) + { + var temp = printer.Settings.Helpers.ExtruderTemperature(hotendIndex); + valueField.Value = temp; + graph.GoalValue = temp; + settingsRow.UpdateStyle(); + if (stringEvent.Data == SettingsKey.temperature + && heatToggle.Checked) + { + SetTargetTemperature(temp); + } + }; + }, ref unregisterEvents); + UiThread.RunOnIdle(fillGraph); container.AddChild(graph); @@ -299,15 +297,6 @@ namespace MatterHackers.MatterControl.ActionBar presetsSelector.DropDownList.Name = "Hotend Preset Selector"; - presetsSelector.DropDownList.SelectionChanged += (s, e) => - { - // delay this for an update so the slice setting can get updated first - UiThread.RunOnIdle(() => - { - settingsTemperature.Value = printer.Settings.GetValue(SettingsKey.temperature); - }); - }; - this.Width = 150; // HACK: remove undesired item @@ -354,8 +343,6 @@ namespace MatterHackers.MatterControl.ActionBar container.AddChild(new ControlContentExtruder(printer, hotendIndex, buttonFactory)); } - ActiveSliceSettings.MaterialPresetChanged += ActiveSliceSettings_MaterialPresetChanged; - return widget; } @@ -384,13 +371,5 @@ namespace MatterHackers.MatterControl.ActionBar printer.Connection.SetTargetHotendTemperature(hotendIndex, (int)(targetTemp + .5)); } } - - private void ActiveSliceSettings_MaterialPresetChanged(object sender, EventArgs e) - { - if (settingsTemperature != null && printer.Settings != null) - { - settingsTemperature.Text = printer.Settings.GetValue(SettingsKey.temperature); - } - } } } \ No newline at end of file diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index bad43f38e..6151fbf50 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit bad43f38ef713d6b5b953cc674bfd600edfe5082 +Subproject commit 6151fbf50c3e657dc1e6c5059f8a9c12c1745d03 diff --git a/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs b/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs index 485829768..02df0540b 100644 --- a/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs +++ b/Tests/MatterControl.AutomationTests/SliceSettingsTests.cs @@ -174,7 +174,7 @@ namespace MatterHackers.MatterControl.Tests.Automation testRunner.ClickByName("Hotend 0"); // assert the temp is set when we first open (it comes from the material) - EditableNumberDisplay tempWidget = testRunner.GetWidgetByName("Temperature Input", out _) as EditableNumberDisplay; + MHNumberEdit tempWidget = testRunner.GetWidgetByName("Temperature Input", out _) as MHNumberEdit; Assert.AreEqual(240, (int)tempWidget.Value); // change material @@ -237,6 +237,7 @@ namespace MatterHackers.MatterControl.Tests.Automation // type in 0 and have the heater turn off testRunner.ClickByName("Temperature Input"); + testRunner.Type("^a"); testRunner.Type("0"); testRunner.Type("{Enter}"); testRunner.Delay();