From d11ad50ddd31c65fc141071783d455f8d02ceff8 Mon Sep 17 00:00:00 2001 From: LarsBrubaker Date: Sun, 6 Mar 2022 18:14:35 -0800 Subject: [PATCH] Refactoring ShowIfSet to be a func --- .../Settings/PrinterSettings.cs | 81 +------ .../Settings/SliceSettingData.cs | 2 +- .../Settings/SliceSettingsFields.cs | 223 ++++++++++-------- .../SlicerConfiguration/SettingsContext.cs | 19 +- .../SliceSettingsWidget.cs | 4 +- StaticData/Translations/Master.txt | 9 + Submodules/agg-sharp | 2 +- .../MatterControl/SettingsParseTests.cs | 114 --------- 8 files changed, 156 insertions(+), 298 deletions(-) diff --git a/MatterControl.Printing/Settings/PrinterSettings.cs b/MatterControl.Printing/Settings/PrinterSettings.cs index dc700f3df..a78f2e832 100644 --- a/MatterControl.Printing/Settings/PrinterSettings.cs +++ b/MatterControl.Printing/Settings/PrinterSettings.cs @@ -942,77 +942,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration AnyPrinterSettingChanged?.Invoke(this, new StringEventArgs(slicerConfigName)); } - /// - /// Determines if a given field should be shown given its filter - /// - /// The view filter - order of precedence &, |, !, = - /// An indicator if the field should be shown given the current filter - public bool ParseShowString(string filter) - { - if (!string.IsNullOrEmpty(filter)) - { - string[] splitOnAnd = filter.Split('&'); - foreach (var andGroup in splitOnAnd) - { - bool orResult = false; - string[] splitOnOr = andGroup.Split('|'); - foreach (var orGroup in splitOnOr) - { - var matchString = "1"; - var orItem = orGroup; - bool negate = orItem.StartsWith("!"); - if (negate) - { - orItem = orItem.Substring(1); - } - - string sliceSettingValue = ""; - if (orItem.Contains("=")) - { - string[] splitOnEquals = orItem.Split('='); - - sliceSettingValue = this.GetValue(splitOnEquals[0]); - matchString = splitOnEquals[1]; - } - else if (orItem.Contains(">")) - { - matchString = "no_match"; - string[] splitOnGreater = orItem.Split('>'); - - sliceSettingValue = this.GetValue(splitOnGreater[0]); - if (double.TryParse(sliceSettingValue, out double doubleValue)) - { - if (double.TryParse(splitOnGreater[1], out double greater)) - { - if (doubleValue > greater) - { - matchString = sliceSettingValue; - } - } - } - } - else - { - sliceSettingValue = this.GetValue(orItem); - } - - if ((!negate && sliceSettingValue == matchString) - || (negate && sliceSettingValue != matchString)) - { - orResult = true; - } - } - - if (orResult == false) - { - return false; - } - } - } - - return true; - } - private static readonly Regex ConstantFinder = new Regex("(?<=\\[).+?(?=\\])", RegexOptions.CultureInvariant | RegexOptions.Compiled); private static readonly Regex SettingsFinder = new Regex("(?<=\\[).+?(?=\\])|(?<=\\{).+?(?=\\})", RegexOptions.CultureInvariant | RegexOptions.Compiled); @@ -1229,6 +1158,16 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return bigStringForHashCode.ToString().GetLongHashCode(); } + public bool GetBool(string settingsKey) + { + return GetValue(settingsKey); + } + + public int GetInt(string settingsKey) + { + return GetValue(settingsKey); + } + /// /// Returns the first matching value discovered while enumerating the settings layers /// diff --git a/MatterControl.Printing/Settings/SliceSettingData.cs b/MatterControl.Printing/Settings/SliceSettingData.cs index 9248b27ae..6d1f2aa33 100644 --- a/MatterControl.Printing/Settings/SliceSettingData.cs +++ b/MatterControl.Printing/Settings/SliceSettingData.cs @@ -76,7 +76,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public string PresentationName { get; set; } - public string ShowIfSet { get; set; } + public Func Show { get; set; } public string EnableIfSet { get; set; } diff --git a/MatterControl.Printing/Settings/SliceSettingsFields.cs b/MatterControl.Printing/Settings/SliceSettingsFields.cs index 644889bf9..8f96341ec 100644 --- a/MatterControl.Printing/Settings/SliceSettingsFields.cs +++ b/MatterControl.Printing/Settings/SliceSettingsFields.cs @@ -132,7 +132,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Simple, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed), DefaultValue = "70" }, new SliceSettingData() @@ -142,7 +142,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is coverd with blue tape. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -152,7 +153,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is using BuildTak. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -162,7 +164,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is using garolite. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -172,7 +175,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is using glass. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -182,7 +186,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is coverd in kapton tape. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -192,7 +197,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is using PEI. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -202,7 +208,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The temperature to print when the bed is polypropylene. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), DefaultValue = "0" }, new SliceSettingData() @@ -212,7 +219,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "This should be checked if the printer supports multiple bed surfaces and the bed temperature for the different surfaces needs to vary.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "has_heated_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed), UiUpdate = UiUpdateRequired.Application, DefaultValue = "0" }, @@ -224,7 +231,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration //HelpText = "The current bed surfaces that the printer is using. This is used to set the correct bed temperature for a given material.".Localize(), HelpText = "This should be set to the current bed surfaces of the printer. It is used to select the correct bed temperature for a given material and bed surface combination.".Localize(), DataEditType = DataEditTypes.LIST, - ShowIfSet = "has_heated_bed&has_swappable_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed) + && settings.GetBool(SettingsKey.has_swappable_bed), ListValues = "Default,Blue Tape,BuildTak,Garolite,Glass,Kapton,PEI,Polypropylene", DefaultValue = "Default" }, @@ -235,7 +243,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The target temperature the bed will attempt to reach during the first layer of the print.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed), DefaultValue = "70" }, new SliceSettingData() @@ -246,7 +254,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "°C".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "0" }, new SliceSettingData() @@ -307,7 +315,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "s".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "0" }, new SliceSettingData() @@ -363,7 +371,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The Markdown that will be shown on the second extruders Insert Filament page.".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.MARKDOWN_TEXT, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "* Insert filament into extruder 2 until you feel it start to feed\\n * Make sure the filament is all the way into the extruder\\n * Hold the filament for several seconds until it catches\\n * Test that it is inserted by gently pulling down, there should be some resistance \\n* Click 'Next' \\n![Load Filament](https://www.matterhackers.com/r/Ipj4Bb)" }, new SliceSettingData() @@ -382,7 +390,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The Markdown that will be shown on the second extruders Clean Filament page.".Localize(), DataEditType = DataEditTypes.MARKDOWN_TEXT, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "In a few seconds filament should be coming out of the second extruder\\n* Wait for the new filament to be coming out with no trace of the previous filament\\n* Click 'Next' when the new filament is running cleanly" }, new SliceSettingData() @@ -664,7 +672,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.OFFSET3, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "mm".Localize(), - // ShowIfSet = "extruder_count>1", // can't do this currently as it breaks legacy printers (kossle & jump start). Have to have a fix for that to enable hiding. DefaultValue = "0x0,0x0,0x0,0x0" }, new SliceSettingData() @@ -686,7 +693,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.CHECK_BOX, RequiredDisplayDetail = DisplayDetailRequired.Advanced, DefaultValue = "0", - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, UiUpdate = UiUpdateRequired.Application }, new SliceSettingData() @@ -883,7 +890,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The speed at which the nozzle will move when recovering a failed print, for 1 layer.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "mm/s".Localize(), - ShowIfSet = "!has_hardware_leveling&recover_is_enabled", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.recover_is_enabled), DefaultValue = "10", RebuildGCodeOnChange = false }, @@ -893,7 +901,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Enable Recovery".Localize(), HelpText = "When this is checked MatterControl will attempt to recover a print in the event of a failure, such as lost connection or lost power.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), DefaultValue = "0", UiUpdate = UiUpdateRequired.SliceSettings, RebuildGCodeOnChange = false @@ -916,7 +924,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Home Z Max".Localize(), HelpText = "Indicates that the Z axis homes the hot end away from the bed (z-max homing)".Localize(), DataEditType = DataEditTypes.CHECK_BOX, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), DefaultValue = "0", UiUpdate = UiUpdateRequired.SliceSettings, RebuildGCodeOnChange = false @@ -928,7 +936,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The X and Y position of the hot end that minimizes the chance of colliding with the parts on the bed.".Localize(), DataEditType = DataEditTypes.VECTOR2, Units = "mm".Localize(), - ShowIfSet = "!has_hardware_leveling&recover_is_enabled", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.recover_is_enabled), DefaultValue = "0,0", RebuildGCodeOnChange = false }, @@ -988,7 +997,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The printer has a servo for lowering and raising the z probe.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, ShowAsOverride = true, - ShowIfSet = "has_z_probe", + Show = (settings) => settings.GetBool(SettingsKey.has_z_probe), DefaultValue = "0", UiUpdate = UiUpdateRequired.SliceSettings, RebuildGCodeOnChange = false @@ -1012,7 +1021,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.CHECK_BOX, ShowAsOverride = true, DefaultValue = "0", - ShowIfSet = "!has_hardware_leveling&has_z_probe&has_conductive_nozzle", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.has_conductive_nozzle), UiUpdate = UiUpdateRequired.SliceSettings, RebuildGCodeOnChange = false }, @@ -1024,7 +1035,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.CHECK_BOX, ShowAsOverride = true, DefaultValue = "0", - ShowIfSet = "!has_hardware_leveling&has_z_probe", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe), UiUpdate = UiUpdateRequired.SliceSettings, RebuildGCodeOnChange = false }, @@ -1036,7 +1048,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.VECTOR2, ShowAsOverride = true, DefaultValue = "0,0", - ShowIfSet = "!has_hardware_leveling&has_z_probe&has_conductive_nozzle&measure_probe_offset_conductively", + Show = (settings) => ! settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.has_conductive_nozzle) + && settings.GetBool(SettingsKey.measure_probe_offset_conductively), RebuildGCodeOnChange = false }, new SliceSettingData() @@ -1047,7 +1062,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.DOUBLE, ShowAsOverride = true, DefaultValue = "-1", - ShowIfSet = "!has_hardware_leveling&has_z_probe&has_conductive_nozzle&measure_probe_offset_conductively", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.has_conductive_nozzle) + && settings.GetBool(SettingsKey.measure_probe_offset_conductively), RebuildGCodeOnChange = false }, new SliceSettingData() @@ -1088,7 +1106,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.CHECK_BOX, DefaultValue = "1", RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "!include_firmware_updater=None", + Show = (settings) => settings.GetValue(SettingsKey.include_firmware_updater) != "None", RebuildGCodeOnChange = false }, new SliceSettingData() @@ -1173,7 +1191,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.LIST, ListValues = "3 Point Plane,3x3 Mesh,5x5 Mesh,10x10 Mesh,7 Point Disk,13 Point Disk,100 Point Disk,Custom Points", ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), RequiredDisplayDetail = DisplayDetailRequired.Simple, DefaultValue = "3 Point Plane", UiUpdate = UiUpdateRequired.SliceSettings, @@ -1187,7 +1205,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.BOUNDS, Units = "%".Localize(), ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), RebuildGCodeOnChange = false, DefaultValue = "10,10,10,10" }, @@ -1198,7 +1216,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "A comma separated list of sample points to probe the bed at. You must specify an x and y position for each point. For example: '20,20,100,180,180,20' will sample the bad at 3 points.".Localize(), DataEditType = DataEditTypes.MULTI_LINE_TEXT, DefaultValue = "20,20,100,180,180,20", - ShowIfSet = "!has_hardware_leveling&print_leveling_solution=Custom Points", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetValue(SettingsKey.print_leveling_solution) == "Custom Points", RebuildGCodeOnChange = false }, new SliceSettingData() @@ -1207,7 +1226,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Require Leveling To Print".Localize(), HelpText = "The printer requires print leveling to run correctly.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), RequiredDisplayDetail = DisplayDetailRequired.Advanced, DefaultValue = "0", ShowAsOverride = true, @@ -1245,7 +1264,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration Units = "mm".Localize(), ShowAsOverride = true, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "filament_runout_sensor", + Show = (settings) => settings.GetBool(SettingsKey.filament_runout_sensor), RebuildGCodeOnChange = false, DefaultValue = "1" }, @@ -1257,7 +1276,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, ShowAsOverride = true, - ShowIfSet = "filament_runout_sensor", + Show = (settings) => settings.GetBool(SettingsKey.filament_runout_sensor), RebuildGCodeOnChange = false, DefaultValue = "2" }, @@ -1268,7 +1287,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "Report the data analysis of the run out sensor data each time it is read.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, ShowAsOverride = true, - ShowIfSet = "filament_runout_sonsor", + Show = (settings) => settings.GetBool(SettingsKey.filament_runout_sensor), DefaultValue = "0", RebuildGCodeOnChange = false @@ -1279,7 +1298,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Probe Has Been Calibrated".Localize(), HelpText = "Flag keeping track if probe calibration wizard has been run.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), DefaultValue = "0", RebuildGCodeOnChange = false }, @@ -1289,7 +1308,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "X Y Nozzle Offsets Have Been Calibrated".Localize(), HelpText = "Flag keeping track if xy calibration wizard has been run.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, - ShowIfSet = "!has_hardware_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling), DefaultValue = "0", RebuildGCodeOnChange = false }, @@ -1318,7 +1337,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The starting height (z) of the print head before probing each print level position.".Localize(), DataEditType = DataEditTypes.DOUBLE, Units = "mm".Localize(), - ShowIfSet = "!has_hardware_leveling&has_z_probe", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe), DefaultValue = "10", RebuildGCodeOnChange = false }, @@ -1329,7 +1349,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "Enable this if your printer has hardware support for G30 (automatic bed probing) and you want to use it rather than manually measuring the probe positions.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe), RebuildGCodeOnChange = false, UiUpdate = UiUpdateRequired.SliceSettings, DefaultValue = "0" @@ -1341,7 +1362,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "Enable this if your printer has an automatic Z Probe and you want to validate the leveling before every print. This will run immediately after M190 (print bed reaches temp).".Localize(), DataEditType = DataEditTypes.CHECK_BOX, ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe&use_z_probe", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.use_z_probe), RebuildGCodeOnChange = false, UiUpdate = UiUpdateRequired.SliceSettings, DefaultValue = "0" @@ -1354,7 +1377,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "mm".Localize(), ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe&use_z_probe&validate_leveling", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.use_z_probe) + && settings.GetBool(SettingsKey.validate_leveling), RebuildGCodeOnChange = false, DefaultValue = ".05" }, @@ -1366,7 +1392,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.OFFSET3, Units = "mm".Localize(), ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe&use_z_probe", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.use_z_probe), RebuildGCodeOnChange = false, DefaultValue = "0,0,0" }, @@ -1378,7 +1406,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.INT, Units = "", ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe&use_z_probe", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.use_z_probe), RebuildGCodeOnChange = false, DefaultValue = "1" }, @@ -1390,7 +1420,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°".Localize(), ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe&use_z_probe&has_z_servo", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.use_z_probe) + && settings.GetBool(SettingsKey.has_z_servo), RebuildGCodeOnChange = false, DefaultValue = "0" }, @@ -1402,7 +1435,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°".Localize(), ShowAsOverride = true, - ShowIfSet = "!has_hardware_leveling&has_z_probe&use_z_probe&has_z_servo", + Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling) + && settings.GetBool(SettingsKey.has_z_probe) + && settings.GetBool(SettingsKey.use_z_probe) + && settings.GetBool(SettingsKey.has_z_servo), RebuildGCodeOnChange = false, DefaultValue = "0" }, @@ -1494,7 +1530,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Each Extruder Has Fan".Localize(), HelpText = "Each extruder has a separate part cooling fan that is controlled independently.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, - ShowIfSet = "has_fan&extruder_count>1", + Show = (settings) => settings.GetBool(SettingsKey.has_fan) + && settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "0", UiUpdate = UiUpdateRequired.SliceSettings }, @@ -1505,7 +1542,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "Turn the fan on and off regardless of settings.".Localize(), DataEditType = DataEditTypes.CHECK_BOX, UiUpdate = UiUpdateRequired.SliceSettings, - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), DefaultValue = "1" }, new SliceSettingData() @@ -1516,7 +1553,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.INT, Units = "seconds".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), EnableIfSet = SettingsKey.enable_fan, DefaultValue = "60", Converter = new ValueConverter(), @@ -1528,7 +1565,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The minimum speed at which the layer cooling fan will run, expressed as a percentage of full power, regardless of layer time.".Localize(), DataEditType = DataEditTypes.INT, Units = "%".Localize(), - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), EnableIfSet = SettingsKey.enable_fan, DefaultValue = "0", Converter = new ValueConverter(), @@ -1541,7 +1578,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.INT, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "seconds".Localize(), - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), EnableIfSet = SettingsKey.enable_fan, DefaultValue = "30", Converter = new ValueConverter(), @@ -1553,7 +1590,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The minimum speed at which the layer cooling fan will run, expressed as a percentage of full power.".Localize(), DataEditType = DataEditTypes.INT, Units = "%".Localize(), - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), RequiredDisplayDetail = DisplayDetailRequired.Advanced, EnableIfSet = SettingsKey.enable_fan, DefaultValue = "35", @@ -1567,7 +1604,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.INT, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "%".Localize(), - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), EnableIfSet = SettingsKey.enable_fan, DefaultValue = "100", Converter = new ConditionalField(SettingsKey.enable_fan, new ValueConverter()), @@ -1580,7 +1617,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.INT, Units = "%".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), EnableIfSet = SettingsKey.enable_fan, DefaultValue = "100", Converter = new ConditionalField(SettingsKey.enable_fan, new ValueConverter()), @@ -1592,7 +1629,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The number of layers for which the layer cooling fan will be forced off at the start of the print.".Localize(), DataEditType = DataEditTypes.INT, Units = "layers".Localize(), - ShowIfSet = "has_fan", + Show = (settings) => settings.GetBool(SettingsKey.has_fan), EnableIfSet = SettingsKey.enable_fan, DefaultValue = "1", Converter = new ValueConverter(), @@ -1794,7 +1831,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "mm".Localize(), EnableIfSet = SettingsKey.enable_retractions, - ShowIfSet = "!avoid_crossing_perimeters", + Show = (settings) => !settings.GetBool(SettingsKey.avoid_crossing_perimeters), DefaultValue = "5", Converter = new MapFirstValue(), }, @@ -1807,7 +1844,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration Units = "mm".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, EnableIfSet = SettingsKey.enable_retractions, - ShowIfSet = "avoid_crossing_perimeters", + Show = (settings) => settings.GetBool(SettingsKey.avoid_crossing_perimeters), DefaultValue = "20", Converter = new MapFirstValue(), }, @@ -1849,7 +1886,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "When using multiple extruders, the distance filament will reverse before changing to a different extruder.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, Units = "mm".Localize(), EnableIfSet = SettingsKey.enable_retractions, DefaultValue = "10", @@ -1884,7 +1921,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "Length of extra filament to extrude after a complete tool change (in addition to the re-extrusion of the tool change retraction distance).".Localize(), DataEditType = DataEditTypes.DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, EnableIfSet = SettingsKey.enable_retractions, Units = "mm zero to disable".Localize(), DefaultValue = "0", @@ -2094,7 +2131,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "", ShowAsOverride = true, - ShowIfSet = null, DefaultValue = "" }, new SliceSettingData() @@ -2106,7 +2142,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "", ShowAsOverride = true, - ShowIfSet = null, DefaultValue = "" }, new SliceSettingData() @@ -2118,7 +2153,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "", ShowAsOverride = true, - ShowIfSet = null, DefaultValue = "" }, new SliceSettingData() @@ -2194,7 +2228,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration SlicerConfigName = SettingsKey.create_per_layer_internal_support, PresentationName = "Generate Everywhere".Localize(), HelpText = "When generating per layer support, evaluate all surfaces rather than only those above the bed.".Localize(), - ShowIfSet = "create_per_layer_support", + Show = (settings) => settings.GetBool(SettingsKey.create_per_layer_support), DataEditType = DataEditTypes.CHECK_BOX, DefaultValue = "1", Converter = new MappedToBoolString(), @@ -2207,7 +2241,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "%".Localize(), - ShowIfSet = "create_per_layer_support", + Show = (settings) => settings.GetBool(SettingsKey.create_per_layer_support), DefaultValue = "50", Converter = new ValueConverter(), }, @@ -2219,7 +2253,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "mm".Localize(), - ShowIfSet = "create_per_layer_support", + Show = (settings) => settings.GetBool(SettingsKey.create_per_layer_support), DefaultValue = "1", Converter = new ValueConverter(), }, @@ -2227,7 +2261,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { SlicerConfigName = SettingsKey.support_material_extruder, PresentationName = "Support Material Extruder".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, HelpText = "The extruder to use for support material. Default will use whichever extruder active at the time.".Localize(), DataEditType = DataEditTypes.EXTRUDER_LIST, Converter = new ValuePlusConstant(-1), @@ -2238,7 +2272,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration SlicerConfigName = SettingsKey.raft_extruder, PresentationName = "Raft Extruder".Localize(), HelpText = "The extruder to use to print the raft. Default will use extruder 1.".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, EnableIfSet = "create_raft", RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.EXTRUDER_LIST, @@ -2250,7 +2284,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration SlicerConfigName = SettingsKey.support_material_interface_extruder, PresentationName = "Support Interface Extruder".Localize(), HelpText = "The extruder to use to for support material interface layers. Default will use whichever extruder active at the time.".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DataEditType = DataEditTypes.EXTRUDER_LIST, Converter = new ValuePlusConstant(-1), DefaultValue = "1", @@ -2260,7 +2294,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration SlicerConfigName = SettingsKey.brim_extruder, PresentationName = "Brim Extruder".Localize(), HelpText = "The extruder to use for the brim. Default will use the first extruder of the print.".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DataEditType = DataEditTypes.EXTRUDER_LIST, Converter = new ValuePlusConstant(-1), EnableIfSet = SettingsKey.create_brim, @@ -2346,7 +2380,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The color of the second material (extruder 2).".Localize(), DataEditType = DataEditTypes.COLOR, RequiredDisplayDetail = DisplayDetailRequired.Simple, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, RebuildGCodeOnChange = false, DefaultValue = ColorF.FromHSL(1 / 10.0, .99, .49).ToColor().Html, }, @@ -2357,7 +2391,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The color of the third material (extruder 3).".Localize(), DataEditType = DataEditTypes.COLOR, RequiredDisplayDetail = DisplayDetailRequired.Simple, - ShowIfSet = "extruder_count>2", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 2, RebuildGCodeOnChange = false, DefaultValue = ColorF.FromHSL(2 / 10.0, .99, .49).ToColor().Html, }, @@ -2368,7 +2402,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The color of the forth material (extruder 4).".Localize(), DataEditType = DataEditTypes.COLOR, RequiredDisplayDetail = DisplayDetailRequired.Simple, - ShowIfSet = "extruder_count>3", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 3, RebuildGCodeOnChange = false, DefaultValue = ColorF.FromHSL(3 / 10.0, .99, .49).ToColor().Html, }, @@ -2389,7 +2423,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The target temperature the extruder will attempt to reach during the print.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "200" }, new SliceSettingData() @@ -2400,7 +2434,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.DOUBLE_OR_PERCENT, Units = "Ratio or %".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "100%", Converter = new AsPercentOrDirect() }, @@ -2411,7 +2445,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The target temperature the extruder will attempt to reach during the print.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "extruder_count>2", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 2, DefaultValue = "200" }, new SliceSettingData() @@ -2430,7 +2464,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The inset amount for nozzle 1 from the bed (Left, Front, Right, Back).".Localize(), DataEditType = DataEditTypes.BOUNDS, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "" }, new SliceSettingData() @@ -2440,7 +2474,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The inset amount for nozzle 2 from the bed (Left, Front, Right, Back).".Localize(), DataEditType = DataEditTypes.BOUNDS, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "" }, new SliceSettingData() @@ -2450,7 +2484,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The target temperature the extruder will attempt to reach during the print.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "°C".Localize(), - ShowIfSet = "extruder_count>3", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 3, DefaultValue = "200" }, new SliceSettingData() @@ -2471,7 +2505,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.POSITIVE_DOUBLE, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "°C".Localize(), - ShowIfSet = "has_heated_bed", + Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed), DefaultValue = "0" }, new SliceSettingData() @@ -2498,7 +2532,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "G-Code to be run before every tool change. You can use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), DataEditType = DataEditTypes.MULTI_LINE_TEXT, RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "" }, new SliceSettingData() @@ -2506,7 +2540,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration SlicerConfigName = SettingsKey.toolchange_gcode, PresentationName = "After Tool Change G-Code".Localize(), HelpText = "G-Code to be run after every tool change. You can use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.MULTI_LINE_TEXT, DefaultValue = "" @@ -2518,7 +2552,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "G-Code to be run before switching to extruder 2. Will use standard before G-Code if not set. You can use [wipe_tower_x] [wipe_tower_y] & [wipe_tower_z] to set the extruder position if needed. You can also use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.MULTI_LINE_TEXT, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "" }, new SliceSettingData() @@ -2526,7 +2560,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration SlicerConfigName = SettingsKey.toolchange_gcode_1, PresentationName = "After Tool Change G-Code 2".Localize(), HelpText = "G-Code to be run after switching to extruder 2. Will use standard after G-Code if not set. You can use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.MULTI_LINE_TEXT, DefaultValue = "" @@ -2538,7 +2572,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "G-Code to be run before switching to extruder 3. Will use standard before G-Code if not set. You can use [wipe_tower_x] [wipe_tower_y] & [wipe_tower_z] to set the extruder position if needed. You can also use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.MULTI_LINE_TEXT, - ShowIfSet = "extruder_count>2", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 2, DefaultValue = "" }, new SliceSettingData() @@ -2547,7 +2581,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "After Tool Change G-Code 3".Localize(), HelpText = "G-Code to be run after switching to extruder 3. Will use standard after G-Code if not set. You can use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>2", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 2, DataEditType = DataEditTypes.MULTI_LINE_TEXT, DefaultValue = "" }, @@ -2558,7 +2592,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "G-Code to be run before switching to extruder 3. Will use standard before G-Code if not set. You can use [wipe_tower_x] [wipe_tower_y] & [wipe_tower_z] to set the extruder position if needed. You can also use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, DataEditType = DataEditTypes.MULTI_LINE_TEXT, - ShowIfSet = "extruder_count>3", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 3, DefaultValue = "" }, new SliceSettingData() @@ -2567,7 +2601,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "After Tool Change G-Code 4".Localize(), HelpText = "G-Code to be run after switching to extruder 2. Will use standard after G-Code if not set. You can use '; WRITE_RAW' to skip checksums or '; NO_PROCESSING' to skip position offsetting.".Localize(), RequiredDisplayDetail = DisplayDetailRequired.Advanced, - ShowIfSet = "extruder_count>3", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 3, DataEditType = DataEditTypes.MULTI_LINE_TEXT, DefaultValue = "" }, @@ -2676,7 +2710,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The serial port to use while connecting to this printer.".Localize(), DataEditType = DataEditTypes.COM_PORT, ShowAsOverride = false, - ShowIfSet = "!enable_network_printing", + Show = (settings) => !settings.GetBool(SettingsKey.enable_network_printing), RequiredDisplayDetail = DisplayDetailRequired.Simple, DefaultValue = "", RebuildGCodeOnChange = false @@ -2687,7 +2721,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Wipe Shield Distance".Localize(), HelpText = "Creates a perimeter around the part on which to wipe the other nozzle when printing using dual extrusion. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, Units = "mm".Localize(), DefaultValue = "0", Converter = new ValueConverter(), @@ -2698,7 +2732,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration PresentationName = "Perimeters Per Extruder".Localize(), HelpText = "The number of perimeters will be this number times the number of active extruders. Make this a smaller number to make the wipe more hollow or bigger to fill it.".Localize(), DataEditType = DataEditTypes.INT, - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "3", Converter = new ValueConverter(), }, @@ -2709,7 +2743,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "The length and width of a tower created at the back left of the print used for wiping the next nozzle when changing between multiple extruders. Set to 0 to disable.".Localize(), DataEditType = DataEditTypes.POSITIVE_DOUBLE, Units = "mm".Localize(), - ShowIfSet = "extruder_count>1", + Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1, DefaultValue = "0", Converter = new ValueConverter(), }, @@ -2786,7 +2820,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "List of IP's discovered on the network".Localize(), DataEditType = DataEditTypes.IP_LIST, ShowAsOverride = false, - ShowIfSet = "!enable_network_printing", + Show = (settings) => !settings.GetBool(SettingsKey.enable_network_printing), DefaultValue = "Manual", RebuildGCodeOnChange = false, UiUpdate = UiUpdateRequired.SliceSettings @@ -2798,7 +2832,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "IP Address of printer/printer controller".Localize(), DataEditType = DataEditTypes.STRING, ShowAsOverride = false, - ShowIfSet = "enable_network_printing", + Show = (settings) => settings.GetBool(SettingsKey.enable_network_printing), EnableIfSet = "selector_ip_address=Manual", DefaultValue = "127.0.0.1", RebuildGCodeOnChange = false @@ -2810,7 +2844,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HelpText = "Port number to be used with IP Address to connect to printer over the network".Localize(), DataEditType = DataEditTypes.INT, ShowAsOverride = false, - ShowIfSet = "enable_network_printing", + Show = (settings) => settings.GetBool(SettingsKey.enable_network_printing), EnableIfSet = "selector_ip_address=Manual", DefaultValue = "23", RebuildGCodeOnChange = false @@ -2931,10 +2965,5 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } }; } - - private static string GetSettingsName(string settingsKey) - { - return PrinterSettings.SettingsData[settingsKey].PresentationName; - } } } \ No newline at end of file diff --git a/MatterControlLib/SlicerConfiguration/SettingsContext.cs b/MatterControlLib/SlicerConfiguration/SettingsContext.cs index ff6bdb9f3..057b38176 100644 --- a/MatterControlLib/SlicerConfiguration/SettingsContext.cs +++ b/MatterControlLib/SlicerConfiguration/SettingsContext.cs @@ -37,11 +37,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { private IEnumerable layerCascade; private PrinterSettingsLayer persistenceLayer; - private PrinterConfig printer; + public PrinterConfig Printer { get; } public SettingsContext(PrinterConfig printer, IEnumerable layerCascade, NamedSettingsLayers viewFilter) { - this.printer = printer; + this.Printer = printer; this.layerCascade = layerCascade; this.ViewFilter = viewFilter; @@ -58,22 +58,22 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public string GetValue(string slicerConfigName) { - return printer.Settings.GetValue(slicerConfigName, layerCascade); + return Printer.Settings.GetValue(slicerConfigName, layerCascade); } public void SetValue(string slicerConfigName, string settingsValue) { - printer.Settings.SetValue(slicerConfigName, settingsValue, persistenceLayer); + Printer.Settings.SetValue(slicerConfigName, settingsValue, persistenceLayer); } public void SetComPort(string settingsValue) { - printer.Settings.Helpers.SetComPort(settingsValue, persistenceLayer); + Printer.Settings.Helpers.SetComPort(settingsValue, persistenceLayer); } public void ClearValue(string slicerConfigName) { - printer.Settings.ClearValue(slicerConfigName, persistenceLayer); + Printer.Settings.ClearValue(slicerConfigName, persistenceLayer); } public bool ContainsKey(string slicerConfigName) @@ -81,14 +81,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return persistenceLayer.ContainsKey(slicerConfigName); } - internal bool ParseShowString(string enableIfSet) - { - return printer.Settings.ParseShowString(enableIfSet); - } - public T GetValue(string slicerConfigName) where T : IConvertible { - return printer.Settings.GetValue(slicerConfigName, this.layerCascade); + return Printer.Settings.GetValue(slicerConfigName, this.layerCascade); } } } diff --git a/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs b/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs index 5bff32d28..39d8f9f2c 100644 --- a/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs +++ b/MatterControlLib/SlicerConfiguration/SliceSettingsWidget.cs @@ -520,7 +520,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private static bool CheckIfShouldBeShown(SliceSettingData settingData, SettingsContext settingsContext) { - bool settingShouldBeShown = settingsContext.ParseShowString(settingData.ShowIfSet); + bool settingShouldBeShown = settingData.Show?.Invoke(settingsContext.Printer.Settings) != false; if (settingsContext.ViewFilter == NamedSettingsLayers.Material || settingsContext.ViewFilter == NamedSettingsLayers.Quality) { if (!settingData.ShowAsOverride) @@ -872,7 +872,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration // Invoke the UpdateStyle implementation settingsRow.UpdateStyle(); - bool settingEnabled = settingsContext.ParseShowString(settingData.EnableIfSet); + bool settingEnabled = settingData.Show?.Invoke(settingsContext.Printer.Settings) != false; if (settingEnabled || settingsContext.ViewFilter == NamedSettingsLayers.Material || settingsContext.ViewFilter == NamedSettingsLayers.Quality) diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index fc90e038b..5741910ef 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -2803,6 +2803,12 @@ Translated:Mirror Mode English:Mirror On Translated:Mirror On +English:Mirror X +Translated:Mirror X + +English:Mirror Y +Translated:Mirror Y + English:Missing Translated:Missing @@ -3934,6 +3940,9 @@ Translated:Resetting to default values will remove your current overrides and re English:Reshape Translated:Reshape +English:Resin +Translated:Resin + English:Resin density. Only used for estimating mass in the Layer View. Translated:Resin density. Only used for estimating mass in the Layer View. diff --git a/Submodules/agg-sharp b/Submodules/agg-sharp index e0ed237ab..17248e426 160000 --- a/Submodules/agg-sharp +++ b/Submodules/agg-sharp @@ -1 +1 @@ -Subproject commit e0ed237ab80291188c576ad71ad7ff2078ace393 +Subproject commit 17248e4261e37cd59447a985f3813f9388fd3cf2 diff --git a/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs b/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs index e6e257750..e33f5835f 100644 --- a/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs @@ -38,120 +38,6 @@ namespace MatterControl.Tests.MatterControl } } - [Test] - public void CheckIfShouldBeShownParseTests() - { - StaticData.RootPath = TestContext.CurrentContext.ResolveProjectPath(4, "StaticData"); - MatterControlUtilities.OverrideAppDataLocation(TestContext.CurrentContext.ResolveProjectPath(4)); - - // test single if set to 0 - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "0" }; - var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("has_heated_bed")); - Assert.IsTrue(profile.ParseShowString("!has_heated_bed")); - } - - // test single > - { - string[] settings = new string[] { SettingsKey.extruder_count, "1" }; - var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("extruder_count>1")); - Assert.IsTrue(profile.ParseShowString("extruder_count>0")); - } - - // test single > - { - string[] settings = new string[] { SettingsKey.extruder_count, "2" }; - var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("extruder_count>3")); - Assert.IsFalse(profile.ParseShowString("extruder_count>2")); - Assert.IsTrue(profile.ParseShowString("extruder_count>1")); - Assert.IsTrue(profile.ParseShowString("extruder_count>0")); - } - - // test single if set to 1 - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "1" }; - var profile = GetProfile(settings); - Assert.IsTrue(profile.ParseShowString("has_heated_bed")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed")); - } - - // test & with set to 0 and 0 - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "0", SettingsKey.auto_connect, "0" }; - var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&auto_connect")); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect")); - Assert.IsTrue(profile.ParseShowString("!has_heated_bed&!auto_connect")); - } - - // test & with 0 and 1 - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "0", SettingsKey.auto_connect, "1" }; - var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&auto_connect")); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect")); - Assert.IsTrue(profile.ParseShowString("!has_heated_bed&auto_connect")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&!auto_connect")); - } - - // test & with 1 and 0 - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "1", SettingsKey.auto_connect, "0" }; - var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&auto_connect")); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&!auto_connect")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&!auto_connect")); - } - - // test & with 1 and 1 - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "1", SettingsKey.auto_connect, "1" }; - var profile = GetProfile(settings); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect")); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&!auto_connect")); - } - - // test 3 &s - { - string[] settings = new string[] { SettingsKey.has_heated_bed, "1", SettingsKey.auto_connect, "1", SettingsKey.has_fan, "1" }; - var profile = GetProfile(settings); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&has_fan")); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&has_fan|!has_sdcard")); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&!has_sdcard|has_fan")); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&has_sdcard|has_fan")); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&auto_connect&!has_fan")); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect&has_fan")); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect&has_fan")); - } - - // test list setting value - { - string[] settings = new string[] { SettingsKey.has_hardware_leveling, "0", - SettingsKey.print_leveling_solution, "3 Point Plane", - SettingsKey.extruder_count, "2"}; - var profile = GetProfile(settings); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane")); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane|print_leveling_solution=3x3 Mesh")); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3x3 Mesh|print_leveling_solution=3 Point Plane")); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&!print_leveling_solution=7 Point Disk")); - Assert.IsFalse(profile.ParseShowString("has_hardware_leveling&print_leveling_solution=3 Point Plane")); - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&!print_leveling_solution=3 Point Plane")); - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=7 Point Disk")); - - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>2")); - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>2")); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>1")); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>0")); - } - } - [Test] public void SupportInterfaceMaterialAssignedToExtruderOne() {