Merge pull request #5301 from larsbrubaker/main

main
This commit is contained in:
Lars Brubaker 2022-04-19 10:31:36 -07:00 committed by GitHub
commit f2ff09579a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 218 additions and 178 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

@ -387,6 +387,8 @@ namespace MatterHackers.MatterControl
public event EventHandler<WorkspacesChangedEventArgs> WorkspacesChanged;
public event EventHandler ReloadSettingsTriggered;
public void ReloadSettings(PrinterConfig printer)
{
var printerTabPage = this.MainView.Descendants<PrinterTabPage>().Where(page => page.Printer == printer).FirstOrDefault();
@ -415,6 +417,8 @@ namespace MatterHackers.MatterControl
sideBar.ReplacePage("Slice Settings", new SliceSettingsWidget(printer, settingsContext, Theme));
ApplicationController.Instance.IsReloading = false;
}
ReloadSettingsTriggered?.Invoke(null, null);
}
public static Action WebRequestFailed;

View file

@ -92,8 +92,79 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
public string ThumbnailName => nameof(PartSettingsObject3D);
private void UpdateSettingsDisplay(PrinterConfig containingPrinter)
{
if (containingPrinter != null)
{
this.Invalidate(InvalidateType.DisplayValues);
ApplicationController.Instance.ReloadSettings(containingPrinter);
// refresh the properties pannel by unselecting and selecting
containingPrinter.Bed.Scene.SelectedItem = null;
containingPrinter.Bed.Scene.SelectedItem = this;
}
}
public static HashSet<string> settingsToIgnore = new HashSet<string>()
{
SettingsKey.spiral_vase,
SettingsKey.layer_to_pause,
SettingsKey.perimeter_acceleration,
SettingsKey.default_acceleration,
SettingsKey.t1_extrusion_move_speed_multiplier,
SettingsKey.bed_surface,
SettingsKey.brim_extruder,
SettingsKey.support_material_extruder,
SettingsKey.support_material_interface_extruder,
SettingsKey.material_color,
SettingsKey.material_color_1,
SettingsKey.material_color_2,
SettingsKey.material_color_3,
SettingsKey.filament_diameter,
SettingsKey.filament_density,
SettingsKey.filament_cost,
SettingsKey.temperature,
SettingsKey.temperature1,
SettingsKey.temperature2,
SettingsKey.temperature3,
SettingsKey.bed_temperature,
SettingsKey.bed_temperature_blue_tape,
SettingsKey.bed_temperature_buildtak,
SettingsKey.bed_temperature_garolite,
SettingsKey.bed_temperature_glass,
SettingsKey.bed_temperature_kapton,
SettingsKey.bed_temperature_pei,
SettingsKey.bed_temperature_pp,
SettingsKey.inactive_cool_down,
SettingsKey.seconds_to_reheat,
};
public IEnumerable<EditorButtonData> GetEditorButtonsData()
{
var containingPrinter = this.ContainingPrinter();
if (containingPrinter != null)
{
yield return new EditorButtonData()
{
Action = () =>
{
var settingsContext = new SettingsContext(containingPrinter, null, NamedSettingsLayers.All);
foreach (var setting in containingPrinter.Settings.UserLayer)
{
var data = SliceSettingsRow.GetStyleData(containingPrinter, ApplicationController.Instance.Theme, settingsContext, setting.Key, true);
if (!settingsToIgnore.Contains(setting.Key) && data.showRestoreButton)
{
Overrides[setting.Key] = setting.Value;
}
}
UpdateSettingsDisplay(containingPrinter);
},
Name = "Add User Overrides".Localize(),
HelpText = "Copy in all current user overides".Localize()
};
}
if (ApplicationController.Instance.UserHasPermission(this))
{
yield return new EditorButtonData()
@ -101,7 +172,14 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
Action = () =>
{
var settings = new PrinterSettings();
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;
@ -114,15 +192,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
editMaterialPresetsPage.Closed += (s, e2) =>
{
ApplicationController.Instance.AcitveSlicePresetsPage = null;
var containingPrinter = this.ContainingPrinter();
if (containingPrinter != null)
{
this.Invalidate(InvalidateType.DisplayValues);
ApplicationController.Instance.ReloadSettings(containingPrinter);
// refresh the properties pannel by unselecting and selecting
containingPrinter.Bed.Scene.SelectedItem = null;
containingPrinter.Bed.Scene.SelectedItem = this;
}
UpdateSettingsDisplay(containingPrinter);
};
ApplicationController.Instance.AcitveSlicePresetsPage = editMaterialPresetsPage;

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

@ -68,6 +68,19 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
var sliceSettingsWidget = CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer);
contentRow.AddChild(sliceSettingsWidget);
void ReloadSettings(object s, EventArgs e)
{
var newSliceSettingsWidget = CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer);
contentRow.ReplaceChild(sliceSettingsWidget, newSliceSettingsWidget);
contentRow.Width += 1;
contentRow.Width -= 1;
sliceSettingsWidget = newSliceSettingsWidget;
}
ApplicationController.Instance.ReloadSettingsTriggered += ReloadSettings;
this.Closed += (s, e) => ApplicationController.Instance.ReloadSettingsTriggered -= ReloadSettings;
GuiWidget duplicateButton = null;
if (presetsContext.SetAsActive != null)

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;
}
}

View file

@ -247,6 +247,9 @@ Translated:Add to Queue
English:Add to Selection
Translated:Add to Selection
English:Add User Overrides
Translated:Add User Overrides
English:Additional Printing Errors
Translated:Additional Printing Errors
@ -1042,6 +1045,9 @@ Translated:Copy everything but hardware specific calibration settings
English:Copy extrusions data
Translated:Copy extrusions data
English:Copy in all current user overides
Translated:Copy in all current user overides
English:Copy Mesh
Translated:Copy Mesh

@ -1 +1 @@
Subproject commit 7ea2bbbf3634ab37698640cc184ac2d2755cffbe
Subproject commit 303fb1cf3baada642aaa46eb4d2e9fd546045bf7