From 294df0a588dac8eca4b506cb04fe3142e3ef44cc Mon Sep 17 00:00:00 2001 From: John Lewin Date: Sun, 17 Sep 2017 01:11:18 -0700 Subject: [PATCH] Convert ActiveSliceSettings usage from static to local references --- ActionBar/TemperatureWidgetExtruder.cs | 2 +- .../PrintLeveling/PrintLevelPages.cs | 2 +- ConfigurationPage/RunningMacroPage.cs | 22 +++--- CustomWidgets/ExportPrintItemPage.cs | 1 - PartPreviewWindow/GCodeDetails.cs | 14 ++-- PartPreviewWindow/PartPreviewContent.cs | 5 +- PartPreviewWindow/PlusTabPage.cs | 2 +- PartPreviewWindow/PrinterTabBase.cs | 5 +- PartPreviewWindow/PrinterTabPage.cs | 24 ++++++- PartPreviewWindow/View3D/PrinterActionsBar.cs | 2 +- PartPreviewWindow/View3D/View3DWidget.cs | 26 ++----- PartPreviewWindow/ViewGcodeBasic.cs | 14 ++-- .../Io/MacroProcessingStream.cs | 4 +- .../ControlWidgets/AdjustmentControls.cs | 14 ++-- .../ControlWidgets/PowerControls.cs | 45 ++++++------ PrinterControls/ManualPrinterControls.cs | 23 +++--- PrinterControls/XYZJogControls.cs | 16 ++--- SlicerConfiguration/PresetSelectorWidget.cs | 70 ++++++++++--------- SlicerConfiguration/PresetsToolbar.cs | 11 ++- .../Settings/ActiveSliceSettings.cs | 6 +- .../Settings/SettingsHelpers.cs | 18 ++--- SlicerConfiguration/SettingsContext.cs | 16 +++-- .../SlicePresetsWindow/SlicePresetsWindow.cs | 13 ++-- .../SliceSettingsOverflowDropdown.cs | 12 ++-- SlicerConfiguration/SliceSettingsRow.cs | 16 +++-- SlicerConfiguration/SliceSettingsWidget.cs | 18 ++--- Tests/MatterControl.Tests/SceneTests.cs | 1 + 27 files changed, 205 insertions(+), 197 deletions(-) diff --git a/ActionBar/TemperatureWidgetExtruder.cs b/ActionBar/TemperatureWidgetExtruder.cs index 73cb113a0..021e4cdcc 100644 --- a/ActionBar/TemperatureWidgetExtruder.cs +++ b/ActionBar/TemperatureWidgetExtruder.cs @@ -295,7 +295,7 @@ namespace MatterHackers.MatterControl.ActionBar container.AddChild(graph); // put in the material selector - var presetsSelector = new PresetSelectorWidget(string.Format($"{"Material".Localize()} {hotendIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, hotendIndex, true) + var presetsSelector = new PresetSelectorWidget(printer, string.Format($"{"Material".Localize()} {hotendIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, hotendIndex, true) { Margin = 0, BackgroundColor = RGBA_Bytes.Transparent, diff --git a/ConfigurationPage/PrintLeveling/PrintLevelPages.cs b/ConfigurationPage/PrintLeveling/PrintLevelPages.cs index d284102dd..88db828dc 100644 --- a/ConfigurationPage/PrintLeveling/PrintLevelPages.cs +++ b/ConfigurationPage/PrintLeveling/PrintLevelPages.cs @@ -54,7 +54,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling : base(printer, pageDescription, instructionsText) { int extruderIndex = 0; - var materialSelector = new PresetSelectorWidget(string.Format($"{"Material".Localize()} {extruderIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, extruderIndex); + var materialSelector = new PresetSelectorWidget(printer, string.Format($"{"Material".Localize()} {extruderIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, extruderIndex); materialSelector.BackgroundColor = RGBA_Bytes.Transparent; materialSelector.Margin = new BorderDouble(0, 0, 0, 15); topToBottomControls.AddChild(materialSelector); diff --git a/ConfigurationPage/RunningMacroPage.cs b/ConfigurationPage/RunningMacroPage.cs index 42ba33f07..962e8d669 100644 --- a/ConfigurationPage/RunningMacroPage.cs +++ b/ConfigurationPage/RunningMacroPage.cs @@ -48,37 +48,37 @@ namespace MatterHackers.MatterControl.PrinterControls private TextWidget progressBarText; private long timeToWaitMs; - PrinterConnection printerConnection; + private PrinterConfig printer; - public RunningMacroPage(PrinterConnection printerConnection, MacroCommandData macroData) + public RunningMacroPage(PrinterConfig printer, MacroCommandData macroData) : base("Cancel") { - this.printerConnection = printerConnection; + this.printer = printer; this.WindowTitle = "Running Macro".Localize(); this.HeaderText = macroData.title; cancelButton.Click += (s, e) => { - printerConnection.MacroCancel(); + printer.Connection.MacroCancel(); }; if (macroData.showMaterialSelector) { int extruderIndex = 0; - var materialSelector = new PresetSelectorWidget(string.Format($"{"Material".Localize()} {extruderIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, extruderIndex); + var materialSelector = new PresetSelectorWidget(printer, string.Format($"{"Material".Localize()} {extruderIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, extruderIndex); materialSelector.BackgroundColor = RGBA_Bytes.Transparent; materialSelector.Margin = new BorderDouble(0, 0, 0, 15); contentRow.AddChild(materialSelector); } - printerConnection.WroteLine.RegisterEvent(LookForTempRequest, ref unregisterEvents); + printer.Connection.WroteLine.RegisterEvent(LookForTempRequest, ref unregisterEvents); if (macroData.waitOk | macroData.expireTime > 0) { Button okButton = textImageButtonFactory.Generate("Continue".Localize()); okButton.Click += (s, e) => { - printerConnection.MacroContinue(); + printer.Connection.MacroContinue(); UiThread.RunOnIdle(() => WizardWindow?.Close()); }; @@ -139,7 +139,7 @@ namespace MatterHackers.MatterControl.PrinterControls { if(e.OsEvent) { - printerConnection.MacroCancel(); + printer.Connection.MacroCancel(); } unregisterEvents?.Invoke(this, null); @@ -166,7 +166,7 @@ namespace MatterHackers.MatterControl.PrinterControls if(stringEvent != null && stringEvent.Data.Contains("M104")) { - startingTemp = printerConnection.GetActualHotendTemperature(0); + startingTemp = printer.Connection.GetActualHotendTemperature(0); UiThread.RunOnIdle(ShowTempChangeProgress); } } @@ -174,8 +174,8 @@ namespace MatterHackers.MatterControl.PrinterControls private void ShowTempChangeProgress() { progressBar.Visible = true; - double targetTemp = printerConnection.GetTargetHotendTemperature(0); - double actualTemp = printerConnection.GetActualHotendTemperature(0); + double targetTemp = printer.Connection.GetTargetHotendTemperature(0); + double actualTemp = printer.Connection.GetActualHotendTemperature(0); double totalDelta = targetTemp - startingTemp; double currentDelta = actualTemp - startingTemp; double ratioDone = totalDelta != 0 ? (currentDelta / totalDelta) : 1; diff --git a/CustomWidgets/ExportPrintItemPage.cs b/CustomWidgets/ExportPrintItemPage.cs index c35adbc3f..6842d8362 100644 --- a/CustomWidgets/ExportPrintItemPage.cs +++ b/CustomWidgets/ExportPrintItemPage.cs @@ -69,7 +69,6 @@ namespace MatterHackers.MatterControl var commonMargin = new BorderDouble(4, 2); bool isFirstItem = true; - // GCode export bool showExportGCodeButton = ActiveSliceSettings.Instance.PrinterSelected; diff --git a/PartPreviewWindow/GCodeDetails.cs b/PartPreviewWindow/GCodeDetails.cs index e03630877..0d731087f 100644 --- a/PartPreviewWindow/GCodeDetails.cs +++ b/PartPreviewWindow/GCodeDetails.cs @@ -36,8 +36,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { private GCodeFile loadedGCode; - public GCodeDetails(GCodeFile loadedGCode) + private PrinterConfig printer; + public GCodeDetails(PrinterConfig printer, GCodeFile loadedGCode) { + this.printer = printer; this.loadedGCode = loadedGCode; } @@ -67,9 +69,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - public string FilamentUsed => string.Format("{0:0.0} mm", loadedGCode.GetFilamentUsedMm(ActiveSliceSettings.Instance.GetValue(SettingsKey.filament_diameter))); + public string FilamentUsed => string.Format("{0:0.0} mm", loadedGCode.GetFilamentUsedMm(printer.Settings.GetValue(SettingsKey.filament_diameter))); - public string FilamentVolume => string.Format("{0:0.00} cm³", loadedGCode.GetFilamentCubicMm(ActiveSliceSettings.Instance.GetValue(SettingsKey.filament_diameter)) / 1000); + public string FilamentVolume => string.Format("{0:0.00} cm³", loadedGCode.GetFilamentCubicMm(printer.Settings.GetValue(SettingsKey.filament_diameter)) / 1000); public string EstimatedMass => this.TotalMass <= 0 ? "Unknown" : string.Format("{0:0.00} g", this.TotalMass); @@ -79,8 +81,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { get { - double filamentDiameter = ActiveSliceSettings.Instance.GetValue(SettingsKey.filament_diameter); - double filamentDensity = ActiveSliceSettings.Instance.GetValue(SettingsKey.filament_density); + double filamentDiameter = printer.Settings.GetValue(SettingsKey.filament_diameter); + double filamentDensity = printer.Settings.GetValue(SettingsKey.filament_density); return loadedGCode.GetFilamentWeightGrams(filamentDiameter, filamentDensity); } @@ -90,7 +92,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { get { - double filamentCost = ActiveSliceSettings.Instance.GetValue(SettingsKey.filament_cost); + double filamentCost = printer.Settings.GetValue(SettingsKey.filament_cost); return this.TotalMass / 1000 * filamentCost; } } diff --git a/PartPreviewWindow/PartPreviewContent.cs b/PartPreviewWindow/PartPreviewContent.cs index 076aab017..5da77c45d 100644 --- a/PartPreviewWindow/PartPreviewContent.cs +++ b/PartPreviewWindow/PartPreviewContent.cs @@ -52,15 +52,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.AnchorAll(); - var activeSettings = ActiveSliceSettings.Instance; - var tabControl = ApplicationController.Instance.Theme.CreateTabControl(2); var separator = tabControl.Children().FirstOrDefault(); separator.BackgroundColor = ApplicationController.Instance.Theme.PrimaryTabFillColor; - string tabTitle = !activeSettings.PrinterSelected ? "Printer".Localize() : activeSettings.GetValue(SettingsKey.printer_name); - RGBA_Bytes selectedTabColor; if (!UserSettings.Instance.IsTouchScreen) { @@ -76,6 +72,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // Add a tab for the current printer if (ActiveSliceSettings.Instance.PrinterSelected) { + string tabTitle = ActiveSliceSettings.Instance.GetValue(SettingsKey.printer_name); printerTab = CreatePrinterTab(printerConfig, theme, tabTitle); tabControl.AddTab(printerTab); } diff --git a/PartPreviewWindow/PlusTabPage.cs b/PartPreviewWindow/PlusTabPage.cs index db062bb63..9c9bb8ef3 100644 --- a/PartPreviewWindow/PlusTabPage.cs +++ b/PartPreviewWindow/PlusTabPage.cs @@ -160,7 +160,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow var partTab = new MainTab( "New Part", "newPart" + tabControl.TabCount, - new PrinterTabBase(sceneContext, theme, "xxxxx"), + new PrinterTabBase(null, sceneContext, theme, "xxxxx"), "https://i.imgur.com/nkeYgfU.png"); theme.SetPrinterTabStyles(partTab); diff --git a/PartPreviewWindow/PrinterTabBase.cs b/PartPreviewWindow/PrinterTabBase.cs index 4aac4141f..626bca067 100644 --- a/PartPreviewWindow/PrinterTabBase.cs +++ b/PartPreviewWindow/PrinterTabBase.cs @@ -30,8 +30,6 @@ either expressed or implied, of the FreeBSD Project. using System; using MatterHackers.Agg; using MatterHackers.Agg.UI; -using MatterHackers.MatterControl.PrinterCommunication; -using MatterHackers.MatterControl.PrintQueue; using MatterHackers.MeshVisualizer; using MatterHackers.VectorMath; @@ -50,7 +48,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow protected FlowLayoutWidget topToBottom; protected FlowLayoutWidget leftToRight; - public PrinterTabBase(BedConfig sceneContext, ThemeConfig theme, string tabTitle) + public PrinterTabBase(PrinterConfig printer, BedConfig sceneContext, ThemeConfig theme, string tabTitle) : base (tabTitle) { this.sceneContext = sceneContext; @@ -82,6 +80,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // The 3D model view modelViewer = new View3DWidget( + printer, sceneContext, View3DWidget.AutoRotate.Disabled, viewControls3D, diff --git a/PartPreviewWindow/PrinterTabPage.cs b/PartPreviewWindow/PrinterTabPage.cs index 34847492c..db4590d02 100644 --- a/PartPreviewWindow/PrinterTabPage.cs +++ b/PartPreviewWindow/PrinterTabPage.cs @@ -58,7 +58,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private PrinterConfig printer; public PrinterTabPage(PrinterConfig printer, ThemeConfig theme, string tabTitle) - : base(printer.Bed, theme, tabTitle) + : base(printer, printer.Bed, theme, tabTitle) { this.printer = printer; modelViewer.meshViewerWidget.EditorMode = MeshViewerWidget.EditorType.Printer; @@ -147,7 +147,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.Invalidate(); }; - + currentLayerInfo = new ValueDisplayInfo("1000") { GetDisplayString = (value) => $"{value + 1}" @@ -355,6 +355,24 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } + // TODO: Moved from View3DWidget as printer specialized logic can't be in the generic base. Consider moving to model + private bool PartsAreInPrintVolume() + { + AxisAlignedBoundingBox allBounds = AxisAlignedBoundingBox.Empty; + foreach (var aabb in printer.Bed.Scene.Children.Select(item => item.GetAxisAlignedBoundingBox(Matrix4X4.Identity))) + { + allBounds += aabb; + } + + bool onBed = allBounds.minXYZ.z > -.001 && allBounds.minXYZ.z < .001; // really close to the bed + RectangleDouble bedRect = new RectangleDouble(0, 0, printer.Settings.GetValue(SettingsKey.bed_size).x, printer.Settings.GetValue(SettingsKey.bed_size).y); + bedRect.Offset(printer.Settings.GetValue(SettingsKey.print_center) - printer.Settings.GetValue(SettingsKey.bed_size) / 2); + + bool inBounds = bedRect.Contains(new Vector2(allBounds.minXYZ)) && bedRect.Contains(new Vector2(allBounds.maxXYZ)); + + return onBed && inBounds; + } + private void SetSliderSizes() { if (selectLayerSlider == null || modelViewer == null) @@ -597,7 +615,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow sideBar.AddPage( "Slice Settings".Localize(), new SliceSettingsWidget( + printer, new SettingsContext( + printer, null, SlicerConfiguration.NamedSettingsLayers.All))); } diff --git a/PartPreviewWindow/View3D/PrinterActionsBar.cs b/PartPreviewWindow/View3D/PrinterActionsBar.cs index a59c6d90c..be6d92b9f 100644 --- a/PartPreviewWindow/View3D/PrinterActionsBar.cs +++ b/PartPreviewWindow/View3D/PrinterActionsBar.cs @@ -130,7 +130,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow printerTabPage.ViewMode = PartViewMode.Layers3D; // HACK: directly fire method which previously ran on SlicingDone event on PrintItemWrapper - UiThread.RunOnIdle(printerTabPage.modelViewer.gcodeViewer.CreateAndAddChildren); + UiThread.RunOnIdle(() => printerTabPage.modelViewer.gcodeViewer.CreateAndAddChildren(printer)); } catch (Exception ex) { diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index a828b96fc..1d5730a28 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -135,7 +135,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private BedConfig sceneContext; - public View3DWidget(BedConfig sceneContext, AutoRotate autoRotate, ViewControls3D viewControls3D, ThemeConfig theme, OpenMode openMode = OpenMode.Viewing, MeshViewerWidget.EditorType editorType = MeshViewerWidget.EditorType.Part) + public View3DWidget(PrinterConfig printer, BedConfig sceneContext, AutoRotate autoRotate, ViewControls3D viewControls3D, ThemeConfig theme, OpenMode openMode = OpenMode.Viewing, MeshViewerWidget.EditorType editorType = MeshViewerWidget.EditorType.Part) { var smallMarginButtonFactory = theme.SmallMarginButtonFactory; @@ -177,7 +177,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow this.InteractionLayer.AddChild(meshViewerWidget); // The slice layers view - gcodeViewer = new ViewGcodeBasic(sceneContext, viewControls3D); + gcodeViewer = new ViewGcodeBasic(printer, sceneContext, viewControls3D); gcodeViewer.AnchorAll(); gcodeViewer.Visible = false; this.InteractionLayer.AddChild(gcodeViewer); @@ -2283,23 +2283,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - private bool PartsAreInPrintVolume() - { - AxisAlignedBoundingBox allBounds = AxisAlignedBoundingBox.Empty; - foreach (var aabb in Scene.Children.Select(item => item.GetAxisAlignedBoundingBox(Matrix4X4.Identity))) - { - allBounds += aabb; - } - - bool onBed = allBounds.minXYZ.z > -.001 && allBounds.minXYZ.z < .001; // really close to the bed - RectangleDouble bedRect = new RectangleDouble(0, 0, ActiveSliceSettings.Instance.GetValue(SettingsKey.bed_size).x, ActiveSliceSettings.Instance.GetValue(SettingsKey.bed_size).y); - bedRect.Offset(ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center) - ActiveSliceSettings.Instance.GetValue(SettingsKey.bed_size) / 2); - - bool inBounds = bedRect.Contains(new Vector2(allBounds.minXYZ)) && bedRect.Contains(new Vector2(allBounds.maxXYZ)); - - return onBed && inBounds; - } - private void OpenExportWindow() { var exportPage = new ExportPrintItemPage(new[] { new FileSystemFileItem(sceneContext.printItem.FileLocation) }); @@ -2452,8 +2435,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } })); - double buildHeight = ActiveSliceSettings.Instance.GetValue(SettingsKey.build_height); - if (buildHeight > 0) + if (sceneContext.BuildHeight > 0) { popupContainer.AddChild( this.theme.CreateCheckboxMenuItem( @@ -2469,7 +2451,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } })); } - + popupContainer.AddChild(new HorizontalLine()); var renderOptions = CreateRenderTypeRadioButtons(); diff --git a/PartPreviewWindow/ViewGcodeBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs index 5ca5e3b83..c712c6700 100644 --- a/PartPreviewWindow/ViewGcodeBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -53,15 +53,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow private string fileTooBigToLoad = "GCode file too big to preview ({0}).".Localize(); private BedConfig sceneContext; + private PrinterConfig printer; private ViewControls3D viewControls3D; - public ViewGcodeBasic(BedConfig sceneContext, ViewControls3D viewControls3D) + public ViewGcodeBasic(PrinterConfig printer, BedConfig sceneContext, ViewControls3D viewControls3D) { + this.printer = printer; this.sceneContext = sceneContext; this.viewControls3D = viewControls3D; - CreateAndAddChildren(); + CreateAndAddChildren(printer); ActiveSliceSettings.SettingChanged.RegisterEvent((s, e) => { @@ -69,16 +71,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { if (stringEvent.Data == "extruder_offset") { - sceneContext.GCodeRenderer?.Clear3DGCode(); + printer.Bed.GCodeRenderer?.Clear3DGCode(); } } }, ref unregisterEvents); // TODO: Why do we clear GCode on AdvancedControlsPanelReloading - assume some slice settings should invalidate. If so, code should be more specific and bound to slice settings changed - ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent((s, e) => sceneContext.GCodeRenderer?.Clear3DGCode(), ref unregisterEvents); + ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent((s, e) => printer.Bed.GCodeRenderer?.Clear3DGCode(), ref unregisterEvents); } - internal void CreateAndAddChildren() + internal void CreateAndAddChildren(PrinterConfig printer) { CloseAllChildren(); @@ -123,7 +125,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow }; AddChild(gradientWidget); - var gcodeDetails = new GCodeDetails(sceneContext.LoadedGCode); + var gcodeDetails = new GCodeDetails(printer, printer.Bed.LoadedGCode); this.AddChild(new GCodeDetailsView(gcodeDetails) { diff --git a/PrinterCommunication/Io/MacroProcessingStream.cs b/PrinterCommunication/Io/MacroProcessingStream.cs index 00d54136c..64f5c3517 100644 --- a/PrinterCommunication/Io/MacroProcessingStream.cs +++ b/PrinterCommunication/Io/MacroProcessingStream.cs @@ -207,7 +207,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io UiThread.RunOnIdle(() => { - WizardWindow.Show(new RunningMacroPage(printer.Connection, macroData)); + WizardWindow.Show(new RunningMacroPage(printer, macroData)); }); break; @@ -225,7 +225,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io UiThread.RunOnIdle(() => { - WizardWindow.Show(new RunningMacroPage(printer.Connection, macroData)); + WizardWindow.Show(new RunningMacroPage(printer, macroData)); }); break; diff --git a/PrinterControls/ControlWidgets/AdjustmentControls.cs b/PrinterControls/ControlWidgets/AdjustmentControls.cs index 96b1e0629..15d7f05ce 100644 --- a/PrinterControls/ControlWidgets/AdjustmentControls.cs +++ b/PrinterControls/ControlWidgets/AdjustmentControls.cs @@ -52,7 +52,7 @@ namespace MatterHackers.MatterControl.PrinterControls private EventHandler unregisterEvents; - public AdjustmentControls(int headingPointSize) + public AdjustmentControls(PrinterConfig printer, int headingPointSize) { var adjustmentControlsGroupBox = new AltGroupBox(new TextWidget("Tuning Adjustment".Localize(), pointSize: headingPointSize, textColor: ActiveTheme.Instance.SecondaryAccentColor)) { @@ -113,7 +113,7 @@ namespace MatterHackers.MatterControl.PrinterControls FeedRateMultiplyerStream.FeedRateRatio = Math.Round(feedRateRatioSlider.Value, 2); // Persist data for future use - ActiveSliceSettings.Instance.SetValue( + printer.Settings.SetValue( SettingsKey.feedrate_ratio, FeedRateMultiplyerStream.FeedRateRatio.ToString()); }; @@ -135,7 +135,7 @@ namespace MatterHackers.MatterControl.PrinterControls FeedRateMultiplyerStream.FeedRateRatio = Math.Round(feedRateRatioSlider.Value, 2); // Persist data for future use - ActiveSliceSettings.Instance.SetValue( + printer.Settings.SetValue( SettingsKey.feedrate_ratio, FeedRateMultiplyerStream.FeedRateRatio.ToString()); }; @@ -179,7 +179,7 @@ namespace MatterHackers.MatterControl.PrinterControls ExtrusionMultiplyerStream.ExtrusionRatio = Math.Round(extrusionRatioSlider.Value, 2); // Persist data for future use - ActiveSliceSettings.Instance.SetValue( + printer.Settings.SetValue( SettingsKey.extrusion_ratio, ExtrusionMultiplyerStream.ExtrusionRatio.ToString()); }; @@ -200,7 +200,7 @@ namespace MatterHackers.MatterControl.PrinterControls ExtrusionMultiplyerStream.ExtrusionRatio = Math.Round(extrusionRatioSlider.Value, 2); // Persist data for future use - ActiveSliceSettings.Instance.SetValue( + printer.Settings.SetValue( SettingsKey.extrusion_ratio, ExtrusionMultiplyerStream.ExtrusionRatio.ToString()); }; @@ -219,13 +219,13 @@ namespace MatterHackers.MatterControl.PrinterControls var eventArgs = e as StringEventArgs; if (eventArgs?.Data == SettingsKey.extrusion_ratio) { - double extrusionRatio = ActiveSliceSettings.Instance.GetValue(SettingsKey.extrusion_ratio); + double extrusionRatio = printer.Settings.GetValue(SettingsKey.extrusion_ratio); extrusionRatioSlider.Value = extrusionRatio; extrusionValue.ActuallNumberEdit.Value = Math.Round(extrusionRatio, 2); } else if (eventArgs?.Data == SettingsKey.feedrate_ratio) { - double feedrateRatio = ActiveSliceSettings.Instance.GetValue(SettingsKey.feedrate_ratio); + double feedrateRatio = printer.Settings.GetValue(SettingsKey.feedrate_ratio); feedRateRatioSlider.Value = feedrateRatio; feedRateValue.ActuallNumberEdit.Value = Math.Round(feedrateRatio, 2); } diff --git a/PrinterControls/ControlWidgets/PowerControls.cs b/PrinterControls/ControlWidgets/PowerControls.cs index 298c4883c..3fdc512ee 100644 --- a/PrinterControls/ControlWidgets/PowerControls.cs +++ b/PrinterControls/ControlWidgets/PowerControls.cs @@ -27,36 +27,35 @@ of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. */ +using System; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.Localizations; -using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.MatterControl.SlicerConfiguration; -using System; namespace MatterHackers.MatterControl.PrinterControls { public class PowerControls : ControlWidgetBase { private EventHandler unregisterEvents; - private CheckBox atxPowertoggleSwitch; - PrinterConnection printerConnection; + private PrinterConfig printer; - public PowerControls(PrinterConnection printerConnection, int headingPointSize) + public PowerControls(PrinterConfig printer, int headingPointSize) { - this.printerConnection = printerConnection; - AltGroupBox fanControlsGroupBox = new AltGroupBox(new TextWidget("ATX Power Control".Localize(), pointSize: headingPointSize, textColor: ActiveTheme.Instance.SecondaryAccentColor)); + this.printer = printer; + + var fanControlsGroupBox = new AltGroupBox(new TextWidget("ATX Power Control".Localize(), pointSize: headingPointSize, textColor: ActiveTheme.Instance.SecondaryAccentColor)); fanControlsGroupBox.Margin = new BorderDouble(0); fanControlsGroupBox.BorderColor = ActiveTheme.Instance.PrimaryTextColor; - fanControlsGroupBox.HAnchor |= Agg.UI.HAnchor.Stretch; + fanControlsGroupBox.HAnchor |= HAnchor.Stretch; this.AddChild(fanControlsGroupBox); atxPowertoggleSwitch = ImageButtonFactory.CreateToggleSwitch(false); atxPowertoggleSwitch.Margin = new BorderDouble(6, 0, 6, 6); atxPowertoggleSwitch.CheckedStateChanged += (sender, e) => { - printerConnection.AtxPowerEnabled = atxPowertoggleSwitch.Checked; + printer.Connection.AtxPowerEnabled = atxPowertoggleSwitch.Checked; }; FlowLayoutWidget paddingContainer = new FlowLayoutWidget(); @@ -66,27 +65,25 @@ namespace MatterHackers.MatterControl.PrinterControls } fanControlsGroupBox.AddChild(paddingContainer); - UpdateControlVisibility(null, null); + printer.Connection.CommunicationStateChanged.RegisterEvent((s, e) => + { + this.Visible = printer.Settings.GetValue(SettingsKey.has_power_control); + this.SetEnableLevel(printer.Connection.PrinterIsConnected ? EnableLevel.Enabled : EnableLevel.Disabled); + }, ref unregisterEvents); - printerConnection.CommunicationStateChanged.RegisterEvent(this.UpdateControlVisibility, ref unregisterEvents); - printerConnection.AtxPowerStateChanged.RegisterEvent(this.UpdatePowerSwitch, ref unregisterEvents); + printer.Connection.AtxPowerStateChanged.RegisterEvent((s, e) => + { + this.atxPowertoggleSwitch.Checked = printer.Connection.AtxPowerEnabled; + }, ref unregisterEvents); - this.HAnchor = Agg.UI.HAnchor.Stretch; + this.Visible = printer.Settings.GetValue(SettingsKey.has_power_control); + this.SetEnableLevel(printer.Connection.PrinterIsConnected ? EnableLevel.Enabled : EnableLevel.Disabled); + + this.HAnchor = HAnchor.Stretch; this.HAnchor = HAnchor.Stretch; this.VAnchor = VAnchor.Stretch; } - private void UpdateControlVisibility(object sender, EventArgs args) - { - this.Visible = ActiveSliceSettings.Instance.GetValue(SettingsKey.has_power_control); - this.SetEnableLevel(printerConnection.PrinterIsConnected ? EnableLevel.Enabled : EnableLevel.Disabled); - } - - private void UpdatePowerSwitch(object sender, EventArgs args) - { - this.atxPowertoggleSwitch.Checked = printerConnection.AtxPowerEnabled; - } - public override void OnClosed(ClosedEventArgs e) { unregisterEvents?.Invoke(this, null); diff --git a/PrinterControls/ManualPrinterControls.cs b/PrinterControls/ManualPrinterControls.cs index 4c36d4654..6cf71dbf0 100644 --- a/PrinterControls/ManualPrinterControls.cs +++ b/PrinterControls/ManualPrinterControls.cs @@ -28,10 +28,8 @@ either expressed or implied, of the FreeBSD Project. */ using System; -using System.Linq; using MatterHackers.Agg; using MatterHackers.Agg.UI; -using MatterHackers.Localizations; using MatterHackers.MatterControl.ConfigurationPage; using MatterHackers.MatterControl.CustomWidgets; using MatterHackers.MatterControl.PrinterCommunication; @@ -43,20 +41,21 @@ namespace MatterHackers.MatterControl public class ManualPrinterControls : GuiWidget { static public RootedObjectEventHandler AddPluginControls = new RootedObjectEventHandler(); + private static bool pluginsQueuedToAdd = false; - PrinterConfig printer; + private PrinterConfig printer; public ManualPrinterControls(PrinterConfig printer) { + this.printer = printer; this.BackgroundColor = ApplicationController.Instance.Theme.TabBodyBackground; - AnchorAll(); - - AddChild(new ManualPrinterControlsDesktop(printer)); + this.AnchorAll(); + this.AddChild(new ManualPrinterControlsDesktop(printer)); } public override void OnLoad(EventArgs args) { - if (!pluginsQueuedToAdd && ActiveSliceSettings.Instance.GetValue("include_firmware_updater") == "Simple Arduino") + if (!pluginsQueuedToAdd && printer.Settings.GetValue("include_firmware_updater") == "Simple Arduino") { UiThread.RunOnIdle(() => { @@ -107,7 +106,7 @@ namespace MatterHackers.MatterControl movementControlsContainer = new MovementControls(printer, headingPointSize); controlsTopToBottomLayout.AddChild(movementControlsContainer); - if (!ActiveSliceSettings.Instance.GetValue(SettingsKey.has_hardware_leveling)) + if (!printer.Settings.GetValue(SettingsKey.has_hardware_leveling)) { calibrationControlsContainer = new CalibrationSettingsWidget(printer, theme.ButtonFactory, headingPointSize); controlsTopToBottomLayout.AddChild(calibrationControlsContainer); @@ -123,15 +122,15 @@ namespace MatterHackers.MatterControl controlsTopToBottomLayout.AddChild(linearPanel); fanControlsContainer = new FanControls(printer.Connection, headingPointSize); - if (ActiveSliceSettings.Instance.GetValue(SettingsKey.has_fan)) + if (printer.Settings.GetValue(SettingsKey.has_fan)) { controlsTopToBottomLayout.AddChild(fanControlsContainer); } #if !__ANDROID__ - controlsTopToBottomLayout.AddChild(new PowerControls(printer.Connection, headingPointSize)); + controlsTopToBottomLayout.AddChild(new PowerControls(printer, headingPointSize)); #endif - tuningAdjustmentControlsContainer = new AdjustmentControls(headingPointSize); + tuningAdjustmentControlsContainer = new AdjustmentControls(printer, headingPointSize); controlsTopToBottomLayout.AddChild(tuningAdjustmentControlsContainer); // HACK: this is a hack to make the layout engine fire again for this control @@ -157,7 +156,7 @@ namespace MatterHackers.MatterControl private void SetVisibleControls() { - if (!ActiveSliceSettings.Instance.PrinterSelected) + if (!printer.Settings.PrinterSelected) { movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); diff --git a/PrinterControls/XYZJogControls.cs b/PrinterControls/XYZJogControls.cs index b5e63f78a..3b658a355 100644 --- a/PrinterControls/XYZJogControls.cs +++ b/PrinterControls/XYZJogControls.cs @@ -58,7 +58,7 @@ namespace MatterHackers.MatterControl private MoveButton zPlusControl; private MoveButton zMinusControl; - + private MoveButtonFactory moveButtonFactory = new MoveButtonFactory(); private PrinterConfig printer; @@ -378,9 +378,9 @@ namespace MatterHackers.MatterControl { if (printer.Connection.CommunicationState == CommunicationStates.Printing) { - var currentZ = ActiveSliceSettings.Instance.GetValue(SettingsKey.baby_step_z_offset); + var currentZ = printer.Settings.GetValue(SettingsKey.baby_step_z_offset); currentZ += moveAmountPositive; - ActiveSliceSettings.Instance.SetValue(SettingsKey.baby_step_z_offset, currentZ.ToString("0.##")); + printer.Settings.SetValue(SettingsKey.baby_step_z_offset, currentZ.ToString("0.##")); } else { @@ -392,9 +392,9 @@ namespace MatterHackers.MatterControl { if (printer.Connection.CommunicationState == CommunicationStates.Printing) { - var currentZ = ActiveSliceSettings.Instance.GetValue(SettingsKey.baby_step_z_offset); + var currentZ = printer.Settings.GetValue(SettingsKey.baby_step_z_offset); currentZ += moveAmountNegative; - ActiveSliceSettings.Instance.SetValue(SettingsKey.baby_step_z_offset, currentZ.ToString("0.##")); + printer.Settings.SetValue(SettingsKey.baby_step_z_offset, currentZ.ToString("0.##")); } else { @@ -405,7 +405,7 @@ namespace MatterHackers.MatterControl private FlowLayoutWidget CreateEButtons(double buttonSeparationDistance) { - int extruderCount = ActiveSliceSettings.Instance.GetValue(SettingsKey.extruder_count); + int extruderCount = printer.Settings.GetValue(SettingsKey.extruder_count); FlowLayoutWidget eButtons = new FlowLayoutWidget(FlowDirection.TopToBottom); { @@ -652,9 +652,9 @@ namespace MatterHackers.MatterControl { if (moveAxis == PrinterConnection.Axis.Z) // only works on z { - var currentZ = ActiveSliceSettings.Instance.GetValue(SettingsKey.baby_step_z_offset); + var currentZ = printer.Settings.GetValue(SettingsKey.baby_step_z_offset); currentZ += this.MoveAmount; - ActiveSliceSettings.Instance.SetValue(SettingsKey.baby_step_z_offset, currentZ.ToString("0.##")); + printer.Settings.SetValue(SettingsKey.baby_step_z_offset, currentZ.ToString("0.##")); } } else diff --git a/SlicerConfiguration/PresetSelectorWidget.cs b/SlicerConfiguration/PresetSelectorWidget.cs index 116a68912..cef5ce6cf 100644 --- a/SlicerConfiguration/PresetSelectorWidget.cs +++ b/SlicerConfiguration/PresetSelectorWidget.cs @@ -49,12 +49,14 @@ namespace MatterHackers.MatterControl.SlicerConfiguration bool whiteBackground; public DropDownList DropDownList; + private PrinterConfig printer; private int extruderIndex; //For multiple materials - public PresetSelectorWidget(string label, RGBA_Bytes accentColor, NamedSettingsLayers layerType, int extruderIndex, bool whiteBackground = false) + public PresetSelectorWidget(PrinterConfig printer, string label, RGBA_Bytes accentColor, NamedSettingsLayers layerType, int extruderIndex, bool whiteBackground = false) : base(FlowDirection.TopToBottom) { + this.printer = printer; this.whiteBackground = whiteBackground; Name = label; @@ -122,24 +124,24 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { if (ApplicationController.Instance.EditMaterialPresetsWindow == null) { - string presetsID = ActiveSliceSettings.Instance.GetMaterialPresetKey(extruderIndex); + string presetsID = printer.Settings.GetMaterialPresetKey(extruderIndex); if (string.IsNullOrEmpty(presetsID)) { return; } - var layerToEdit = ActiveSliceSettings.Instance.MaterialLayers.Where(layer => layer.LayerID == presetsID).FirstOrDefault(); + var layerToEdit = printer.Settings.MaterialLayers.Where(layer => layer.LayerID == presetsID).FirstOrDefault(); - var presetsContext = new PresetsContext(ActiveSliceSettings.Instance.MaterialLayers, layerToEdit) + var presetsContext = new PresetsContext(printer.Settings.MaterialLayers, layerToEdit) { LayerType = NamedSettingsLayers.Material, SetAsActive = (materialKey) => { - ActiveSliceSettings.Instance.SetMaterialPreset(this.extruderIndex, materialKey); + printer.Settings.SetMaterialPreset(this.extruderIndex, materialKey); }, DeleteLayer = () => { - var materialKeys = ActiveSliceSettings.Instance.MaterialSettingsKeys; + var materialKeys = printer.Settings.MaterialSettingsKeys; for (var i = 0; i < materialKeys.Count; i++) { if (materialKeys[i] == presetsID) @@ -148,15 +150,15 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } - ActiveSliceSettings.Instance.SetMaterialPreset(extruderIndex, ""); - ActiveSliceSettings.Instance.MaterialLayers.Remove(layerToEdit); - ActiveSliceSettings.Instance.Save(); + printer.Settings.SetMaterialPreset(extruderIndex, ""); + printer.Settings.MaterialLayers.Remove(layerToEdit); + printer.Settings.Save(); UiThread.RunOnIdle(() => ApplicationController.Instance.ReloadAdvancedControlsPanel()); } }; - ApplicationController.Instance.EditMaterialPresetsWindow = new SlicePresetsWindow(presetsContext); + ApplicationController.Instance.EditMaterialPresetsWindow = new SlicePresetsWindow(printer, presetsContext); ApplicationController.Instance.EditMaterialPresetsWindow.Closed += (s, e2) => { ApplicationController.Instance.EditMaterialPresetsWindow = null; @@ -174,29 +176,29 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { if (ApplicationController.Instance.EditQualityPresetsWindow == null) { - string presetsID = ActiveSliceSettings.Instance.ActiveQualityKey; + string presetsID = printer.Settings.ActiveQualityKey; if (string.IsNullOrEmpty(presetsID)) { return; } - var layerToEdit = ActiveSliceSettings.Instance.QualityLayers.Where(layer => layer.LayerID == presetsID).FirstOrDefault(); + var layerToEdit = printer.Settings.QualityLayers.Where(layer => layer.LayerID == presetsID).FirstOrDefault(); - var presetsContext = new PresetsContext(ActiveSliceSettings.Instance.QualityLayers, layerToEdit) + var presetsContext = new PresetsContext(printer.Settings.QualityLayers, layerToEdit) { LayerType = NamedSettingsLayers.Quality, - SetAsActive = (qualityKey) => ActiveSliceSettings.Instance.ActiveQualityKey = qualityKey, + SetAsActive = (qualityKey) => printer.Settings.ActiveQualityKey = qualityKey, DeleteLayer = () => { - ActiveSliceSettings.Instance.ActiveQualityKey = ""; - ActiveSliceSettings.Instance.QualityLayers.Remove(layerToEdit); - ActiveSliceSettings.Instance.Save(); + printer.Settings.ActiveQualityKey = ""; + printer.Settings.QualityLayers.Remove(layerToEdit); + printer.Settings.Save(); UiThread.RunOnIdle(() => ApplicationController.Instance.ReloadAdvancedControlsPanel()); } }; - ApplicationController.Instance.EditQualityPresetsWindow = new SlicePresetsWindow(presetsContext); + ApplicationController.Instance.EditQualityPresetsWindow = new SlicePresetsWindow(printer, presetsContext); ApplicationController.Instance.EditQualityPresetsWindow.Closed += (s, e2) => { ApplicationController.Instance.EditQualityPresetsWindow = null; @@ -229,10 +231,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration Dictionary settingBeforeChange = new Dictionary(); foreach (var keyName in PrinterSettings.KnownSettings) { - settingBeforeChange.Add(keyName, ActiveSliceSettings.Instance.GetValue(keyName)); + settingBeforeChange.Add(keyName, printer.Settings.GetValue(keyName)); } - var activeSettings = ActiveSliceSettings.Instance; + var activeSettings = printer.Settings; MenuItem item = (MenuItem)sender; if (layerType == NamedSettingsLayers.Material) @@ -270,7 +272,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration ApplicationController.Instance.ReloadAdvancedControlsPanel(); foreach (var keyName in PrinterSettings.KnownSettings) { - if (settingBeforeChange[keyName] != ActiveSliceSettings.Instance.GetValue(keyName)) + if (settingBeforeChange[keyName] != printer.Settings.GetValue(keyName)) { ActiveSliceSettings.OnSettingChanged(keyName); } @@ -296,7 +298,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration MenuItem defaultMenuItem = dropDownList.AddItem(defaultMenuItemText, ""); defaultMenuItem.Selected += MenuItem_Selected; - var listSource = (layerType == NamedSettingsLayers.Material) ? ActiveSliceSettings.Instance.MaterialLayers : ActiveSliceSettings.Instance.QualityLayers; + var listSource = (layerType == NamedSettingsLayers.Material) ? printer.Settings.MaterialLayers : printer.Settings.QualityLayers; foreach (var layer in listSource) { MenuItem menuItem = dropDownList.AddItem(layer.Name, layer.LayerID); @@ -310,15 +312,15 @@ namespace MatterHackers.MatterControl.SlicerConfiguration var newLayer = new PrinterSettingsLayer(); if (layerType == NamedSettingsLayers.Quality) { - newLayer.Name = "Quality" + ActiveSliceSettings.Instance.QualityLayers.Count; - ActiveSliceSettings.Instance.QualityLayers.Add(newLayer); - ActiveSliceSettings.Instance.ActiveQualityKey = newLayer.LayerID; + newLayer.Name = "Quality" + printer.Settings.QualityLayers.Count; + printer.Settings.QualityLayers.Add(newLayer); + printer.Settings.ActiveQualityKey = newLayer.LayerID; } else { - newLayer.Name = "Material" + ActiveSliceSettings.Instance.MaterialLayers.Count; - ActiveSliceSettings.Instance.MaterialLayers.Add(newLayer); - ActiveSliceSettings.Instance.SetMaterialPreset(this.extruderIndex, newLayer.LayerID); + newLayer.Name = "Material" + printer.Settings.MaterialLayers.Count; + printer.Settings.MaterialLayers.Add(newLayer); + printer.Settings.SetMaterialPreset(this.extruderIndex, newLayer.LayerID); } RebuildDropDownList(); @@ -332,22 +334,22 @@ namespace MatterHackers.MatterControl.SlicerConfiguration if (layerType == NamedSettingsLayers.Material) { - settingsKey = ActiveSliceSettings.Instance.GetMaterialPresetKey(extruderIndex); + settingsKey = printer.Settings.GetMaterialPresetKey(extruderIndex); - ActiveSliceSettings.Instance.MaterialLayers.CollectionChanged += SettingsLayers_CollectionChanged; + printer.Settings.MaterialLayers.CollectionChanged += SettingsLayers_CollectionChanged; dropDownList.Closed += (s1, e1) => { - ActiveSliceSettings.Instance.MaterialLayers.CollectionChanged -= SettingsLayers_CollectionChanged; + printer.Settings.MaterialLayers.CollectionChanged -= SettingsLayers_CollectionChanged; }; } else { - settingsKey = ActiveSliceSettings.Instance.ActiveQualityKey; + settingsKey = printer.Settings.ActiveQualityKey; - ActiveSliceSettings.Instance.QualityLayers.CollectionChanged += SettingsLayers_CollectionChanged; + printer.Settings.QualityLayers.CollectionChanged += SettingsLayers_CollectionChanged; dropDownList.Closed += (s1, e1) => { - ActiveSliceSettings.Instance.QualityLayers.CollectionChanged -= SettingsLayers_CollectionChanged; + printer.Settings.QualityLayers.CollectionChanged -= SettingsLayers_CollectionChanged; }; } diff --git a/SlicerConfiguration/PresetsToolbar.cs b/SlicerConfiguration/PresetsToolbar.cs index 794614154..e9dd642fc 100644 --- a/SlicerConfiguration/PresetsToolbar.cs +++ b/SlicerConfiguration/PresetsToolbar.cs @@ -31,19 +31,18 @@ using System.Collections.Generic; using MatterHackers.Agg; using MatterHackers.Agg.UI; using MatterHackers.Localizations; -using MatterHackers.MatterControl.PrinterCommunication; namespace MatterHackers.MatterControl.SlicerConfiguration { public class PresetsToolbar : FlowLayoutWidget { - public PresetsToolbar() + public PresetsToolbar(PrinterConfig printer) { this.HAnchor = HAnchor.Stretch; - int numberOfHeatedExtruders = ActiveSliceSettings.Instance.Helpers.NumberOfHotEnds(); + int numberOfHeatedExtruders = printer.Settings.Helpers.NumberOfHotEnds(); - this.AddChild(new PresetSelectorWidget("Quality".Localize(), RGBA_Bytes.Yellow, NamedSettingsLayers.Quality, 0)); + this.AddChild(new PresetSelectorWidget(printer, "Quality".Localize(), RGBA_Bytes.Yellow, NamedSettingsLayers.Quality, 0)); this.AddChild(new GuiWidget(8, 0)); if (numberOfHeatedExtruders > 1) @@ -58,12 +57,12 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } int colorIndex = i % colorList.Count; RGBA_Bytes color = colorList[colorIndex]; - this.AddChild(new PresetSelectorWidget(string.Format("{0} {1}", "Material".Localize(), i + 1), color, NamedSettingsLayers.Material, i)); + this.AddChild(new PresetSelectorWidget(printer, string.Format("{0} {1}", "Material".Localize(), i + 1), color, NamedSettingsLayers.Material, i)); } } else { - this.AddChild(new PresetSelectorWidget("Material".Localize(), RGBA_Bytes.Orange, NamedSettingsLayers.Material, 0)); + this.AddChild(new PresetSelectorWidget(printer, "Material".Localize(), RGBA_Bytes.Orange, NamedSettingsLayers.Material, 0)); } this.Height = 60 * GuiWidget.DeviceScale; diff --git a/SlicerConfiguration/Settings/ActiveSliceSettings.cs b/SlicerConfiguration/Settings/ActiveSliceSettings.cs index e892ee01d..d3a4ded45 100644 --- a/SlicerConfiguration/Settings/ActiveSliceSettings.cs +++ b/SlicerConfiguration/Settings/ActiveSliceSettings.cs @@ -42,7 +42,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { public enum NamedSettingsLayers { MHBaseSettings, OEMSettings, Quality, Material, User, All } - public class ActiveSliceSettings + public static class ActiveSliceSettings { public static RootedObjectEventHandler ActivePrinterChanged = new RootedObjectEventHandler(); public static RootedObjectEventHandler ActiveProfileModified = new RootedObjectEventHandler(); @@ -81,8 +81,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration if (!MatterControlApplication.IsLoading) { - if (ActiveSliceSettings.Instance.PrinterSelected - && Instance.GetValue(SettingsKey.auto_connect)) + if (activeInstance.PrinterSelected + && activeInstance.GetValue(SettingsKey.auto_connect)) { UiThread.RunOnIdle(() => { diff --git a/SlicerConfiguration/Settings/SettingsHelpers.cs b/SlicerConfiguration/Settings/SettingsHelpers.cs index 7e990288d..fdc3800e9 100644 --- a/SlicerConfiguration/Settings/SettingsHelpers.cs +++ b/SlicerConfiguration/Settings/SettingsHelpers.cs @@ -302,7 +302,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration if (printLevelingData == null) { printLevelingData = PrintLevelingData.Create( - ActiveSliceSettings.Instance, + printerSettings, printerSettings.GetValue(SettingsKey.print_leveling_data)); if (printLevelingData.SampledPositions.Count == 3) @@ -311,7 +311,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration printLevelingData.SampledPositions[0], printLevelingData.SampledPositions[1], printLevelingData.SampledPositions[2], - ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center)); + printerSettings.GetValue(SettingsKey.print_center)); } } @@ -322,7 +322,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { if (clearUserZOffset) { - ActiveSliceSettings.Instance.SetValue(SettingsKey.baby_step_z_offset, "0"); + printerSettings.SetValue(SettingsKey.baby_step_z_offset, "0"); } printLevelingData = data; printerSettings.SetValue(SettingsKey.print_leveling_data, JsonConvert.SerializeObject(data)); @@ -348,14 +348,14 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public void UpdateLevelSettings() { - PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); + PrintLevelingData levelingData = this.GetPrintLevelingData(); if (levelingData.SampledPositions.Count > 2) { PrintLevelingPlane.Instance.SetPrintLevelingEquation( levelingData.SampledPositions[0], levelingData.SampledPositions[1], levelingData.SampledPositions[2], - ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center)); + printerSettings.GetValue(SettingsKey.print_center)); } } @@ -436,7 +436,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { Vector3 feedRate = new Vector3(3000, 3000, 315); - string savedSettings = ActiveSliceSettings.Instance.GetValue(SettingsKey.manual_movement_speeds); + string savedSettings = printerSettings.GetValue(SettingsKey.manual_movement_speeds); if (!string.IsNullOrEmpty(savedSettings)) { var segments = savedSettings.Split(','); @@ -478,17 +478,17 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public int NumberOfHotEnds() { - if (ActiveSliceSettings.Instance.GetValue(SettingsKey.extruders_share_temperature)) + if (printerSettings.GetValue(SettingsKey.extruders_share_temperature)) { return 1; } - return ActiveSliceSettings.Instance.GetValue(SettingsKey.extruder_count); + return printerSettings.GetValue(SettingsKey.extruder_count); } public bool UseZProbe() { - return ActiveSliceSettings.Instance.GetValue(SettingsKey.has_z_probe) && ActiveSliceSettings.Instance.GetValue(SettingsKey.use_z_probe); + return printerSettings.GetValue(SettingsKey.has_z_probe) && printerSettings.GetValue(SettingsKey.use_z_probe); } } diff --git a/SlicerConfiguration/SettingsContext.cs b/SlicerConfiguration/SettingsContext.cs index efd9630b1..156afc2ca 100644 --- a/SlicerConfiguration/SettingsContext.cs +++ b/SlicerConfiguration/SettingsContext.cs @@ -38,9 +38,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { private IEnumerable layerCascade; private PrinterSettingsLayer persistenceLayer; + private PrinterConfig printer; - public SettingsContext(IEnumerable layerCascade, NamedSettingsLayers viewFilter) + public SettingsContext(PrinterConfig printer, IEnumerable layerCascade, NamedSettingsLayers viewFilter) { + this.printer = printer; this.layerCascade = layerCascade; this.ViewFilter = viewFilter; @@ -48,7 +50,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration this.IsPrimarySettingsView = layerCascade == null; // The last layer of the layerFilters is the target persistence - this.persistenceLayer = layerCascade?.First() ?? ActiveSliceSettings.Instance.UserLayer; + this.persistenceLayer = layerCascade?.First() ?? printer.Settings.UserLayer; } public NamedSettingsLayers ViewFilter { get; set; } @@ -57,22 +59,22 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public string GetValue(string slicerConfigName) { - return ActiveSliceSettings.Instance.GetValue(slicerConfigName, layerCascade); + return printer.Settings.GetValue(slicerConfigName, layerCascade); } public void SetValue(string slicerConfigName, string settingsValue) { - ActiveSliceSettings.Instance.SetValue(slicerConfigName, settingsValue, persistenceLayer); + printer.Settings.SetValue(slicerConfigName, settingsValue, persistenceLayer); } public void SetComPort(string settingsValue) { - ActiveSliceSettings.Instance.Helpers.SetComPort(settingsValue, persistenceLayer); + printer.Settings.Helpers.SetComPort(settingsValue, persistenceLayer); } public void ClearValue(string slicerConfigName) { - ActiveSliceSettings.Instance.ClearValue(slicerConfigName, persistenceLayer); + printer.Settings.ClearValue(slicerConfigName, persistenceLayer); } public bool ContainsKey(string slicerConfigName) @@ -82,7 +84,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration internal bool ParseShowString(string enableIfSet) { - return ActiveSliceSettings.Instance.ParseShowString(enableIfSet, layerCascade); + return printer.Settings.ParseShowString(enableIfSet, layerCascade); } } } diff --git a/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs b/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs index 09868e52b..2e30a4e20 100644 --- a/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs +++ b/SlicerConfiguration/SlicePresetsWindow/SlicePresetsWindow.cs @@ -64,16 +64,18 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private static Regex numberMatch = new Regex("\\s*\\(\\d+\\)", RegexOptions.Compiled); private PresetsContext presetsContext; + private PrinterConfig printer; private MHTextEditWidget presetNameInput; private string initialPresetName = null; private GuiWidget middleRow; - public SlicePresetsWindow(PresetsContext presetsContext) + public SlicePresetsWindow(PrinterConfig printer, PresetsContext presetsContext) : base(641, 481) { this.presetsContext = presetsContext; + this.printer = printer; this.AlwaysOnTopOfMain = true; this.Title = "Slice Presets Editor".Localize(); this.MinimumSize = new Vector2(640, 480); @@ -95,7 +97,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration middleRow = new GuiWidget(); middleRow.AnchorAll(); - middleRow.AddChild(CreateSliceSettingsWidget(presetsContext.PersistenceLayer)); + middleRow.AddChild(CreateSliceSettingsWidget(printer, presetsContext.PersistenceLayer)); mainContainer.AddChild(GetTopRow()); mainContainer.AddChild(middleRow); @@ -141,9 +143,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration return topRow; } - private GuiWidget CreateSliceSettingsWidget(PrinterSettingsLayer persistenceLayer) + private GuiWidget CreateSliceSettingsWidget(PrinterConfig printer, PrinterSettingsLayer persistenceLayer) { var settingsContext = new SettingsContext( + printer, new List { persistenceLayer, @@ -152,7 +155,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration }, presetsContext.LayerType); - return new SliceSettingsWidget(settingsContext) + return new SliceSettingsWidget(printer, settingsContext) { ShowControlBar = false }; @@ -202,7 +205,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration presetsContext.PersistenceLayer = clonedLayer; middleRow.CloseAllChildren(); - middleRow.AddChild(CreateSliceSettingsWidget(clonedLayer)); + middleRow.AddChild(CreateSliceSettingsWidget(printer, clonedLayer)); presetNameInput.Text = newProfileName; }); diff --git a/SlicerConfiguration/SliceSettingsOverflowDropdown.cs b/SlicerConfiguration/SliceSettingsOverflowDropdown.cs index 3c4716a82..80f9c8169 100644 --- a/SlicerConfiguration/SliceSettingsOverflowDropdown.cs +++ b/SlicerConfiguration/SliceSettingsOverflowDropdown.cs @@ -42,10 +42,10 @@ namespace MatterHackers.MatterControl.SlicerConfiguration string resetToDefaultsMessage = "Resetting to default values will remove your current overrides and restore your original printer settings.\nAre you sure you want to continue?".Localize(); string resetToDefaultsWindowTitle = "Revert Settings".Localize(); - public SliceSettingsOverflowDropdown(SliceSettingsWidget sliceSettingsWidget) + public SliceSettingsOverflowDropdown(PrinterConfig printer, SliceSettingsWidget sliceSettingsWidget) { this.VAnchor = VAnchor.Fit | VAnchor.Center; - + var overflowDropdown = new OverflowDropdown(true) { AlignToRightEdge = true, @@ -98,14 +98,14 @@ namespace MatterHackers.MatterControl.SlicerConfiguration if (revertSettings) { bool onlyReloadSliceSettings = true; - if (ActiveSliceSettings.Instance.GetValue(SettingsKey.print_leveling_required_to_print) - && ActiveSliceSettings.Instance.GetValue(SettingsKey.print_leveling_enabled)) + if (printer.Settings.GetValue(SettingsKey.print_leveling_required_to_print) + && printer.Settings.GetValue(SettingsKey.print_leveling_enabled)) { onlyReloadSliceSettings = false; } - ActiveSliceSettings.Instance.ClearUserOverrides(); - ActiveSliceSettings.Instance.Save(); + printer.Settings.ClearUserOverrides(); + printer.Settings.Save(); if (onlyReloadSliceSettings) { diff --git a/SlicerConfiguration/SliceSettingsRow.cs b/SlicerConfiguration/SliceSettingsRow.cs index f46f530b2..0d32f3759 100644 --- a/SlicerConfiguration/SliceSettingsRow.cs +++ b/SlicerConfiguration/SliceSettingsRow.cs @@ -44,8 +44,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration public static readonly RGBA_Bytes userSettingBackgroundColor = new RGBA_Bytes(68, 95, 220, 150); public event EventHandler StyleChanged; - private SettingsContext settingsContext; + private SettingsContext settingsContext; + private PrinterConfig printer; private SliceSettingData settingData; private GuiWidget dataArea; @@ -56,8 +57,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration private const bool debugLayout = false; - public SliceSettingsRow(SettingsContext settingsContext, SliceSettingData settingData, bool fullRow = false) + public SliceSettingsRow(PrinterConfig printer, SettingsContext settingsContext, SliceSettingData settingData, bool fullRow = false) { + this.printer = printer; this.settingData = settingData; this.settingsContext = settingsContext; @@ -163,9 +165,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration case NamedSettingsLayers.All: if (settingData.ShowAsOverride) { - var defaultCascade = ActiveSliceSettings.Instance.defaultLayerCascade; - var firstParentValue = ActiveSliceSettings.Instance.GetValueAndLayerName(settingData.SlicerConfigName, defaultCascade.Skip(1)); - var currentValueAndLayerName = ActiveSliceSettings.Instance.GetValueAndLayerName(settingData.SlicerConfigName, defaultCascade); + var defaultCascade = printer.Settings.defaultLayerCascade; + var firstParentValue = printer.Settings.GetValueAndLayerName(settingData.SlicerConfigName, defaultCascade.Skip(1)); + var currentValueAndLayerName = printer.Settings.GetValueAndLayerName(settingData.SlicerConfigName, defaultCascade); var currentValue = currentValueAndLayerName.Item1; var layerName = currentValueAndLayerName.Item2; @@ -209,11 +211,11 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } else if (settingsContext.IsPrimarySettingsView) { - if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Material)) + if (printer.Settings.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Material)) { this.HighlightColor = materialSettingBackgroundColor; } - else if (ActiveSliceSettings.Instance.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Quality)) + else if (printer.Settings.SettingExistsInLayer(settingData.SlicerConfigName, NamedSettingsLayers.Quality)) { this.HighlightColor = qualitySettingBackgroundColor; } diff --git a/SlicerConfiguration/SliceSettingsWidget.cs b/SlicerConfiguration/SliceSettingsWidget.cs index e730a9c3d..d53a456c5 100644 --- a/SlicerConfiguration/SliceSettingsWidget.cs +++ b/SlicerConfiguration/SliceSettingsWidget.cs @@ -46,19 +46,21 @@ namespace MatterHackers.MatterControl.SlicerConfiguration internal PresetsToolbar settingsControlBar; private SettingsContext settingsContext; + private PrinterConfig printer; private Dictionary allUiFields = new Dictionary(); private EventHandler unregisterEvents; - public SliceSettingsWidget(SettingsContext settingsContext) + public SliceSettingsWidget(PrinterConfig printer, SettingsContext settingsContext) : base (FlowDirection.TopToBottom) { + this.printer = printer; this.BackgroundColor = ApplicationController.Instance.Theme.TabBodyBackground; this.settingsContext = settingsContext; - settingsControlBar = new PresetsToolbar() + settingsControlBar = new PresetsToolbar(printer) { HAnchor = HAnchor.Stretch, Padding = new BorderDouble(8, 12, 8, 8) @@ -143,7 +145,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration if (settingsContext.IsPrimarySettingsView) { - var sliceSettingsDetailControl = new SliceSettingsOverflowDropdown(this); + var sliceSettingsDetailControl = new SliceSettingsOverflowDropdown(printer, this); primaryTabControl.TabBar.AddChild(sliceSettingsDetailControl); } @@ -351,7 +353,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration if (group.Name == "Connection") { - subGroupLayoutTopToBottom.AddChild(SliceSettingsWidget.CreateOemProfileInfoRow(isPrimarySettingsView: true)); + subGroupLayoutTopToBottom.AddChild(SliceSettingsWidget.CreateOemProfileInfoRow(settingsContext, isPrimarySettingsView: true)); } } @@ -414,7 +416,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } // Creates an information row showing the base OEM profile and its create_date value - public static GuiWidget CreateOemProfileInfoRow(bool isPrimarySettingsView = false) + public static GuiWidget CreateOemProfileInfoRow(SettingsContext settingsContext, bool isPrimarySettingsView = false) { var dataArea = new FlowLayoutWidget(FlowDirection.TopToBottom) { @@ -449,8 +451,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration HAnchor = HAnchor.Stretch, }; - string make = ActiveSliceSettings.Instance.GetValue(SettingsKey.make); - string model = ActiveSliceSettings.Instance.GetValue(SettingsKey.model); + string make = settingsContext.GetValue(SettingsKey.make); + string model = settingsContext.GetValue(SettingsKey.model); string title = $"{make} {model}"; if (title == "Other Other") @@ -487,7 +489,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration bool useDefaultSavePattern = true; bool placeFieldInDedicatedRow = false; - var settingsRow = new SliceSettingsRow(settingsContext, settingData) + var settingsRow = new SliceSettingsRow(printer, settingsContext, settingData) { Margin = new BorderDouble(0, 0), Padding = new BorderDouble(0, 0, 10, 0), diff --git a/Tests/MatterControl.Tests/SceneTests.cs b/Tests/MatterControl.Tests/SceneTests.cs index 883af80a7..2328d86d9 100644 --- a/Tests/MatterControl.Tests/SceneTests.cs +++ b/Tests/MatterControl.Tests/SceneTests.cs @@ -110,6 +110,7 @@ namespace MatterHackers.PolygonMesh.UnitTests var sceneContext = new BedConfig(); // TODO: Entire app is spun up just to persist a scene - rewrite to reduce footprint/scope var view3DWidget = new View3DWidget( + null, sceneContext, View3DWidget.AutoRotate.Disabled, new ViewControls3D(ApplicationController.Instance.Theme, new Agg.UI.UndoBuffer()),