Improving part settings updating

Improving settings display (sharing code)
This commit is contained in:
Lars Brubaker 2022-04-19 09:50:45 -07:00
parent d6996afb4b
commit 8d3a6cd3cb
5 changed files with 121 additions and 169 deletions

View file

@ -243,10 +243,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
static PrinterSettings()
{
// Convert settings array into dictionary on initial load using settings key (SlicerConfigName)
PrinterSettings.SettingsData = SliceSettingsFields.AllSettings().ToDictionary(s => s.SlicerConfigName);
// Convert settings array into dictionary on initial load using settings key (SlicerConfigName)
SettingsData = SliceSettingsFields.AllSettings().ToDictionary(s => s.SlicerConfigName);
PrinterSettings.Layout = new SettingsLayout();
Layout = new SettingsLayout();
Empty = new PrinterSettings() { ID = "EmptyProfile" };
Empty.UserLayer[SettingsKey.printer_name] = "Empty Printer";
@ -339,7 +339,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
{
var settingsLayer = new PrinterSettingsLayer();
foreach (var settingsData in PrinterSettings.SettingsData.Values)
foreach (var settingsData in SettingsData.Values)
{
settingsLayer[settingsData.SlicerConfigName] = settingsData.DefaultValue;
}
@ -591,8 +591,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
return null;
}
int documentVersion = jObject?.GetValue("DocumentVersion")?.Value<int>() ?? PrinterSettings.LatestVersion;
if (documentVersion < PrinterSettings.LatestVersion)
int documentVersion = jObject?.GetValue("DocumentVersion")?.Value<int>() ?? LatestVersion;
if (documentVersion < LatestVersion)
{
printerProfilePath = ProfileMigrations.MigrateDocument(printerProfilePath, documentVersion);
}
@ -623,7 +623,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
keysToRetain.Remove(SettingsKey.print_leveling_enabled);
// Iterate all items that have .ShowAsOverride = false and conditionally add to the retention list
foreach (var item in PrinterSettings.SettingsData.Values.Where(settingsItem => settingsItem.ShowAsOverride == false))
foreach (var item in SettingsData.Values.Where(settingsItem => settingsItem.ShowAsOverride == false))
{
switch (item.SlicerConfigName)
{
@ -659,10 +659,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
// Restore user overrides if a non-user override is being cleared
if (layer != null && layer != UserLayer)
{
RestoreUserOverride(layer, settingsKey);
RestoreUserOverride(settingsKey);
}
if (PrinterSettings.SettingsData.TryGetValue(settingsKey, out SliceSettingData settingData))
if (SettingsData.TryGetValue(settingsKey, out SliceSettingData settingData))
{
if (settingData.DataEditType == SliceSettingData.DataEditTypes.CHECK_BOX)
{
@ -744,7 +744,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
foreach (var settingsKey in settingsLayer.Keys)
{
StashUserOverride(settingsLayer, settingsKey);
StashUserOverride(settingsKey);
}
}
@ -872,6 +872,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
{
layerName = "Quality";
}
else if (layer == this.SceneLayer)
{
layerName = "Scene";
}
return (value, layerName);
}
@ -883,7 +887,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
public bool IsActive(string canonicalSettingsName)
{
return this.Slicer.Exports.ContainsKey(canonicalSettingsName)
|| (this.Slicer.PrinterType == PrinterType.FFF && PrinterSettings.DefaultFFFSettings.Contains(canonicalSettingsName));
|| (this.Slicer.PrinterType == PrinterType.FFF && DefaultFFFSettings.Contains(canonicalSettingsName));
}
public bool IsOverride(string sliceSetting, IEnumerable<PrinterSettingsLayer> layers)
@ -984,7 +988,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
var sourceFilter = rawSourceFilter.Where(layer => layer != null);
foreach (var keyName in PrinterSettings.KnownSettings)
foreach (var keyName in KnownSettings)
{
if (settingsToImport.Contains(keyName))
{
@ -1098,7 +1102,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
foreach (var settingsKey in settingsLayer.Keys)
{
RestoreUserOverride(settingsLayer, settingsKey);
RestoreUserOverride(settingsKey);
}
}
@ -1107,7 +1111,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
// Stash user overrides if a non-user override is being set
if (layer != null && layer != UserLayer)
{
StashUserOverride(layer, settingsKey);
StashUserOverride(settingsKey);
}
else
{
@ -1164,7 +1168,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
private static HashSet<string> LoadSettingsNamesFromPropertiesJson()
{
return new HashSet<string>(PrinterSettings.SettingsData.Keys);
return new HashSet<string>(SettingsData.Keys);
}
private PrinterSettingsLayer GetQualityLayer(string layerID)
@ -1200,7 +1204,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
};
}
private void RestoreUserOverride(PrinterSettingsLayer settingsLayer, string settingsKey)
private void RestoreUserOverride(string settingsKey)
{
if (StagedUserSettings.TryGetValue(settingsKey, out string stagedUserOverride))
{
@ -1212,7 +1216,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
/// <summary>
/// Move conflicting user overrides to the temporary staging area, allowing presets values to take effect
/// </summary>
private void StashUserOverride(PrinterSettingsLayer settingsLayer, string settingsKey)
private void StashUserOverride(string settingsKey)
{
if (this.UserLayer.TryGetValue(settingsKey, out string userOverride))
{
@ -1237,7 +1241,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
var bigStringForHashCode = new StringBuilder();
// Loop over all known settings
foreach (var keyValue in PrinterSettings.SettingsData)
foreach (var keyValue in SettingsData)
{
// Add key/value to accumulating string for hash
if (keyValue.Value?.RebuildGCodeOnChange == true)

View file

@ -172,9 +172,14 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
Action = () =>
{
var settings = new PrinterSettings();
// set this after the PrinterConfig is constructed to change it to overrides
settings.GetSceneLayer = () => Overrides;
var printer = new PrinterConfig(settings);
if (containingPrinter != null)
{
printer = containingPrinter;
}
// set this after the PrinterConfig is constructed to change it to overrides
// set this after the PrinterConfig is constructed to change it to overrides
settings.GetSceneLayer = () => Overrides;

View file

@ -47,6 +47,7 @@ using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.DesignTools.EditableTypes;
using MatterHackers.MatterControl.DesignTools.Operations;
using MatterHackers.MatterControl.Library.Widgets;
using MatterHackers.MatterControl.PartPreviewWindow;
using MatterHackers.MatterControl.PartPreviewWindow.View3D;
using MatterHackers.MatterControl.SlicerConfiguration;
@ -568,87 +569,15 @@ namespace MatterHackers.MatterControl.DesignTools
}
else if (propertyValue is PrinterSettingsLayer printerSettingsLayer)
{
var settingsBackground = new GuiWidget()
{
Name = "Background",
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Fit,
Margin = 7,
};
var printerProfile = new PrinterSettings();
rowContainer = AddMaterialWidget.CreateSetingsList(printerProfile, printerSettingsLayer, theme);
var settingsHolder = settingsBackground.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom)
{
Name = "Holder",
HAnchor = HAnchor.Stretch,
});
settingsHolder.AddChild(new HorizontalLine(Color.Green)
rowContainer.Children.First().AddChild(new HorizontalLine(Color.Green)
{
Height = 4 * GuiWidget.DeviceScale
});
}, 0);
var settingsCover = settingsBackground.AddChild(new GuiWidget()
{
Name = "Cover",
HAnchor = HAnchor.Stretch,
BackgroundColor = theme.BackgroundColor.WithAlpha(100),
});
settingsHolder.SizeChanged += (s5, e5) =>
{
settingsCover.Height = settingsHolder.Height;
};
rowContainer = settingsBackground;
var printerProfile = new PrinterSettings();
printerProfile.OemLayer = new PrinterSettingsLayer();
// move all the settings to the oem layer
var layout = new List<(int index, string category, string group, string key)>();
foreach (var kvp in printerSettingsLayer)
{
printerProfile.OemLayer[kvp.Key] = kvp.Value;
layout.Add(SliceSettingsLayouts.GetLayout(kvp.Key));
}
var printer = new PrinterConfig(printerProfile);
var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All);
var tabIndex = 0;
var orderedSettings = layout.OrderBy(i => i.index).Select(i => (i.category, i.key));
var lastCategory = "";
foreach ((string category, string key) setting in orderedSettings)
{
if (setting.category == "")
{
continue;
}
if (setting.category != lastCategory)
{
lastCategory = setting.category;
// add a new setting header
settingsHolder.AddChild(new TextWidget(setting.category.Localize() + " " + "Settings".Localize() + ":", 0, 0, bold: true)
{
TextColor = theme.TextColor,
Margin = new BorderDouble(0, 5, 0, 7)
});
}
var settingsData = PrinterSettings.SettingsData[setting.key];
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex);
if (row is SliceSettingsRow settingsRow)
{
settingsRow.ArrowDirection = ArrowDirection.Left;
settingsRow.Enabled = true;
}
settingsHolder.AddChild(row);
}
settingsHolder.AddChild(new HorizontalLine(Color.Green)
rowContainer.Children.First().AddChild(new HorizontalLine(Color.Green)
{
Height = 4 * GuiWidget.DeviceScale
});

View file

@ -257,80 +257,13 @@ namespace MatterHackers.MatterControl.Library.Widgets
});
}
var settingsBackground = new GuiWidget()
{
Name = "Background",
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Fit
};
var settingsHolder = settingsBackground.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom)
{
Name = "Holder",
HAnchor = HAnchor.Stretch,
});
var settingsCover = settingsBackground.AddChild(new GuiWidget()
{
Name = "Cover",
HAnchor = HAnchor.Stretch,
});
settingsHolder.SizeChanged += (s5, e5) =>
{
settingsCover.Height = settingsHolder.Height;
};
printerDetails.ProductDataContainer.AddChild(settingsBackground);
var printerProfile = PrinterSettings.LoadFile(SelectedMaterial.Path);
printerProfile.OemLayer = new PrinterSettingsLayer();
// move all the settings to the oem layer
var layout = new List<(int index, string category, string group, string key)>();
foreach (var kvp in printerProfile.MaterialLayers[0])
{
printerProfile.OemLayer[kvp.Key] = kvp.Value;
layout.Add(SliceSettingsLayouts.GetLayout(kvp.Key));
}
var printerSettingsLayer = printerProfile.MaterialLayers[0];
printerProfile.MaterialLayers.RemoveAt(0);
printerProfile.MaterialLayers.Add(new PrinterSettingsLayer());
printerProfile.MaterialLayers[0].Clear();
var printer = new PrinterConfig(printerProfile);
var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All);
var tabIndex = 0;
var orderedSettings = layout.OrderBy(i => i.index).Select(i => (i.category, i.key));
var lastCategory = "";
foreach ((string category, string key) setting in orderedSettings)
{
if (setting.category == "")
{
continue;
}
if (setting.category != lastCategory)
{
lastCategory = setting.category;
// add a new setting header
settingsHolder.AddChild(new TextWidget(setting.category.Localize() + " " + "Settings".Localize() + ":", 0, 0, bold: true)
{
TextColor = theme.TextColor,
Margin = new BorderDouble(0, 5, 0, 7)
});
}
var settingsData = PrinterSettings.SettingsData[setting.key];
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex);
if (row is SliceSettingsRow settingsRow)
{
settingsRow.ArrowDirection = ArrowDirection.Left;
settingsRow.Enabled = true;
}
settingsHolder.AddChild(row);
}
var settingsBackground = CreateSetingsList(printerProfile, printerSettingsLayer, theme);
printerDetails.ProductDataContainer.AddChild(settingsBackground);
};
nextButtonEnabled(treeView.SelectedNode != null);
@ -342,5 +275,82 @@ namespace MatterHackers.MatterControl.Library.Widgets
nextButtonEnabled(false);
}
}
public static GuiWidget CreateSetingsList(PrinterSettings printerProfile, PrinterSettingsLayer printerSettingsLayer, ThemeConfig theme)
{
var settingsBackground = new GuiWidget()
{
Name = "Background",
HAnchor = HAnchor.Stretch,
VAnchor = VAnchor.Fit,
Margin = 7,
};
var settingsHolder = settingsBackground.AddChild(new FlowLayoutWidget(FlowDirection.TopToBottom)
{
Name = "Holder",
HAnchor = HAnchor.Stretch,
});
var settingsCover = settingsBackground.AddChild(new GuiWidget()
{
Name = "Cover",
HAnchor = HAnchor.Stretch,
BackgroundColor = theme.BackgroundColor.WithAlpha(100),
});
settingsHolder.SizeChanged += (s5, e5) =>
{
settingsCover.Height = settingsHolder.Height;
};
printerProfile.OemLayer = new PrinterSettingsLayer();
// move all the settings to the oem layer
var layout = new List<(int index, string category, string group, string key)>();
foreach (var kvp in printerSettingsLayer)
{
printerProfile.OemLayer[kvp.Key] = kvp.Value;
layout.Add(SliceSettingsLayouts.GetLayout(kvp.Key));
}
var printer = new PrinterConfig(printerProfile);
var settingsContext = new SettingsContext(printer, null, NamedSettingsLayers.All);
var tabIndex = 0;
var orderedSettings = layout.OrderBy(i => i.index).Select(i => (i.category, i.key));
var lastCategory = "";
foreach ((string category, string key) setting in orderedSettings)
{
if (setting.category == "")
{
continue;
}
if (setting.category != lastCategory)
{
lastCategory = setting.category;
// add a new setting header
settingsHolder.AddChild(new TextWidget(setting.category.Localize() + " " + "Settings".Localize() + ":", 0, 0, bold: true)
{
TextColor = theme.TextColor,
Margin = new BorderDouble(0, 5, 0, 7)
});
}
var settingsData = PrinterSettings.SettingsData[setting.key];
var row = SliceSettingsTabView.CreateItemRow(settingsData, settingsContext, printer, theme, ref tabIndex);
if (row is SliceSettingsRow settingsRow)
{
settingsRow.ArrowDirection = ArrowDirection.Left;
settingsRow.Enabled = true;
}
settingsHolder.AddChild(row);
}
return settingsBackground;
}
}
}

View file

@ -511,6 +511,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
{
highlightColor = theme.PresetColors.QualityPreset;
}
else if (layerName.StartsWith("Scene"))
{
highlightColor = theme.PresetColors.ScenePreset;
}
else
{
highlightColor = Color.Transparent;
@ -542,7 +546,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
break;
case NamedSettingsLayers.Scene:
highlightColor = theme.PresetColors.ScenePreset;
showRestoreButton = true;
showRestoreButton = false;
break;
}
}