diff --git a/MatterControl.Printing/Settings/PrinterSettings.cs b/MatterControl.Printing/Settings/PrinterSettings.cs index 54ce406b5..2611978fc 100644 --- a/MatterControl.Printing/Settings/PrinterSettings.cs +++ b/MatterControl.Printing/Settings/PrinterSettings.cs @@ -309,6 +309,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { SetValue(SettingsKey.active_material_key, value); MaterialLayer = GetMaterialLayer(value); + + // Deactivate conflicting user overrides by iterating the Material preset we've just switched to + this.DeactivateConflictingUserOverrides(this.MaterialLayer); } } } @@ -324,6 +327,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { SetValue(SettingsKey.active_quality_key, value); QualityLayer = GetQualityLayer(value); + + // Deactivate conflicting user overrides by iterating the Quality preset we've just switched to + this.DeactivateConflictingUserOverrides(this.QualityLayer); } } } diff --git a/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs b/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs index 5b02e262c..3be8dd5a3 100644 --- a/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs +++ b/MatterControlLib/DesignTools/Sheets/SheetObject3D.cs @@ -52,7 +52,7 @@ namespace MatterHackers.MatterControl.DesignTools [HideMeterialAndColor] [WebPageLink("Documentation", "Open", "https://www.matterhackers.com/support/mattercontrol-variable-support")] [MarkDownDescription("[BETA] - Experimental support for variables and equations with a sheets like interface.")] - public class SheetObject3D : Object3D, IObject3DControlsProvider + public class SheetObject3D : Object3D, IObject3DControlsProvider, IStaticThumbnail { private SheetData _sheetData; public SheetData SheetData @@ -84,6 +84,9 @@ namespace MatterHackers.MatterControl.DesignTools return item; } + public string ThumbnailName => "Sheet"; + + private static object loadLock = new object(); private static IObject3D sheetObject; diff --git a/MatterControlLib/Library/Widgets/AddMaterialDialog.cs b/MatterControlLib/Library/Widgets/AddMaterialDialog.cs index 00c23c0ee..92230ccab 100644 --- a/MatterControlLib/Library/Widgets/AddMaterialDialog.cs +++ b/MatterControlLib/Library/Widgets/AddMaterialDialog.cs @@ -94,7 +94,7 @@ namespace MatterHackers.MatterControl.Library.Widgets } nextButton.Name = "Next Button"; - nextButton.Click += (s, e) => UiThread.RunOnIdle(async () => + nextButton.Click += (s, e) => UiThread.RunOnIdle(() => { if (materialPanel.SelectedMaterial is AddMaterialWidget.MaterialInfo selectedMaterial) { diff --git a/MatterControlLib/Library/Widgets/AddMaterialWidget.cs b/MatterControlLib/Library/Widgets/AddMaterialWidget.cs index 8e7f366dd..fd1397361 100644 --- a/MatterControlLib/Library/Widgets/AddMaterialWidget.cs +++ b/MatterControlLib/Library/Widgets/AddMaterialWidget.cs @@ -244,14 +244,17 @@ namespace MatterHackers.MatterControl.Library.Widgets printerDetails.AfterLoad += (s, e2) => { - printerDetails.ProductDataContainer.AddChild(new HorizontalLine(theme.TextColor) + if (printerDetails.ProductDataContainer.Children.Count > 0) { - Margin = new BorderDouble(0, 7) - }); + printerDetails.ProductDataContainer.AddChild(new HorizontalLine(theme.TextColor) + { + Margin = new BorderDouble(0, 7) + }); + } var settingsBackground = new GuiWidget() { - Name = "Bacground", + Name = "Background", HAnchor = HAnchor.Stretch, VAnchor = VAnchor.Fit }; diff --git a/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs b/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs index 09efdb50e..eb6fa7516 100644 --- a/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs +++ b/MatterControlLib/SlicerConfiguration/PresetSelectorWidget.cs @@ -389,11 +389,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return dropDownList; } - private void CopyPlateToPrinter(object sceneContext, PrinterConfig printer) - { - throw new NotImplementedException(); - } - private void MenuItem_Selected(object sender, EventArgs e) { // When a preset is selected store the current values of all known settings to compare against after applying the preset @@ -419,9 +414,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration activeSettings.RestoreConflictingUserOverrides(activeSettings.MaterialLayer); activeSettings.ActiveMaterialKey = item.Value; - - // Deactivate conflicting user overrides by iterating the Material preset we've just switched to - activeSettings.DeactivateConflictingUserOverrides(activeSettings.MaterialLayer); } } else // set the temperature for the given extruder @@ -456,9 +448,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration activeSettings.ActiveQualityKey = item.Value; nextSelection = activeSettings.QualityLayer; - - // Deactivate conflicting user overrides by iterating the Quality preset we've just switched to - activeSettings.DeactivateConflictingUserOverrides(activeSettings.QualityLayer); } } @@ -492,9 +481,21 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - foreach (var keyName in settingsToUpdate) - { - printer.Settings.OnSettingChanged(keyName); + // we are about to change many settings only save on the last one + var updateList = settingsToUpdate.ToList(); + ProfileManager.SaveOnSingleSettingChange = false; + for (int i=0; i< updateList.Count-1; i++) + { + printer.Settings.OnSettingChanged(updateList[i]); + } + ProfileManager.SaveOnSingleSettingChange = true; + printer.Settings.OnSettingChanged(updateList[updateList.Count-1]); + + // update the style of every setting + var sliceSettingsWidget = this.Parents().FirstOrDefault(); + if (sliceSettingsWidget != null) + { + sliceSettingsWidget.UpdateAllStyles(); } }); @@ -505,6 +506,12 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { pullDownContainer.CloseChildren(); pullDownContainer.AddChild(this.NewPulldownContainer()); + + var sliceSettingsWidget = this.Parents().FirstOrDefault(); + if (sliceSettingsWidget != null) + { + sliceSettingsWidget.UpdateAllStyles(); + } } private void SettingsLayers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) diff --git a/MatterControlLib/SlicerConfiguration/Settings/ProfileManager.cs b/MatterControlLib/SlicerConfiguration/Settings/ProfileManager.cs index 283b3fc9c..09020cde7 100644 --- a/MatterControlLib/SlicerConfiguration/Settings/ProfileManager.cs +++ b/MatterControlLib/SlicerConfiguration/Settings/ProfileManager.cs @@ -474,10 +474,13 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return printerSettings; } + public static bool SaveOnSingleSettingChange { get; set; } = true; + // Settings persistence moved from PrinterSettings into ProfileManager to break dependency around ProfileManager paths/MatterControl specific details private static void PrinterSettings_SettingChanged(object sender, StringEventArgs e) { - if (sender is PrinterSettings settings) + if (SaveOnSingleSettingChange + && sender is PrinterSettings settings) { settings.Save(); } diff --git a/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs b/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs index 04273c2ac..42ecceb3a 100644 --- a/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs +++ b/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs @@ -112,7 +112,15 @@ namespace MatterHackers.MatterControl.SlicerConfiguration showControlBar = value; } } - } + + public void UpdateAllStyles() + { + foreach(var child in this.Descendants()) + { + child.UpdateStyle(); + } + } + } public class SliceSettingsTabView : SimpleTabs { diff --git a/StaticData/Images/Thumbnails/8315973372694813834-256x256.png b/StaticData/Images/Thumbnails/8315973372694813834-256x256.png new file mode 100644 index 000000000..7e86234f7 Binary files /dev/null and b/StaticData/Images/Thumbnails/8315973372694813834-256x256.png differ diff --git a/StaticData/Materials/General/ABS.material b/StaticData/Materials/General/ABS.material index 9f1f5da40..0036cf264 100644 --- a/StaticData/Materials/General/ABS.material +++ b/StaticData/Materials/General/ABS.material @@ -14,14 +14,8 @@ "bridge_fan_speed": "50", "merge_overlapping_lines": "1", "enable_fan": "1", - "layer_etag": "", - "layer_source": "", "min_fan_speed_layer_time": "8", "max_fan_speed_layer_time": "8", - "create_skirt": "0", - "create_brim": "1", - "brims": "5mm", - "filament_cost": "19.99", "bed_temperature_buildtak": "100", "bed_temperature_garolite": "100", "bed_temperature_glass": "100", diff --git a/StaticData/Materials/General/Nylon.material b/StaticData/Materials/General/Nylon.material index 5f70fc2b3..a9305eb08 100644 --- a/StaticData/Materials/General/Nylon.material +++ b/StaticData/Materials/General/Nylon.material @@ -8,18 +8,13 @@ "layer_id": "b8e72ad6-9b04-4bbb-852f-4fec1bc4262b", "temperature": "250", "bed_temperature": "55", - "retract_restart_extra": "0", - "retract_restart_extra_time_to_apply": "0", - "filament_density": "1.1", - "filament_cost": "73.3", + "filament_density": "1.14", "bed_temperature_buildtak": "55", "bed_temperature_garolite": "70", "bed_temperature_glass": "70", "bed_temperature_kapton": "70", "bed_temperature_pei": "70", "bed_temperature_pp": "50", - "layer_etag": "", - "layer_source": "", "material_sku": "3d-printer-filament/Nylon" } ], diff --git a/StaticData/Materials/General/PETg.material b/StaticData/Materials/General/PETg.material index c97536a9d..102fee80e 100644 --- a/StaticData/Materials/General/PETg.material +++ b/StaticData/Materials/General/PETg.material @@ -7,7 +7,7 @@ "layer_name": "PETg", "layer_id": "dbef12f0-4197-41e8-b15e-85433d8e3fcc", "temperature": "245", - "filament_density": "1.28", + "filament_density": "1.23", "bed_temperature": "75", "bridge_fan_speed": "25", "max_fan_speed": "100", @@ -16,8 +16,6 @@ "max_fan_speed_layer_time": "10", "layer_etag": "", "layer_source": "", - "extrusion_multiplier": "0.95", - "filament_cost": "24.99", "bed_temperature_buildtak": "55", "bed_temperature_garolite": "75", "bed_temperature_glass": "75", diff --git a/StaticData/Materials/General/PLA.material b/StaticData/Materials/General/PLA.material index c09955e5d..ae555a5e8 100644 --- a/StaticData/Materials/General/PLA.material +++ b/StaticData/Materials/General/PLA.material @@ -12,13 +12,9 @@ "min_fan_speed": "70", "max_fan_speed": "100", "bridge_fan_speed": "100", - "layer_etag": "", - "layer_source": "", - "filament_cost": "19.99", "min_fan_speed_layer_time": "180", "max_fan_speed_layer_time": "60", - "extrusion_multiplier": "0.97", - "disable_fan_first_layers": "5", + "disable_fan_first_layers": "3", "bed_temperature_buildtak": "50", "bed_temperature_garolite": "75", "bed_temperature_glass": "75", diff --git a/Submodules/MatterSlice b/Submodules/MatterSlice index 8610fe4d3..0511fb98b 160000 --- a/Submodules/MatterSlice +++ b/Submodules/MatterSlice @@ -1 +1 @@ -Subproject commit 8610fe4d31da3d08b3c06de89eae25db39f56838 +Subproject commit 0511fb98bd18e41c90ad149e7c9d33bc3c1d7d9e diff --git a/Tests/MatterControl.Tests/MatterControl/OemProfileTests.cs b/Tests/MatterControl.Tests/MatterControl/OemProfileTests.cs index 73a6e7156..780db9e1e 100644 --- a/Tests/MatterControl.Tests/MatterControl/OemProfileTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/OemProfileTests.cs @@ -189,13 +189,17 @@ M300 S3000 P30 ; Resume Tone"; var files = directoryInfo.GetFiles("*.material", SearchOption.AllDirectories); var profiles = files.Select(f => PrinterSettings.LoadFile(f.FullName)).ToList(); + var allMaterialIds = new HashSet(); + foreach(var profile in profiles) { Assert.AreEqual(1, profile.MaterialLayers.Count, "Each material profile should have 1 material in it"); var material = profile.MaterialLayers[0]; profile.ActiveMaterialKey = material.LayerID; Assert.IsTrue(!string.IsNullOrEmpty(profile.GetValue(SettingsKey.material_sku))); - } + Assert.IsTrue(!allMaterialIds.Contains(material.LayerID), "Every material needs a unique Id"); + allMaterialIds.Add(material.LayerID); + } }