From fa0e3e31071c7af991f4a60f9b07e983fa755ad5 Mon Sep 17 00:00:00 2001 From: John Lewin Date: Sat, 30 Apr 2016 18:18:15 -0700 Subject: [PATCH] Validate settings against properties.json rather than BaseLayer - Fixes #699 --- .../Settings/SettingsProfile.cs | 24 ++++++++++++++----- SlicerConfiguration/SliceSettingsWidget.cs | 2 +- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/SlicerConfiguration/Settings/SettingsProfile.cs b/SlicerConfiguration/Settings/SettingsProfile.cs index 65cb65756..2f7c8fe12 100644 --- a/SlicerConfiguration/Settings/SettingsProfile.cs +++ b/SlicerConfiguration/Settings/SettingsProfile.cs @@ -48,6 +48,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration using SettingsDictionary = Dictionary; using DataStorage; using Agg.PlatformAbstract; + using Newtonsoft.Json.Linq; public class SettingsProfile { private static string configFileExtension = "slice"; @@ -94,12 +95,6 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - public bool InBaseConfig(string name) - { - //Check whether the default settings (layer 0) contain a settings definition - return BaseLayer.ContainsKey(name); - } - internal void RunInTransaction(Action action) { // TODO: Implement RunInTransaction @@ -911,6 +906,23 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public string Model => layeredProfile.GetValue("MatterControl.Model"); + HashSet knownSettings = null; + public HashSet KnownSettings + { + get + { + if (knownSettings == null) + { + string propertiesJson = StaticData.Instance.ReadAllText(Path.Combine("SliceSettings", "Properties.json")); + var settingsData = JArray.Parse(propertiesJson); + + knownSettings = new HashSet(settingsData.Select(s => s["SlicerConfigName"].Value())); + } + + return knownSettings; + } + } + public string ManualMovementSpeeds() { return layeredProfile.GetValue("MatterControl.ManualMovementSpeeds"); diff --git a/SlicerConfiguration/SliceSettingsWidget.cs b/SlicerConfiguration/SliceSettingsWidget.cs index 86e5815b4..5f3d0e096 100644 --- a/SlicerConfiguration/SliceSettingsWidget.cs +++ b/SlicerConfiguration/SliceSettingsWidget.cs @@ -637,7 +637,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration settingsRow2.AddChild(unitsArea); settingsRow2.AddChild(restoreArea); - if (!ActiveSliceSettings.Instance.InBaseConfig(settingData.SlicerConfigName)) + if (!ActiveSliceSettings.Instance.KnownSettings.Contains(settingData.SlicerConfigName)) { // the setting we think we are adding is not in the config.ini it may have been deprecated TextWidget settingName = new TextWidget(String.Format("Setting '{0}' not found in config.ini", settingData.SlicerConfigName));