Reducing complexity of settings ui sync

Adding bed menu to load filament
This commit is contained in:
Lars Brubaker 2022-01-18 17:10:34 -08:00
parent fa86c58a7c
commit 412c3d2a9e
7 changed files with 118 additions and 171 deletions

View file

@ -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<string, UIField> allUiFields = new Dictionary<string, UIField>();
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<SliceSettingsRow>().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;

View file

@ -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<string, UIField> allUiFields = new Dictionary<string, UIField>();
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);

View file

@ -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)

View file

@ -46,7 +46,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class ExportSlaPopupMenu : PopupMenuButton
{
private PrinterConfig printer;
private Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
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)
{

View file

@ -49,7 +49,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public class PrintPopupMenu : PopupMenuButton
{
private PrinterConfig printer;
private Dictionary<string, UIField> allUiFields = new Dictionary<string, UIField>();
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()

View file

@ -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<string, UIField> allUiFields = new Dictionary<string, UIField>();
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<string, UIField>();
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<string, UIField> UIFields => allUiFields;
public SectionWidget CreateGroupSection(SettingsLayout.Group group, List<ValidationError> errors)
{
var groupPanel = new FlowLayoutWidget(FlowDirection.TopToBottom)
@ -613,10 +605,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
internal GuiWidget CreateItemRow(SliceSettingData settingData, List<ValidationError> 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<string, UIField> fieldCache = null, List<ValidationError> errors = null)
public static GuiWidget CreateItemRow(SliceSettingData settingData, SettingsContext settingsContext, PrinterConfig printer, ThemeConfig theme, ref int tabIndexForItem, List<ValidationError> 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<PrinterSettingsLayer> 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<PrinterSettingsLayer> layers)
{
foreach (var item in this.settingsRows)
{
@ -955,30 +984,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
private readonly List<SectionWidget> widgetsThatWereExpanded = new List<SectionWidget>();
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)

View file

@ -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