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
This commit is contained in:
John Lewin 2018-09-06 07:58:02 -07:00
parent e2d4f53144
commit 7a102fffa2
3 changed files with 51 additions and 52 deletions

View file

@ -143,12 +143,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
}
/// <summary>
/// Order of precedence &, |, !, =
/// Determines if a given field should be shown given its filter - Order of precedence &, |, !, =
/// </summary>
/// <param name="unsplitSettings"></param>
/// <param name="layerCascade"></param>
/// <returns></returns>
public bool ParseShowString(string unsplitSettings, IEnumerable<PrinterSettingsLayer> 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)

View file

@ -84,7 +84,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
internal bool ParseShowString(string enableIfSet)
{
return printer.Settings.ParseShowString(enableIfSet, layerCascade);
return printer.Settings.ParseShowString(enableIfSet);
}
}
}

View file

@ -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"));
}
}