From 412c3d2a9ed77e478a4adc2d71d1eca870bfd799 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 18 Jan 2022 17:10:34 -0800 Subject: [PATCH] Reducing complexity of settings ui sync Adding bed menu to load filament --- .../ActionBar/TemperatureWidgetBed.cs | 30 +-- .../ActionBar/TemperatureWidgetExtruder.cs | 18 +- .../WizardPages/SelectMaterialPage.cs | 12 ++ .../View3D/PrinterBar/ExportSlaPopupMenu.cs | 5 +- .../View3D/PrinterBar/PrintPopupMenu.cs | 38 +--- .../SliceSettingsWidget.cs | 171 +++++++++--------- StaticData/Translations/Master.txt | 15 ++ 7 files changed, 118 insertions(+), 171 deletions(-) diff --git a/MatterControlLib/ActionBar/TemperatureWidgetBed.cs b/MatterControlLib/ActionBar/TemperatureWidgetBed.cs index ca5b6d981..a222fc509 100644 --- a/MatterControlLib/ActionBar/TemperatureWidgetBed.cs +++ b/MatterControlLib/ActionBar/TemperatureWidgetBed.cs @@ -37,17 +37,12 @@ using MatterHackers.ImageProcessing; using MatterHackers.Localizations; using MatterHackers.MatterControl.ConfigurationPage; using MatterHackers.MatterControl.CustomWidgets; -using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.MatterControl.SlicerConfiguration; namespace MatterHackers.MatterControl.ActionBar { - internal class TemperatureWidgetBed : TemperatureWidgetBase + internal class TemperatureWidgetBed : TemperatureWidgetBase { - 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(); - private Dictionary allUiFields = new Dictionary(); private RunningInterval runningInterval; public TemperatureWidgetBed(PrinterConfig printer, ThemeConfig theme) @@ -154,7 +149,7 @@ namespace MatterHackers.MatterControl.ActionBar bedSettingBeingEdited = printer.Settings.Helpers.ActiveBedTemperatureSetting; var settingsData = PrinterSettings.SettingsData[bedSettingBeingEdited]; - var bedTemperature = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields); + var bedTemperature = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex); var settingsRow = bedTemperature.DescendantsAndSelf().FirstOrDefault(); @@ -187,27 +182,6 @@ namespace MatterHackers.MatterControl.ActionBar graph.AddData(this.ActualTemperature); }, 1); - void Printer_SettingChanged(object s, StringEventArgs stringEvent) - { - if (stringEvent != null) - { - string settingsKey = stringEvent.Data; - if (this.allUiFields.TryGetValue(settingsKey, out UIField uifield)) - { - string currentValue = settingsContext.GetValue(settingsKey); - if (uifield.Value != currentValue) - { - uifield.SetValue( - currentValue, - userInitiated: false); - } - } - } - } - - printer.Settings.SettingChanged += Printer_SettingChanged; - printer.Disposed += (s, e) => printer.Settings.SettingChanged -= Printer_SettingChanged; - container.AddChild(graph); return widget; diff --git a/MatterControlLib/ActionBar/TemperatureWidgetExtruder.cs b/MatterControlLib/ActionBar/TemperatureWidgetExtruder.cs index 31541b36c..c03e646a1 100644 --- a/MatterControlLib/ActionBar/TemperatureWidgetExtruder.cs +++ b/MatterControlLib/ActionBar/TemperatureWidgetExtruder.cs @@ -183,7 +183,6 @@ namespace MatterHackers.MatterControl.ActionBar 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(); - private Dictionary allUiFields = new Dictionary(); private RunningInterval runningInterval; private ThemeConfig theme; @@ -271,7 +270,7 @@ namespace MatterHackers.MatterControl.ActionBar // TODO: Add guards around computed settings key to handle invalid/missing keys var settingsData = PrinterSettings.SettingsData[TemperatureKey]; - var temperatureRow = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields); + var temperatureRow = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex); container.AddChild(temperatureRow); // Add the temperature row to the always enabled list ensuring the field can be set when disconnected @@ -285,8 +284,7 @@ namespace MatterHackers.MatterControl.ActionBar settingsContext, printer, menuTheme, - ref tabIndex, - allUiFields); + ref tabIndex); container.AddChild(extruderMultiplier); alwaysEnabled.Add(extruderMultiplier); } @@ -326,18 +324,6 @@ namespace MatterHackers.MatterControl.ActionBar { if (stringEvent != null) { - string settingsKey = stringEvent.Data; - if (this.allUiFields.TryGetValue(settingsKey, out UIField uifield)) - { - string currentValue = settingsContext.GetValue(settingsKey); - if (uifield.Value != currentValue) - { - uifield.SetValue( - currentValue, - userInitiated: false); - } - } - if (stringEvent.Data == this.TemperatureKey) { graph.GoalValue = printer.Settings.Helpers.ExtruderTargetTemperature(hotendIndex); diff --git a/MatterControlLib/ConfigurationPage/PrintLeveling/WizardPages/SelectMaterialPage.cs b/MatterControlLib/ConfigurationPage/PrintLeveling/WizardPages/SelectMaterialPage.cs index ff7ce15de..ad12f3468 100644 --- a/MatterControlLib/ConfigurationPage/PrintLeveling/WizardPages/SelectMaterialPage.cs +++ b/MatterControlLib/ConfigurationPage/PrintLeveling/WizardPages/SelectMaterialPage.cs @@ -29,8 +29,10 @@ either expressed or implied, of the FreeBSD Project. using MatterHackers.Agg; using MatterHackers.Localizations; +using MatterHackers.MatterControl.ActionBar; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.SlicerConfiguration; +using System.Collections.Generic; namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { @@ -46,6 +48,16 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling Margin = new BorderDouble(0, 0, 0, 15) }); + if (showLoadFilamentButton) + { + int tabIndex = 0; + var bedSurfaceChanger = TemperatureWidgetBed.CreateBedSurfaceSelector(printer, theme, ref tabIndex); + if (bedSurfaceChanger != null) + { + contentRow.AddChild(bedSurfaceChanger); + } + } + NextButton.Text = nextButtonText; if (showLoadFilamentButton) diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/ExportSlaPopupMenu.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/ExportSlaPopupMenu.cs index f101b4d12..c19d3c4e2 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/ExportSlaPopupMenu.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/ExportSlaPopupMenu.cs @@ -46,7 +46,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public class ExportSlaPopupMenu : PopupMenuButton { private PrinterConfig printer; - private Dictionary allUiFields = new Dictionary(); private SettingsContext settingsContext; public ExportSlaPopupMenu(PrinterConfig printer, ThemeConfig theme) @@ -73,8 +72,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow int tabIndex = 0; - allUiFields.Clear(); - var exportPanel = new FlowLayoutWidget(FlowDirection.TopToBottom) { Padding = theme.DefaultContainerPadding, @@ -106,7 +103,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow foreach (var key in settingsToAdd) { var settingsData = PrinterSettings.SettingsData[key]; - var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields); + var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex); if (row is SliceSettingsRow settingsRow) { diff --git a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs index 018d5303a..440b03cc5 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/PrinterBar/PrintPopupMenu.cs @@ -49,7 +49,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public class PrintPopupMenu : PopupMenuButton { private PrinterConfig printer; - private Dictionary allUiFields = new Dictionary(); private SettingsContext settingsContext; public PrintPopupMenu(PrinterConfig printer, ThemeConfig theme) @@ -76,8 +75,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow int tabIndex = 0; - allUiFields.Clear(); - var printPanel = new FlowLayoutWidget(FlowDirection.TopToBottom) { Padding = theme.DefaultContainerPadding, @@ -110,7 +107,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow foreach (var key in settingsToAdd) { var settingsData = PrinterSettings.SettingsData[key]; - var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex, allUiFields); + var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, menuTheme, ref tabIndex); if (row is SliceSettingsRow settingsRow) { @@ -145,8 +142,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow settingsContext, printer, menuTheme, - ref tabIndex, - allUiFields); + ref tabIndex); if (advancedRow is SliceSettingsRow settingsRow) { @@ -310,9 +306,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow Selectable = false, Padding = theme.TextButtonPadding.Clone(right: 5) }); - - // Register listeners - printer.Settings.SettingChanged += Printer_SettingChanged; } public static GuiWidget CreateStartPrintButton(string buttonText, @@ -355,33 +348,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow return startPrintButton; } - public override void OnClosed(EventArgs e) - { - // Unregister listeners - printer.Settings.SettingChanged -= Printer_SettingChanged; - - base.OnClosed(e); - } - - private void Printer_SettingChanged(object s, StringEventArgs stringEvent) - { - if (stringEvent != null) - { - string settingsKey = stringEvent.Data; - if (allUiFields.TryGetValue(settingsKey, out UIField uifield)) - { - string currentValue = settingsContext.GetValue(settingsKey); - if (uifield.Value != currentValue - || settingsKey == "com_port") - { - uifield.SetValue( - currentValue, - userInitiated: false); - } - } - } - } - private class IgnoredFlowLayout : FlowLayoutWidget, IIgnoredPopupChild { public IgnoredFlowLayout() diff --git a/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs b/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs index e21937f32..8612dcb55 100644 --- a/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs +++ b/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs @@ -121,7 +121,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private static readonly Regex NameSanitizer = new Regex("[^a-zA-Z0-9-]", RegexOptions.Compiled); private int tabIndexForItem = 0; - private readonly Dictionary allUiFields = new Dictionary(); private readonly ThemeConfig theme; private readonly PrinterConfig printer; private readonly SettingsContext settingsContext; @@ -234,8 +233,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration this.settingsRows = new List<(GuiWidget, SliceSettingData)>(); - allUiFields = new Dictionary(); - var errors = printer.ValidateSettings(settingsContext); // Loop over categories creating a tab for each @@ -367,9 +364,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration UserSettings.Instance.set(databaseMRUKey, this.SelectedTabKey); } }; - - // Register listeners - printer.Settings.SettingChanged += Printer_SettingChanged; } this.PerformLayout(); @@ -448,8 +442,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration externalExtendMenu?.Invoke(popupMenu); } - public Dictionary UIFields => allUiFields; - public SectionWidget CreateGroupSection(SettingsLayout.Group group, List errors) { var groupPanel = new FlowLayoutWidget(FlowDirection.TopToBottom) @@ -613,10 +605,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration internal GuiWidget CreateItemRow(SliceSettingData settingData, List errors) { - return CreateItemRow(settingData, settingsContext, printer, theme, ref tabIndexForItem, allUiFields, errors); + return CreateItemRow(settingData, settingsContext, printer, theme, ref tabIndexForItem, errors); } - public static GuiWidget CreateItemRow(SliceSettingData settingData, SettingsContext settingsContext, PrinterConfig printer, ThemeConfig theme, ref int tabIndexForItem, Dictionary fieldCache = null, List errors = null) + public static GuiWidget CreateItemRow(SliceSettingData settingData, SettingsContext settingsContext, PrinterConfig printer, ThemeConfig theme, ref int tabIndexForItem, List errors = null) { string sliceSettingValue = settingsContext.GetValue(settingData.SlicerConfigName); @@ -819,61 +811,58 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } if (uiField != null) - { - if (fieldCache != null) - { - fieldCache[settingData.SlicerConfigName] = uiField; - } + { + uiField.HelpText = settingData.HelpText; - uiField.HelpText = settingData.HelpText; + uiField.Name = $"{settingData.PresentationName} Field"; + uiField.Initialize(tabIndexForItem++); - uiField.Name = $"{settingData.PresentationName} Field"; - uiField.Initialize(tabIndexForItem++); + if (settingData.DataEditType == SliceSettingData.DataEditTypes.WIDE_STRING) + { + uiField.Content.HAnchor = HAnchor.Stretch; + placeFieldInDedicatedRow = true; + } - if (settingData.DataEditType == SliceSettingData.DataEditTypes.WIDE_STRING) - { - uiField.Content.HAnchor = HAnchor.Stretch; - placeFieldInDedicatedRow = true; - } + uiField.SetValue(sliceSettingValue, userInitiated: false); - uiField.SetValue(sliceSettingValue, userInitiated: false); + // Disable ToolTipText on UIFields in favor of popovers + uiField.Content.ToolTipText = ""; - // Disable ToolTipText on UIFields in favor of popovers - uiField.Content.ToolTipText = ""; + RegisterSettingChangeEvent(printer, uiField, settingData.SlicerConfigName, settingsContext); - // make sure the undo data goes back to the initial value after a change - uiField.ClearUndoHistory(); + // make sure the undo data goes back to the initial value after a change + uiField.ClearUndoHistory(); - uiField.ValueChanged += (s, e) => - { - if (useDefaultSavePattern - && e.UserInitiated) - { - settingsContext.SetValue(settingData.SlicerConfigName, uiField.Value); - } + uiField.ValueChanged += (s, e) => + { + if (useDefaultSavePattern + && e.UserInitiated) + { + settingsContext.SetValue(settingData.SlicerConfigName, uiField.Value); + } - settingsRow.UpdateStyle(); - }; + settingsRow.UpdateStyle(); + }; - // After initializing the field, wrap with dropmenu if applicable - if (settingData.QuickMenuSettings.Count > 0) - { - var dropMenu = new DropMenuWrappedField(uiField, settingData, theme.TextColor, theme, printer); - dropMenu.Initialize(tabIndexForItem); + // After initializing the field, wrap with dropmenu if applicable + if (settingData.QuickMenuSettings.Count > 0) + { + var dropMenu = new DropMenuWrappedField(uiField, settingData, theme.TextColor, theme, printer); + dropMenu.Initialize(tabIndexForItem); - settingsRow.AddContent(dropMenu.Content); - } - else - { - if (!placeFieldInDedicatedRow) - { - settingsRow.AddContent(uiField.Content); - settingsRow.ActionWidget = uiField.Content; - } - } - } + settingsRow.AddContent(dropMenu.Content); + } + else + { + if (!placeFieldInDedicatedRow) + { + settingsRow.AddContent(uiField.Content); + settingsRow.ActionWidget = uiField.Content; + } + } + } - settingsRow.UIField = uiField; + settingsRow.UIField = uiField; uiField.Row = settingsRow; if (errors?.Any() == true) @@ -937,7 +926,47 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - public void FilterToOverrides(IEnumerable layers) + private static void RegisterSettingChangeEvent(PrinterConfig printer, UIField uiField, string boundSettingsKey, SettingsContext settingsContext) + { + void Printer_SettingChanged(object s, StringEventArgs stringEvent) + { + var localUiField = uiField; + var errors2 = printer.ValidateSettings(settingsContext); + + if (stringEvent != null) + { + string settingsKey = stringEvent.Data; + if (settingsKey == boundSettingsKey) + { + string currentValue = settingsContext.GetValue(settingsKey); + if (localUiField.Value != currentValue + || settingsKey == "com_port") + { + localUiField.SetValue( + currentValue, + userInitiated: false); + } + + // Some fields are hosted outside of SettingsRows (e.g. Section Headers like Brim) and should skip validation updates + localUiField.Row?.UpdateValidationState(errors2); + } + } + } + + // Register listeners + printer.Settings.SettingChanged += Printer_SettingChanged; + + uiField.Content.Closed += (s, e) => + { + // Unregister listeners + printer.Settings.SettingChanged -= Printer_SettingChanged; + }; + + // remove listener if print disposed + printer.Disposed += (s, e) => printer.Settings.SettingChanged -= Printer_SettingChanged; + } + + public void FilterToOverrides(IEnumerable layers) { foreach (var item in this.settingsRows) { @@ -955,30 +984,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private readonly List widgetsThatWereExpanded = new List(); private SystemWindow systemWindow; - private void Printer_SettingChanged(object s, StringEventArgs stringEvent) - { - var errors = printer.ValidateSettings(settingsContext); - - if (stringEvent != null) - { - string settingsKey = stringEvent.Data; - if (this.allUiFields.TryGetValue(settingsKey, out UIField uifield)) - { - string currentValue = settingsContext.GetValue(settingsKey); - if (uifield.Value != currentValue - || settingsKey == "com_port") - { - uifield.SetValue( - currentValue, - userInitiated: false); - } - - // Some fields are hosted outside of SettingsRows (e.g. Section Headers like Brim) and should skip validation updates - uifield.Row?.UpdateValidationState(errors); - } - } - } - private void ShowFilteredView() { widgetsThatWereExpanded.Clear(); @@ -1005,14 +1010,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration this.Focus(); } - public override void OnClosed(EventArgs e) - { - // Unregister listeners - printer.Settings.SettingChanged -= Printer_SettingChanged; - - base.OnClosed(e); - } - public void ClearFilter() { foreach (var item in this.settingsRows) diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index b7a41c786..2fec7256c 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -22,6 +22,9 @@ Translated:$/kg English:% Translated:% +English:{0} (Update Available) +Translated:{0} (Update Available) + English:{0} should be greater than 0. Translated:{0} should be greater than 0. @@ -520,6 +523,9 @@ Translated:Clear Cache English:Clear Height Translated:Clear Height +English:Clear Material Setting +Translated:Clear Material Setting + English:Clear Override Translated:Clear Override @@ -2365,6 +2371,9 @@ Translated:Please select the material you want to load into extruder {0}. English:Please select the material you want to load. Translated:Please select the material you want to load. +English:Please select the material you want to unload. +Translated:Please select the material you want to unload. + English:Please sign in to continue. Translated:Please sign in to continue. @@ -3988,9 +3997,15 @@ Translated:Unload English:Unload filament Translated:Unload filament +English:Unload Filament +Translated:Unload Filament + English:Unload Filament Length Translated:Unload Filament Length +English:Unload Material +Translated:Unload Material + English:Unpin Translated:Unpin