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/ApplicationView/ApplicationController.cs b/MatterControlLib/ApplicationView/ApplicationController.cs index f3effc385..62d17bde9 100644 --- a/MatterControlLib/ApplicationView/ApplicationController.cs +++ b/MatterControlLib/ApplicationView/ApplicationController.cs @@ -387,6 +387,8 @@ namespace MatterHackers.MatterControl public event EventHandler WorkspacesChanged; + public event EventHandler ReloadSettingsTriggered; + public void ReloadSettings(PrinterConfig printer) { var printerTabPage = this.MainView.Descendants().Where(page => page.Printer == printer).FirstOrDefault(); @@ -415,6 +417,8 @@ namespace MatterHackers.MatterControl sideBar.ReplacePage("Slice Settings", new SliceSettingsWidget(printer, settingsContext, Theme)); ApplicationController.Instance.IsReloading = false; } + + ReloadSettingsTriggered?.Invoke(null, null); } public static Action WebRequestFailed; diff --git a/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs b/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs index 267c83fab..e0a14c4bb 100644 --- a/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs +++ b/MatterControlLib/DesignTools/Operations/PartSettingsObject3D.cs @@ -92,8 +92,79 @@ namespace MatterHackers.MatterControl.DesignTools.Operations public string ThumbnailName => nameof(PartSettingsObject3D); + private void UpdateSettingsDisplay(PrinterConfig containingPrinter) + { + if (containingPrinter != null) + { + this.Invalidate(InvalidateType.DisplayValues); + ApplicationController.Instance.ReloadSettings(containingPrinter); + // refresh the properties pannel by unselecting and selecting + containingPrinter.Bed.Scene.SelectedItem = null; + containingPrinter.Bed.Scene.SelectedItem = this; + } + } + + public static HashSet settingsToIgnore = new HashSet() + { + SettingsKey.spiral_vase, + SettingsKey.layer_to_pause, + SettingsKey.perimeter_acceleration, + SettingsKey.default_acceleration, + SettingsKey.t1_extrusion_move_speed_multiplier, + SettingsKey.bed_surface, + SettingsKey.brim_extruder, + SettingsKey.support_material_extruder, + SettingsKey.support_material_interface_extruder, + SettingsKey.material_color, + SettingsKey.material_color_1, + SettingsKey.material_color_2, + SettingsKey.material_color_3, + SettingsKey.filament_diameter, + SettingsKey.filament_density, + SettingsKey.filament_cost, + SettingsKey.temperature, + SettingsKey.temperature1, + SettingsKey.temperature2, + SettingsKey.temperature3, + SettingsKey.bed_temperature, + SettingsKey.bed_temperature_blue_tape, + SettingsKey.bed_temperature_buildtak, + SettingsKey.bed_temperature_garolite, + SettingsKey.bed_temperature_glass, + SettingsKey.bed_temperature_kapton, + SettingsKey.bed_temperature_pei, + SettingsKey.bed_temperature_pp, + SettingsKey.inactive_cool_down, + SettingsKey.seconds_to_reheat, + }; + public IEnumerable GetEditorButtonsData() { + var containingPrinter = this.ContainingPrinter(); + if (containingPrinter != null) + { + yield return new EditorButtonData() + { + Action = () => + { + var settingsContext = new SettingsContext(containingPrinter, null, NamedSettingsLayers.All); + foreach (var setting in containingPrinter.Settings.UserLayer) + { + var data = SliceSettingsRow.GetStyleData(containingPrinter, ApplicationController.Instance.Theme, settingsContext, setting.Key, true); + + if (!settingsToIgnore.Contains(setting.Key) && data.showRestoreButton) + { + Overrides[setting.Key] = setting.Value; + } + } + UpdateSettingsDisplay(containingPrinter); + }, + Name = "Add User Overrides".Localize(), + HelpText = "Copy in all current user overides".Localize() + }; + } + + if (ApplicationController.Instance.UserHasPermission(this)) { yield return new EditorButtonData() @@ -101,7 +172,14 @@ namespace MatterHackers.MatterControl.DesignTools.Operations Action = () => { var settings = new PrinterSettings(); + 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; @@ -114,15 +192,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations editMaterialPresetsPage.Closed += (s, e2) => { ApplicationController.Instance.AcitveSlicePresetsPage = null; - var containingPrinter = this.ContainingPrinter(); - if (containingPrinter != null) - { - this.Invalidate(InvalidateType.DisplayValues); - ApplicationController.Instance.ReloadSettings(containingPrinter); - // refresh the properties pannel by unselecting and selecting - containingPrinter.Bed.Scene.SelectedItem = null; - containingPrinter.Bed.Scene.SelectedItem = this; - } + UpdateSettingsDisplay(containingPrinter); }; ApplicationController.Instance.AcitveSlicePresetsPage = editMaterialPresetsPage; 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/SlicePresetsWindow/SlicePresetsPage.cs b/MatterControlLib/SlicerConfiguration/SlicePresetsWindow/SlicePresetsPage.cs index 3ed0ee090..3065faadc 100644 --- a/MatterControlLib/SlicerConfiguration/SlicePresetsWindow/SlicePresetsPage.cs +++ b/MatterControlLib/SlicerConfiguration/SlicePresetsWindow/SlicePresetsPage.cs @@ -68,6 +68,19 @@ namespace MatterHackers.MatterControl.SlicerConfiguration var sliceSettingsWidget = CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer); contentRow.AddChild(sliceSettingsWidget); + void ReloadSettings(object s, EventArgs e) + { + var newSliceSettingsWidget = CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer); + contentRow.ReplaceChild(sliceSettingsWidget, newSliceSettingsWidget); + contentRow.Width += 1; + contentRow.Width -= 1; + sliceSettingsWidget = newSliceSettingsWidget; + } + + ApplicationController.Instance.ReloadSettingsTriggered += ReloadSettings; + + this.Closed += (s, e) => ApplicationController.Instance.ReloadSettingsTriggered -= ReloadSettings; + GuiWidget duplicateButton = null; if (presetsContext.SetAsActive != null) 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; } } diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 51920b676..ee244daed 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -247,6 +247,9 @@ Translated:Add to Queue English:Add to Selection Translated:Add to Selection +English:Add User Overrides +Translated:Add User Overrides + English:Additional Printing Errors Translated:Additional Printing Errors @@ -1042,6 +1045,9 @@ Translated:Copy everything but hardware specific calibration settings English:Copy extrusions data Translated:Copy extrusions data +English:Copy in all current user overides +Translated:Copy in all current user overides + English:Copy Mesh Translated:Copy Mesh diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index 7ea2bbbf3..303fb1cf3 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit 7ea2bbbf3634ab37698640cc184ac2d2755cffbe +Subproject commit 303fb1cf3baada642aaa46eb4d2e9fd546045bf7