From 7a102fffa2bd9be35f8827ef34626536d11a2cb7 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Thu, 6 Sep 2018 07:58:02 -0700 Subject: [PATCH] Base field visibility on totality of settings, not filtered view - Use the current resolved settings stack for determining visibility - Issue MatterHackers/MCCentral#3981 Bed Temperature does not appear in material presets editor --- .../Settings/PrinterSettings.cs | 11 ++- SlicerConfiguration/SettingsContext.cs | 2 +- .../MatterControl/SettingsParseTests.cs | 90 +++++++++---------- 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/SlicerConfiguration/Settings/PrinterSettings.cs b/SlicerConfiguration/Settings/PrinterSettings.cs index f8abdc2a0..4e86ca08f 100644 --- a/SlicerConfiguration/Settings/PrinterSettings.cs +++ b/SlicerConfiguration/Settings/PrinterSettings.cs @@ -143,12 +143,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } /// - /// Order of precedence &, |, !, = + /// Determines if a given field should be shown given its filter - Order of precedence &, |, !, = /// /// - /// /// - public bool ParseShowString(string unsplitSettings, IEnumerable layerCascade) + public bool ParseShowString(string unsplitSettings) { if (!string.IsNullOrEmpty(unsplitSettings)) { @@ -172,7 +171,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { string[] splitOnEquals = orItem.Split('='); - sliceSettingValue = this.GetValue(splitOnEquals[0], layerCascade); + sliceSettingValue = this.GetValue(splitOnEquals[0]); matchString = splitOnEquals[1]; } else if (orItem.Contains(">")) @@ -180,7 +179,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration matchString = "no_match"; string[] splitOnGreater = orItem.Split('>'); - sliceSettingValue = this.GetValue(splitOnGreater[0], layerCascade); + sliceSettingValue = this.GetValue(splitOnGreater[0]); if (double.TryParse(sliceSettingValue, out double doubleValue)) { if (double.TryParse(splitOnGreater[1], out double greater)) @@ -194,7 +193,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } else { - sliceSettingValue = this.GetValue(orItem, layerCascade); + sliceSettingValue = this.GetValue(orItem); } if ((!negate && sliceSettingValue == matchString) diff --git a/SlicerConfiguration/SettingsContext.cs b/SlicerConfiguration/SettingsContext.cs index 156afc2ca..144cf4a8c 100644 --- a/SlicerConfiguration/SettingsContext.cs +++ b/SlicerConfiguration/SettingsContext.cs @@ -84,7 +84,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration internal bool ParseShowString(string enableIfSet) { - return printer.Settings.ParseShowString(enableIfSet, layerCascade); + return printer.Settings.ParseShowString(enableIfSet); } } } diff --git a/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs b/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs index 220de821a..c4702d428 100644 --- a/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/SettingsParseTests.cs @@ -46,87 +46,87 @@ namespace MatterControl.Tests.MatterControl { string[] settings = new string[] { SettingsKey.has_heated_bed, "0" }; var profile = GetProfile(settings); - Assert.IsFalse(profile.ParseShowString("has_heated_bed", null)); - Assert.IsTrue(profile.ParseShowString("!has_heated_bed", null)); + 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", null)); - Assert.IsTrue(profile.ParseShowString("extruder_count>0", null)); + 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", null)); - Assert.IsFalse(profile.ParseShowString("extruder_count>2", null)); - Assert.IsTrue(profile.ParseShowString("extruder_count>1", null)); - Assert.IsTrue(profile.ParseShowString("extruder_count>0", null)); + 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", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed", null)); + 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", null)); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect", null)); - Assert.IsTrue(profile.ParseShowString("!has_heated_bed&!auto_connect", null)); + 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", null)); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect", null)); - Assert.IsTrue(profile.ParseShowString("!has_heated_bed&auto_connect", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&!auto_connect", null)); + 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", null)); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&!auto_connect", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&!auto_connect", null)); + 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 + // 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", null)); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&!auto_connect", null)); + 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", null)); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&has_fan|!has_sdcard", null)); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&!has_sdcard|has_fan", null)); - Assert.IsTrue(profile.ParseShowString("has_heated_bed&auto_connect&has_sdcard|has_fan", null)); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&auto_connect&!has_fan", null)); - Assert.IsFalse(profile.ParseShowString("has_heated_bed&!auto_connect&has_fan", null)); - Assert.IsFalse(profile.ParseShowString("!has_heated_bed&auto_connect&has_fan", null)); + 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 @@ -135,18 +135,18 @@ namespace MatterControl.Tests.MatterControl 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", null)); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane|print_leveling_solution=3x3 Mesh", null)); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3x3 Mesh|print_leveling_solution=3 Point Plane", null)); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&!print_leveling_solution=7 Point Disk", null)); - Assert.IsFalse(profile.ParseShowString("has_hardware_leveling&print_leveling_solution=3 Point Plane", null)); - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&!print_leveling_solution=3 Point Plane", null)); - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=7 Point Disk", null)); + 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", null)); - Assert.IsFalse(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>2", null)); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>1", null)); - Assert.IsTrue(profile.ParseShowString("!has_hardware_leveling&print_leveling_solution=3 Point Plane&extruder_count>0", null)); + 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")); } }