Merge pull request #5304 from larsbrubaker/main
Better updating of setting when part settings object on bed
This commit is contained in:
commit
8d7d313bb9
6 changed files with 94 additions and 17 deletions
|
|
@ -69,15 +69,19 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
private PrinterSettingsLayer sceneOverrides = new PrinterSettingsLayer();
|
||||
|
||||
private bool watingToCheckSceneLayer;
|
||||
|
||||
private PrinterSettingsLayer GetSceneLayer()
|
||||
{
|
||||
var scene = Bed?.Scene;
|
||||
if (scene != null)
|
||||
{
|
||||
var foundPartSettings = false;
|
||||
var currentSceneOverrides = new PrinterSettingsLayer();
|
||||
// accumulate all the scene overrides ordered by their names, which is the order they will be in the design tree
|
||||
foreach (var partSettingsObject in scene.DescendantsAndSelf().Where(c => c is PartSettingsObject3D).OrderBy(i => i.Name))
|
||||
{
|
||||
foundPartSettings = true;
|
||||
var settings = ((PartSettingsObject3D)partSettingsObject).Overrides;
|
||||
foreach (var setting in settings)
|
||||
{
|
||||
|
|
@ -96,6 +100,16 @@ namespace MatterHackers.MatterControl
|
|||
Settings.DeactivateConflictingUserOverrides(sceneOverrides);
|
||||
}
|
||||
|
||||
if (foundPartSettings && !watingToCheckSceneLayer)
|
||||
{
|
||||
watingToCheckSceneLayer = true;
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
watingToCheckSceneLayer = false;
|
||||
GetSceneLayer();
|
||||
}, .5);
|
||||
}
|
||||
|
||||
// return the current set
|
||||
return sceneOverrides;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ either expressed or implied, of the FreeBSD Project.
|
|||
*/
|
||||
|
||||
using MatterHackers.Agg.Platform;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
|
|
@ -47,6 +48,17 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
|
|||
public PartSettingsObject3D()
|
||||
{
|
||||
Name = "Part Settings".Localize();
|
||||
|
||||
// Once we are done loading (json load will happen after creation)
|
||||
// Make sure any settings are updated
|
||||
UiThread.RunOnIdle(() =>
|
||||
{
|
||||
// check if the object is part of the scene (it could just be a memory copy)
|
||||
if (Parent != null)
|
||||
{
|
||||
UpdateSettingsDisplay();
|
||||
}
|
||||
}, .5);
|
||||
}
|
||||
|
||||
public PrinterSettingsLayer Overrides { get; set; } = new PrinterSettingsLayer();
|
||||
|
|
@ -93,15 +105,22 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
|
|||
|
||||
public string ThumbnailName => nameof(PartSettingsObject3D);
|
||||
|
||||
private void UpdateSettingsDisplay(PrinterConfig containingPrinter)
|
||||
private void UpdateSettingsDisplay()
|
||||
{
|
||||
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;
|
||||
// this will check if the current scene layer is the same as the last update
|
||||
containingPrinter.Settings.GetSceneLayer();
|
||||
// ApplicationController.Instance.ReloadSettings(containingPrinter);
|
||||
|
||||
if (containingPrinter.Bed.Scene.SelectedItem == this)
|
||||
{
|
||||
// refresh the properties pannel by unselecting and selecting
|
||||
containingPrinter.Bed.Scene.SelectedItem = null;
|
||||
containingPrinter.Bed.Scene.SelectedItem = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -137,6 +156,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
|
|||
SettingsKey.bed_temperature_pp,
|
||||
SettingsKey.inactive_cool_down,
|
||||
SettingsKey.seconds_to_reheat,
|
||||
SettingsKey.z_offset,
|
||||
};
|
||||
|
||||
public IEnumerable<EditorButtonData> GetEditorButtonsData()
|
||||
|
|
@ -149,13 +169,14 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
|
|||
Action = () =>
|
||||
{
|
||||
var settingsContext = new SettingsContext(containingPrinter, null, NamedSettingsLayers.All);
|
||||
foreach (var setting in containingPrinter.Settings.UserLayer)
|
||||
foreach (var setting in containingPrinter.Settings.UserLayer.ToList())
|
||||
{
|
||||
var data = SliceSettingsRow.GetStyleData(containingPrinter, ApplicationController.Instance.Theme, settingsContext, setting.Key, true);
|
||||
|
||||
if (!settingsToIgnore.Contains(setting.Key)
|
||||
&& data.showRestoreButton
|
||||
&& SliceSettingsLayouts.ContainesKey(SliceSettingsLayouts.SliceSettings(), setting.Key))
|
||||
&& SliceSettingsLayouts.ContainesKey(SliceSettingsLayouts.SliceSettings(), setting.Key)
|
||||
&& SliceSettingsTabView.CheckIfShouldBeShown(PrinterSettings.SettingsData[setting.Key], settingsContext))
|
||||
{
|
||||
Overrides[setting.Key] = setting.Value;
|
||||
}
|
||||
|
|
@ -163,14 +184,15 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
|
|||
|
||||
foreach (var setting in Overrides.ToList())
|
||||
{
|
||||
if (!SliceSettingsLayouts.ContainesKey(SliceSettingsLayouts.SliceSettings(), setting.Key))
|
||||
if (!SliceSettingsLayouts.ContainesKey(SliceSettingsLayouts.SliceSettings(), setting.Key)
|
||||
|| !SliceSettingsTabView.CheckIfShouldBeShown(PrinterSettings.SettingsData[setting.Key], settingsContext))
|
||||
{
|
||||
Overrides.Remove(setting.Key);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UpdateSettingsDisplay(containingPrinter);
|
||||
UpdateSettingsDisplay();
|
||||
},
|
||||
Name = "Add User Overrides".Localize(),
|
||||
HelpText = "Copy in all current user overides".Localize()
|
||||
|
|
@ -205,7 +227,7 @@ namespace MatterHackers.MatterControl.DesignTools.Operations
|
|||
editPartSettingsPresetsPage.Closed += (s, e2) =>
|
||||
{
|
||||
ApplicationController.Instance.AcitveSlicePresetsPage = null;
|
||||
UpdateSettingsDisplay(containingPrinter);
|
||||
UpdateSettingsDisplay();
|
||||
};
|
||||
|
||||
ApplicationController.Instance.AcitveSlicePresetsPage = editPartSettingsPresetsPage;
|
||||
|
|
|
|||
|
|
@ -471,7 +471,12 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
{
|
||||
var data = GetStyleData(printer, theme, settingsContext, settingData.SlicerConfigName, settingData.ShowAsOverride);
|
||||
|
||||
this.HighlightColor = data.highlightColor;
|
||||
if (this.HighlightColor != data.highlightColor)
|
||||
{
|
||||
this.HighlightColor = data.highlightColor;
|
||||
// make sur the value is also updated
|
||||
printer.Settings.OnSettingChanged(settingData.SlicerConfigName);
|
||||
}
|
||||
if (restoreButton != null)
|
||||
{
|
||||
restoreButton.Visible = data.showRestoreButton;
|
||||
|
|
|
|||
|
|
@ -33,8 +33,10 @@ using System.Linq;
|
|||
using System.Text.RegularExpressions;
|
||||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.MatterControl.CustomWidgets;
|
||||
using MatterHackers.MatterControl.DesignTools.Operations;
|
||||
using MatterHackers.MatterControl.Library.Widgets;
|
||||
using MatterHackers.MatterControl.PartPreviewWindow;
|
||||
using MatterHackers.VectorMath;
|
||||
|
|
@ -47,11 +49,15 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
|
||||
public SettingsContext SettingsContext { get; private set; }
|
||||
|
||||
public SliceSettingsWidget(PrinterConfig printer, SettingsContext settingsContext, ThemeConfig theme)
|
||||
private readonly PrinterConfig printer;
|
||||
|
||||
public SliceSettingsWidget(PrinterConfig printer, SettingsContext settingsContext, ThemeConfig theme)
|
||||
: base(FlowDirection.TopToBottom)
|
||||
{
|
||||
this.SettingsContext = settingsContext;
|
||||
|
||||
this.printer = printer;
|
||||
|
||||
settingsControlBar = new PresetsToolbar(printer, theme)
|
||||
{
|
||||
HAnchor = HAnchor.Stretch,
|
||||
|
|
@ -90,11 +96,41 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
databaseMRUKey: UserSettingsKey.SliceSettingsWidget_CurrentTab));
|
||||
}
|
||||
|
||||
var scene = printer?.Bed?.Scene;
|
||||
if(scene != null)
|
||||
{
|
||||
scene.Invalidated += Scene_Invalidated;
|
||||
|
||||
this.Closed += (s, e) => scene.Invalidated -= Scene_Invalidated;
|
||||
}
|
||||
|
||||
this.AnchorAll();
|
||||
}
|
||||
|
||||
// TODO: This should just proxy to settingsControlBar.Visible. Having local state and pushing values on event listeners seems off
|
||||
private bool showControlBar = true;
|
||||
private bool foundPartSettingsObject;
|
||||
|
||||
private void Scene_Invalidated(object sender, DataConverters3D.InvalidateArgs e)
|
||||
{
|
||||
var scene = printer?.Bed?.Scene;
|
||||
if (scene != null)
|
||||
{
|
||||
if (scene.DescendantsAndSelf().Where(c => c is PartSettingsObject3D).Any())
|
||||
{
|
||||
foundPartSettingsObject = true;
|
||||
// if there is a a PartSettingsObject than make sure the settings dislpay is updates on changes
|
||||
UpdateAllStyles();
|
||||
}
|
||||
else if (foundPartSettingsObject)
|
||||
{
|
||||
foundPartSettingsObject = false;
|
||||
// we just delete the last one be sure we still update
|
||||
UpdateAllStyles();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: This should just proxy to settingsControlBar.Visible. Having local state and pushing values on event listeners seems off
|
||||
private bool showControlBar = true;
|
||||
|
||||
public bool ShowControlBar
|
||||
{
|
||||
|
|
@ -530,7 +566,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
base.OnLoad(args);
|
||||
}
|
||||
|
||||
private static bool CheckIfShouldBeShown(SliceSettingData settingData, SettingsContext settingsContext)
|
||||
public static bool CheckIfShouldBeShown(SliceSettingData settingData, SettingsContext settingsContext)
|
||||
{
|
||||
bool settingShouldBeShown = settingData.Show?.Invoke(settingsContext.Printer.Settings) != false;
|
||||
if (settingsContext.ViewFilter == NamedSettingsLayers.Material || settingsContext.ViewFilter == NamedSettingsLayers.Quality || NamedSettingsLayers.Scene == settingsContext.ViewFilter)
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
Subproject commit a1708b04012fe859f1e42cabd8a23234f7912ef7
|
||||
Subproject commit ba51c5c12e8efa9adac7ab8e511bb2880041b198
|
||||
Loading…
Add table
Add a link
Reference in a new issue