From 8d3a6cd3cbabec329308704f8c523a81495ab003 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 19 Apr 2022 09:50:45 -0700 Subject: [PATCH] Improving part settings updating Improving settings display (sharing code) --- .../Settings/PrinterSettings.cs | 40 +++-- .../Operations/PartSettingsObject3D.cs | 7 +- .../DesignTools/PublicPropertyEditor.cs | 83 +--------- .../Library/Widgets/AddMaterialWidget.cs | 154 ++++++++++-------- .../SlicerConfiguration/SliceSettingsRow.cs | 6 +- 5 files changed, 121 insertions(+), 169 deletions(-) diff --git a/MatterControl.Printing/Settings/PrinterSettings.cs b/MatterControl.Printing/Settings/PrinterSettings.cs index 39b74735c..4139265e4 100644 --- a/MatterControl.Printing/Settings/PrinterSettings.cs +++ b/MatterControl.Printing/Settings/PrinterSettings.cs @@ -243,10 +243,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration static PrinterSettings() { - // Convert settings array into dictionary on initial load using settings key (SlicerConfigName) - PrinterSettings.SettingsData = SliceSettingsFields.AllSettings().ToDictionary(s => s.SlicerConfigName); + // Convert settings array into dictionary on initial load using settings key (SlicerConfigName) + SettingsData = SliceSettingsFields.AllSettings().ToDictionary(s => s.SlicerConfigName); - PrinterSettings.Layout = new SettingsLayout(); + Layout = new SettingsLayout(); Empty = new PrinterSettings() { ID = "EmptyProfile" }; Empty.UserLayer[SettingsKey.printer_name] = "Empty Printer"; @@ -339,7 +339,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { var settingsLayer = new PrinterSettingsLayer(); - foreach (var settingsData in PrinterSettings.SettingsData.Values) + foreach (var settingsData in SettingsData.Values) { settingsLayer[settingsData.SlicerConfigName] = settingsData.DefaultValue; } @@ -591,8 +591,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return null; } - int documentVersion = jObject?.GetValue("DocumentVersion")?.Value() ?? PrinterSettings.LatestVersion; - if (documentVersion < PrinterSettings.LatestVersion) + int documentVersion = jObject?.GetValue("DocumentVersion")?.Value() ?? LatestVersion; + if (documentVersion < LatestVersion) { printerProfilePath = ProfileMigrations.MigrateDocument(printerProfilePath, documentVersion); } @@ -623,7 +623,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration keysToRetain.Remove(SettingsKey.print_leveling_enabled); // Iterate all items that have .ShowAsOverride = false and conditionally add to the retention list - foreach (var item in PrinterSettings.SettingsData.Values.Where(settingsItem => settingsItem.ShowAsOverride == false)) + foreach (var item in SettingsData.Values.Where(settingsItem => settingsItem.ShowAsOverride == false)) { switch (item.SlicerConfigName) { @@ -659,10 +659,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration // Restore user overrides if a non-user override is being cleared if (layer != null && layer != UserLayer) { - RestoreUserOverride(layer, settingsKey); + RestoreUserOverride(settingsKey); } - if (PrinterSettings.SettingsData.TryGetValue(settingsKey, out SliceSettingData settingData)) + if (SettingsData.TryGetValue(settingsKey, out SliceSettingData settingData)) { if (settingData.DataEditType == SliceSettingData.DataEditTypes.CHECK_BOX) { @@ -744,7 +744,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration foreach (var settingsKey in settingsLayer.Keys) { - StashUserOverride(settingsLayer, settingsKey); + StashUserOverride(settingsKey); } } @@ -872,6 +872,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { layerName = "Quality"; } + else if (layer == this.SceneLayer) + { + layerName = "Scene"; + } return (value, layerName); } @@ -883,7 +887,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public bool IsActive(string canonicalSettingsName) { return this.Slicer.Exports.ContainsKey(canonicalSettingsName) - || (this.Slicer.PrinterType == PrinterType.FFF && PrinterSettings.DefaultFFFSettings.Contains(canonicalSettingsName)); + || (this.Slicer.PrinterType == PrinterType.FFF && DefaultFFFSettings.Contains(canonicalSettingsName)); } public bool IsOverride(string sliceSetting, IEnumerable layers) @@ -984,7 +988,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration var sourceFilter = rawSourceFilter.Where(layer => layer != null); - foreach (var keyName in PrinterSettings.KnownSettings) + foreach (var keyName in KnownSettings) { if (settingsToImport.Contains(keyName)) { @@ -1098,7 +1102,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration foreach (var settingsKey in settingsLayer.Keys) { - RestoreUserOverride(settingsLayer, settingsKey); + RestoreUserOverride(settingsKey); } } @@ -1107,7 +1111,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration // Stash user overrides if a non-user override is being set if (layer != null && layer != UserLayer) { - StashUserOverride(layer, settingsKey); + StashUserOverride(settingsKey); } else { @@ -1164,7 +1168,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private static HashSet LoadSettingsNamesFromPropertiesJson() { - return new HashSet(PrinterSettings.SettingsData.Keys); + return new HashSet(SettingsData.Keys); } private PrinterSettingsLayer GetQualityLayer(string layerID) @@ -1200,7 +1204,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration }; } - private void RestoreUserOverride(PrinterSettingsLayer settingsLayer, string settingsKey) + private void RestoreUserOverride(string settingsKey) { if (StagedUserSettings.TryGetValue(settingsKey, out string stagedUserOverride)) { @@ -1212,7 +1216,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration /// /// Move conflicting user overrides to the temporary staging area, allowing presets values to take effect /// - private void StashUserOverride(PrinterSettingsLayer settingsLayer, string settingsKey) + private void StashUserOverride(string settingsKey) { if (this.UserLayer.TryGetValue(settingsKey, out string userOverride)) { @@ -1237,7 +1241,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration var bigStringForHashCode = new StringBuilder(); // Loop over all known settings - foreach (var keyValue in PrinterSettings.SettingsData) + foreach (var keyValue in SettingsData) { // Add key/value to accumulating string for hash if (keyValue.Value?.RebuildGCodeOnChange == true) diff --git a/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs b/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs index 4c2d22bd4..e0a14c4bb 100644 --- a/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs @@ -172,9 +172,14 @@ namespace MatterHackers.MatterControl.DesignTools.Operations Action = () => { var settings = new PrinterSettings(); - // set this after the PrinterConfig is constructed to change it to overrides settings.GetSceneLayer = () => Overrides; var printer = new PrinterConfig(settings); + if (containingPrinter != null) + { + printer = containingPrinter; + } + + // set this after the PrinterConfig is constructed to change it to overrides // set this after the PrinterConfig is constructed to change it to overrides settings.GetSceneLayer = () => Overrides; diff --git a/MatterControlLib/DesignTools/PublicPropertyEditor.cs b/MatterControlLib/DesignTools/PublicPropertyEditor.cs index 6643e156d..a06e218ce 100644 --- a/MatterControlLib/DesignTools/PublicPropertyEditor.cs +++ b/MatterControlLib/DesignTools/PublicPropertyEditor.cs @@ -47,6 +47,7 @@ using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.DataStorage; using MatterHackers.MatterControl.DesignTools.EditableTypes; using MatterHackers.MatterControl.DesignTools.Operations; +using MatterHackers.MatterControl.Library.Widgets; using MatterHackers.MatterControl.PartPreviewWindow; using MatterHackers.MatterControl.PartPreviewWindow.View3D; using MatterHackers.MatterControl.SlicerConfiguration; @@ -568,87 +569,15 @@ namespace MatterHackers.MatterControl.DesignTools } else if (propertyValue is PrinterSettingsLayer printerSettingsLayer) { - var settingsBackground = new GuiWidget() - { - Name = "Background", - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit, - Margin = 7, - }; + var printerProfile = new PrinterSettings(); + rowContainer = AddMaterialWidget.CreateSetingsList(printerProfile, printerSettingsLayer, theme); - var settingsHolder = settingsBackground.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom) - { - Name = "Holder", - HAnchor = HAnchor.Stretch, - }); - - settingsHolder.AddChild(new HorizontalLine(Color.Green) + rowContainer.Children.First().AddChild(new HorizontalLine(Color.Green) { Height = 4 * GuiWidget.DeviceScale - }); + }, 0); - var settingsCover = settingsBackground.AddChild(new GuiWidget() - { - Name = "Cover", - HAnchor = HAnchor.Stretch, - BackgroundColor = theme.BackgroundColor.WithAlpha(100), - }); - - settingsHolder.SizeChanged += (s5, e5) => - { - settingsCover.Height = settingsHolder.Height; - }; - - rowContainer = settingsBackground; - - var printerProfile = new PrinterSettings(); - printerProfile.OemLayer = new PrinterSettingsLayer(); - // move all the settings to the oem layer - var layout = new List<(int index, string category, string group, string key)>(); - foreach (var kvp in printerSettingsLayer) - { - printerProfile.OemLayer[kvp.Key] = kvp.Value; - layout.Add(SliceSettingsLayouts.GetLayout(kvp.Key)); - } - - var printer = new PrinterConfig(printerProfile); - var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All); - var tabIndex = 0; - var orderedSettings = layout.OrderBy(i => i.index).Select(i => (i.category, i.key)); - - var lastCategory = ""; - - foreach ((string category, string key) setting in orderedSettings) - { - if (setting.category == "") - { - continue; - } - - if (setting.category != lastCategory) - { - lastCategory = setting.category; - // add a new setting header - settingsHolder.AddChild(new TextWidget(setting.category.Localize() + " " + "Settings".Localize() + ":", 0, 0, bold: true) - { - TextColor = theme.TextColor, - Margin = new BorderDouble(0, 5, 0, 7) - }); - } - - var settingsData = PrinterSettings.SettingsData[setting.key]; - var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex); - - if (row is SliceSettingsRow settingsRow) - { - settingsRow.ArrowDirection = ArrowDirection.Left; - settingsRow.Enabled = true; - } - - settingsHolder.AddChild(row); - } - - settingsHolder.AddChild(new HorizontalLine(Color.Green) + rowContainer.Children.First().AddChild(new HorizontalLine(Color.Green) { Height = 4 * GuiWidget.DeviceScale }); diff --git a/MatterControlLib/Library/Widgets/AddMaterialWidget.cs b/MatterControlLib/Library/Widgets/AddMaterialWidget.cs index 33b78e692..6397f35ce 100644 --- a/MatterControlLib/Library/Widgets/AddMaterialWidget.cs +++ b/MatterControlLib/Library/Widgets/AddMaterialWidget.cs @@ -257,80 +257,13 @@ namespace MatterHackers.MatterControl.Library.Widgets }); } - var settingsBackground = new GuiWidget() - { - Name = "Background", - HAnchor = HAnchor.Stretch, - VAnchor = VAnchor.Fit - }; - - var settingsHolder = settingsBackground.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom) - { - Name = "Holder", - HAnchor = HAnchor.Stretch, - }); - - var settingsCover = settingsBackground.AddChild(new GuiWidget() - { - Name = "Cover", - HAnchor = HAnchor.Stretch, - }); - - settingsHolder.SizeChanged += (s5, e5) => - { - settingsCover.Height = settingsHolder.Height; - }; - - printerDetails.ProductDataContainer.AddChild(settingsBackground); - var printerProfile = PrinterSettings.LoadFile(SelectedMaterial.Path); - printerProfile.OemLayer = new PrinterSettingsLayer(); - // move all the settings to the oem layer - var layout = new List<(int index, string category, string group, string key)>(); - foreach (var kvp in printerProfile.MaterialLayers[0]) - { - printerProfile.OemLayer[kvp.Key] = kvp.Value; - layout.Add(SliceSettingsLayouts.GetLayout(kvp.Key)); - } + var printerSettingsLayer = printerProfile.MaterialLayers[0]; + printerProfile.MaterialLayers.RemoveAt(0); + printerProfile.MaterialLayers.Add(new PrinterSettingsLayer()); - printerProfile.MaterialLayers[0].Clear(); - - var printer = new PrinterConfig(printerProfile); - var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All); - var tabIndex = 0; - var orderedSettings = layout.OrderBy(i => i.index).Select(i => (i.category, i.key)); - - var lastCategory = ""; - - foreach ((string category, string key) setting in orderedSettings) - { - if (setting.category == "") - { - continue; - } - - if (setting.category != lastCategory) - { - lastCategory = setting.category; - // add a new setting header - settingsHolder.AddChild(new TextWidget(setting.category.Localize() + " " + "Settings".Localize() + ":", 0, 0, bold: true) - { - TextColor = theme.TextColor, - Margin = new BorderDouble(0, 5, 0, 7) - }); - } - - var settingsData = PrinterSettings.SettingsData[setting.key]; - var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex); - - if (row is SliceSettingsRow settingsRow) - { - settingsRow.ArrowDirection = ArrowDirection.Left; - settingsRow.Enabled = true; - } - - settingsHolder.AddChild(row); - } + var settingsBackground = CreateSetingsList(printerProfile, printerSettingsLayer, theme); + printerDetails.ProductDataContainer.AddChild(settingsBackground); }; nextButtonEnabled(treeView.SelectedNode != null); @@ -342,5 +275,82 @@ namespace MatterHackers.MatterControl.Library.Widgets nextButtonEnabled(false); } } + + public static GuiWidget CreateSetingsList(PrinterSettings printerProfile, PrinterSettingsLayer printerSettingsLayer, ThemeConfig theme) + { + var settingsBackground = new GuiWidget() + { + Name = "Background", + HAnchor = HAnchor.Stretch, + VAnchor = VAnchor.Fit, + Margin = 7, + }; + + var settingsHolder = settingsBackground.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom) + { + Name = "Holder", + HAnchor = HAnchor.Stretch, + }); + + var settingsCover = settingsBackground.AddChild(new GuiWidget() + { + Name = "Cover", + HAnchor = HAnchor.Stretch, + BackgroundColor = theme.BackgroundColor.WithAlpha(100), + }); + + settingsHolder.SizeChanged += (s5, e5) => + { + settingsCover.Height = settingsHolder.Height; + }; + + printerProfile.OemLayer = new PrinterSettingsLayer(); + // move all the settings to the oem layer + var layout = new List<(int index, string category, string group, string key)>(); + foreach (var kvp in printerSettingsLayer) + { + printerProfile.OemLayer[kvp.Key] = kvp.Value; + layout.Add(SliceSettingsLayouts.GetLayout(kvp.Key)); + } + + var printer = new PrinterConfig(printerProfile); + var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All); + var tabIndex = 0; + var orderedSettings = layout.OrderBy(i => i.index).Select(i => (i.category, i.key)); + + var lastCategory = ""; + + foreach ((string category, string key) setting in orderedSettings) + { + if (setting.category == "") + { + continue; + } + + if (setting.category != lastCategory) + { + lastCategory = setting.category; + // add a new setting header + settingsHolder.AddChild(new TextWidget(setting.category.Localize() + " " + "Settings".Localize() + ":", 0, 0, bold: true) + { + TextColor = theme.TextColor, + Margin = new BorderDouble(0, 5, 0, 7) + }); + } + + var settingsData = PrinterSettings.SettingsData[setting.key]; + var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex); + + if (row is SliceSettingsRow settingsRow) + { + settingsRow.ArrowDirection = ArrowDirection.Left; + settingsRow.Enabled = true; + } + + settingsHolder.AddChild(row); + } + + return settingsBackground; + } } } \ No newline at end of file diff --git a/MatterControlLib/SlicerConfiguration/SliceSettingsRow.cs b/MatterControlLib/SlicerConfiguration/SliceSettingsRow.cs index e1707618a..9f1d91028 100644 --- a/MatterControlLib/SlicerConfiguration/SliceSettingsRow.cs +++ b/MatterControlLib/SlicerConfiguration/SliceSettingsRow.cs @@ -511,6 +511,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { highlightColor = theme.PresetColors.QualityPreset; } + else if (layerName.StartsWith("Scene")) + { + highlightColor = theme.PresetColors.ScenePreset; + } else { highlightColor = Color.Transparent; @@ -542,7 +546,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration break; case NamedSettingsLayers.Scene: highlightColor = theme.PresetColors.ScenePreset; - showRestoreButton = true; + showRestoreButton = false; break; } }