From 9e9259bfba7b13ff5d64d7bfdacd0b54c2f7f206 Mon Sep 17 00:00:00 2001 From: Kevin Pope Date: Tue, 14 Oct 2014 14:39:46 -0700 Subject: [PATCH] Adding mutli-material UI support. --- ControlElements/TextImageButtonFactory.cs | 24 +++++- PrinterControls/ManualPrinterControls.cs | 87 +++++++++++++++++----- PrinterControls/TemperatureIndicator.cs | 68 +++++++++++------ PrinterControls/XYZJogControls.cs | 2 - SlicerConfiguration/ActiveSliceSettings.cs | 36 +++++++++ SlicerConfiguration/SliceSettingsWidget.cs | 1 + 6 files changed, 171 insertions(+), 47 deletions(-) diff --git a/ControlElements/TextImageButtonFactory.cs b/ControlElements/TextImageButtonFactory.cs index a9ab83db0..c475f58c5 100644 --- a/ControlElements/TextImageButtonFactory.cs +++ b/ControlElements/TextImageButtonFactory.cs @@ -196,20 +196,36 @@ namespace MatterHackers.MatterControl public Button GenerateEditButton() { Button editButton = new Button(0, 0, new ButtonViewThreeImage(LoadUpButtonImage("icon_edit_white.png"), LoadUpButtonImage("icon_edit_gray.png"), LoadUpButtonImage("icon_edit_black.png"))); - editButton.Margin = new BorderDouble(2, -2, 2, 0); + editButton.Margin = new BorderDouble(2, 2, 2, 0); editButton.VAnchor = Agg.UI.VAnchor.ParentTop; return editButton; } + + public GuiWidget GenerateGroupBoxLabelWithEdit(TextWidget textWidget, out Button editButton) + { + FlowLayoutWidget groupLableAndEditControl = new FlowLayoutWidget(); + + editButton = new Button(0, 0, new ButtonViewThreeImage(LoadUpButtonImage("icon_edit_white.png"), LoadUpButtonImage("icon_edit_gray.png"), LoadUpButtonImage("icon_edit_black.png"))); + editButton.Margin = new BorderDouble(2, 2, 2, 0); + editButton.VAnchor = Agg.UI.VAnchor.ParentBottom; + textWidget.VAnchor = Agg.UI.VAnchor.ParentBottom; + groupLableAndEditControl.AddChild(textWidget); + groupLableAndEditControl.AddChild(editButton); + + return groupLableAndEditControl; + + } + public GuiWidget GenerateGroupBoxLabelWithEdit(string label, out Button editButton) { FlowLayoutWidget groupLableAndEditControl = new FlowLayoutWidget(); editButton = new Button(0, 0, new ButtonViewThreeImage(LoadUpButtonImage("icon_edit_white.png"), LoadUpButtonImage("icon_edit_gray.png"), LoadUpButtonImage("icon_edit_black.png"))); - editButton.Margin = new BorderDouble(2, -2, 2, 0); - editButton.VAnchor = Agg.UI.VAnchor.ParentTop; + editButton.Margin = new BorderDouble(2, 2, 2, 0); + editButton.VAnchor = Agg.UI.VAnchor.ParentBottom; TextWidget textLabel = new TextWidget(label, textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize:12); - textLabel.VAnchor = Agg.UI.VAnchor.ParentTop; + textLabel.VAnchor = Agg.UI.VAnchor.ParentBottom; groupLableAndEditControl.AddChild(textLabel); groupLableAndEditControl.AddChild(editButton); diff --git a/PrinterControls/ManualPrinterControls.cs b/PrinterControls/ManualPrinterControls.cs index 07398728c..ebf7111a0 100644 --- a/PrinterControls/ManualPrinterControls.cs +++ b/PrinterControls/ManualPrinterControls.cs @@ -69,7 +69,8 @@ namespace MatterHackers.MatterControl Button homeYButton; Button homeZButton; - DisableableWidget extruderTemperatureControlWidget; + List extruderWidgetContainers = new List(); + DisableableWidget bedTemperatureControlWidget; DisableableWidget movementControlsContainer; DisableableWidget fanControlsContainer; @@ -288,9 +289,9 @@ namespace MatterHackers.MatterControl } private void AddMovementControls(FlowLayoutWidget controlsTopToBottomLayout) - { + { Button editButton; - AltGroupBox movementControlsGroupBox = new AltGroupBox(textImageButtonFactory.GenerateGroupBoxLabelWithEdit("Movement Controls".Localize(), out editButton)); + AltGroupBox movementControlsGroupBox = new AltGroupBox(textImageButtonFactory.GenerateGroupBoxLabelWithEdit(new TextWidget("Movement Controls".Localize(), pointSize: 18, textColor: ActiveTheme.Instance.SecondaryAccentColor), out editButton)); editButton.Click += (sender, e) => { if (editManualMovementSettingsWindow == null) @@ -333,23 +334,52 @@ namespace MatterHackers.MatterControl private void AddTemperatureControls(FlowLayoutWidget controlsTopToBottomLayout) { - FlowLayoutWidget temperatureControlContainer = new FlowLayoutWidget(); - temperatureControlContainer.HAnchor = Agg.UI.HAnchor.ParentLeftRight; - temperatureControlContainer.Margin = new BorderDouble (top: 10)* TextWidget.GlobalPointSizeScaleRatio; + AltGroupBox temperatureGroupBox = new AltGroupBox(new TextWidget("Temperature".Localize(), pointSize: 18, textColor: ActiveTheme.Instance.SecondaryAccentColor)); + temperatureGroupBox.Margin = new BorderDouble(2, 4, 2, 5); + + FlowLayoutWidget mainContainer = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom); + mainContainer.HAnchor = HAnchor.ParentLeftRight; + mainContainer.Margin = new BorderDouble(left: 0); - extruderTemperatureControlWidget = new DisableableWidget(); - extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget()); - temperatureControlContainer.AddChild(extruderTemperatureControlWidget); + temperatureGroupBox.AddChild(mainContainer); + RGBA_Bytes separatorLineColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 100); + + int numberOfHeatedExtruders = 1; + if (ActiveSliceSettings.Instance.GetActiveValue("extruders_share_temperature") == "0") + { + numberOfHeatedExtruders = ActiveSliceSettings.Instance.ExtruderCount; + } + + if (numberOfHeatedExtruders > 1) + { + for (int i = 0; i < numberOfHeatedExtruders; i++) + { + DisableableWidget extruderTemperatureControlWidget = new DisableableWidget(); + extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget(i+1)); + mainContainer.AddChild(extruderTemperatureControlWidget); + mainContainer.AddChild(new HorizontalLine(separatorLineColor)); + extruderWidgetContainers.Add(extruderTemperatureControlWidget); + + } + } + else + { + DisableableWidget extruderTemperatureControlWidget = new DisableableWidget(); + extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget()); + mainContainer.AddChild(extruderTemperatureControlWidget); + mainContainer.AddChild(new HorizontalLine(separatorLineColor)); + extruderWidgetContainers.Add(extruderTemperatureControlWidget); + } bedTemperatureControlWidget = new DisableableWidget(); bedTemperatureControlWidget.AddChild(new BedTemperatureControlWidget()); if (ActiveSliceSettings.Instance.HasHeatedBed()) { - temperatureControlContainer.AddChild(bedTemperatureControlWidget); + mainContainer.AddChild(bedTemperatureControlWidget); } - controlsTopToBottomLayout.AddChild(temperatureControlContainer); + controlsTopToBottomLayout.AddChild(temperatureGroupBox); } EditableNumberDisplay fanSpeedDisplay; @@ -566,7 +596,10 @@ namespace MatterHackers.MatterControl if (ActivePrinterProfile.Instance.ActivePrinter == null) { // no printer selected - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + foreach(DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -583,7 +616,10 @@ namespace MatterHackers.MatterControl case PrinterConnectionAndCommunication.CommunicationStates.Disconnected: case PrinterConnectionAndCommunication.CommunicationStates.AttemptingToConnect: case PrinterConnectionAndCommunication.CommunicationStates.FailedToConnect: - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + foreach (DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -593,7 +629,10 @@ namespace MatterHackers.MatterControl case PrinterConnectionAndCommunication.CommunicationStates.FinishedPrint: case PrinterConnectionAndCommunication.CommunicationStates.Connected: - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + foreach (DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); @@ -602,7 +641,10 @@ namespace MatterHackers.MatterControl break; case PrinterConnectionAndCommunication.CommunicationStates.PrintingToSd: - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + foreach (DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Disabled); @@ -611,7 +653,10 @@ namespace MatterHackers.MatterControl break; case PrinterConnectionAndCommunication.CommunicationStates.PrintingFromSd: - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + foreach (DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); @@ -628,7 +673,10 @@ namespace MatterHackers.MatterControl case PrinterConnectionAndCommunication.DetailedPrintingState.HeatingBed: case PrinterConnectionAndCommunication.DetailedPrintingState.HeatingExtruder: case PrinterConnectionAndCommunication.DetailedPrintingState.Printing: - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + foreach (DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); @@ -642,7 +690,10 @@ namespace MatterHackers.MatterControl break; case PrinterConnectionAndCommunication.CommunicationStates.Paused: - extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + foreach (DisableableWidget extruderTemperatureControlWidget in extruderWidgetContainers) + { + extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); + } bedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); movementControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); fanControlsContainer.SetEnableLevel(DisableableWidget.EnableLevel.Enabled); diff --git a/PrinterControls/TemperatureIndicator.cs b/PrinterControls/TemperatureIndicator.cs index f02defcb9..722c6bc56 100644 --- a/PrinterControls/TemperatureIndicator.cs +++ b/PrinterControls/TemperatureIndicator.cs @@ -36,6 +36,7 @@ using MatterHackers.Localizations; using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.VectorMath; using MatterHackers.MatterControl.SlicerConfiguration; +using MatterHackers.MatterControl.CustomWidgets; namespace MatterHackers.MatterControl { @@ -57,9 +58,7 @@ namespace MatterHackers.MatterControl { this.label = label; this.editWindowLabel = editWindowLabel; - SetDisplayAttributes(); - AddChildElements(); - tempOffButton.DebugShowBounds = true; + SetDisplayAttributes(); } protected abstract double GetActualTemperature(); @@ -103,7 +102,7 @@ namespace MatterHackers.MatterControl } protected FlowLayoutWidget tempSliderContainer; EditTemperaturePresetsWindow editSettingsWindow; - void AddChildElements() + protected void AddChildElements() { Button editButton; AltGroupBox groupBox = new AltGroupBox(textImageButtonFactory.GenerateGroupBoxLabelWithEdit(label, out editButton)); @@ -127,7 +126,7 @@ namespace MatterHackers.MatterControl groupBox.ClientArea.VAnchor = Agg.UI.VAnchor.FitToChildren; FlowLayoutWidget controlRow = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom); - controlRow.Margin = new BorderDouble(top: 5)* TextWidget.GlobalPointSizeScaleRatio; + controlRow.Margin = new BorderDouble(top: 2)* TextWidget.GlobalPointSizeScaleRatio; controlRow.HAnchor |= HAnchor.ParentLeftRight; { // put in the temperature slider and preset buttons @@ -149,7 +148,7 @@ namespace MatterHackers.MatterControl { FlowLayoutWidget temperatureIndicator = new FlowLayoutWidget(); temperatureIndicator.HAnchor = Agg.UI.HAnchor.ParentLeftRight; - temperatureIndicator.Margin = new BorderDouble(bottom: 6)* TextWidget.GlobalPointSizeScaleRatio; + temperatureIndicator.Margin = new BorderDouble(bottom: 0)* TextWidget.GlobalPointSizeScaleRatio; temperatureIndicator.Padding = new BorderDouble(0, 3)* TextWidget.GlobalPointSizeScaleRatio; // put in the actual temperature controls @@ -207,10 +206,13 @@ namespace MatterHackers.MatterControl //temperatureIndicator.AddChild(helpTextLink); this.presetButtonsContainer = GetPresetsContainer(); + temperatureIndicator.AddChild(new HorizontalSpacer()); + temperatureIndicator.AddChild(presetButtonsContainer); + controlRow.AddChild(temperatureIndicator); //controlRow.AddChild(helperTextWidget); - controlRow.AddChild(this.presetButtonsContainer); + //controlRow.AddChild(this.presetButtonsContainer); //controlRow.AddChild(tempSliderContainer); } } @@ -234,7 +236,7 @@ namespace MatterHackers.MatterControl presetsLabel.VAnchor = VAnchor.ParentCenter; //presetsContainer.AddChild(presetsLabel); - SortedDictionary labels = GetTemperaturePresetLabels(); + SortedDictionary labels = GetTemperaturePresetLabels(); foreach (KeyValuePair keyValue in labels) { @@ -252,10 +254,10 @@ namespace MatterHackers.MatterControl }; } - this.textImageButtonFactory.FixedWidth = 76* TextWidget.GlobalPointSizeScaleRatio; + this.textImageButtonFactory.FixedWidth = 76 * TextWidget.GlobalPointSizeScaleRatio; { - Button tempButton = textImageButtonFactory.Generate("Preheat".Localize().ToUpper()); - tempButton.Margin = new BorderDouble(right: 5)* TextWidget.GlobalPointSizeScaleRatio; + Button tempButton = textImageButtonFactory.Generate("Preheat".Localize().ToUpper()); + tempButton.Margin = new BorderDouble(right: 5) * TextWidget.GlobalPointSizeScaleRatio; presetsContainer.AddChild(tempButton); // We push the value into a temp double so that the function will not point to a shared keyValue instance. @@ -266,7 +268,7 @@ namespace MatterHackers.MatterControl tempSliderContainer.Visible = false; }; } - this.textImageButtonFactory.FixedWidth = 38* TextWidget.GlobalPointSizeScaleRatio; + this.textImageButtonFactory.FixedWidth = 38 * TextWidget.GlobalPointSizeScaleRatio; return presetsContainer; } @@ -424,9 +426,20 @@ namespace MatterHackers.MatterControl public class ExtruderTemperatureControlWidget : TemperatureControlBase { + int extruderNumber = 1; + public ExtruderTemperatureControlWidget() - : base(LocalizedString.Get("Extruder Temperature Override"), LocalizedString.Get("Extruder Temperature Settings")) - { + : base(LocalizedString.Get("Extruder Temperature"), LocalizedString.Get("Extruder Temperature Settings")) + { + AddChildElements(); + AddHandlers(); + } + + public ExtruderTemperatureControlWidget(int extruderNumber) + : base(string.Format("{0} {1}", "Extruder Temperature".Localize(), extruderNumber), LocalizedString.Get("Extruder Temperature Settings")) + { + this.extruderNumber = extruderNumber; + AddChildElements(); AddHandlers(); } @@ -461,14 +474,14 @@ namespace MatterHackers.MatterControl protected override string GetTemperaturePresets() { string default_presets = ",0,,0,,0,250"; - string presets; - if (UserSettings.Instance.get("Extruder1PresetTemps") == null) + string presets; + string presetKey = string.Format("Extruder{0}PresetTemps", this.extruderNumber); + if (UserSettings.Instance.get(presetKey) == null) { - UserSettings.Instance.set("Extruder1PresetTemps", default_presets); - + UserSettings.Instance.set(presetKey, default_presets); } - presets = UserSettings.Instance.get("Extruder1PresetTemps"); + presets = UserSettings.Instance.get(presetKey); return presets; } @@ -477,14 +490,22 @@ namespace MatterHackers.MatterControl StringEventArgs stringEvent = e as StringEventArgs; if (stringEvent != null && stringEvent.Data != null) { - UserSettings.Instance.set("Extruder1PresetTemps", stringEvent.Data); + UserSettings.Instance.set(string.Format("Extruder{0}PresetTemps", extruderNumber), stringEvent.Data); ApplicationController.Instance.ReloadAdvancedControlsPanel(); } } protected override double GetPreheatTemperature() { - return Convert.ToDouble(ActiveSliceSettings.Instance.GetActiveValue("first_layer_temperature")); + string tempValue = ActiveSliceSettings.Instance.GetMaterialValue("temperature", extruderNumber); + if (tempValue == "Unknown") + { + return 0.0; + } + else + { + return Convert.ToDouble(tempValue); + } } protected override double GetTargetTemperature() @@ -520,8 +541,9 @@ namespace MatterHackers.MatterControl public class BedTemperatureControlWidget : TemperatureControlBase { public BedTemperatureControlWidget() - : base(LocalizedString.Get("Bed Temperature Override"), LocalizedString.Get("Bed Temperature Settings")) - { + : base(LocalizedString.Get("Bed Temperature"), LocalizedString.Get("Bed Temperature Settings")) + { + AddChildElements(); AddHandlers(); } diff --git a/PrinterControls/XYZJogControls.cs b/PrinterControls/XYZJogControls.cs index dd2b90453..d743d8a02 100644 --- a/PrinterControls/XYZJogControls.cs +++ b/PrinterControls/XYZJogControls.cs @@ -63,8 +63,6 @@ namespace MatterHackers.MatterControl { moveButtonFactory.normalTextColor = RGBA_Bytes.Black; - - double distanceBetweenControls = 12; double buttonSeparationDistance = 10; diff --git a/SlicerConfiguration/ActiveSliceSettings.cs b/SlicerConfiguration/ActiveSliceSettings.cs index f586cab9e..5de41ae5d 100644 --- a/SlicerConfiguration/ActiveSliceSettings.cs +++ b/SlicerConfiguration/ActiveSliceSettings.cs @@ -160,6 +160,42 @@ namespace MatterHackers.MatterControl.SlicerConfiguration } } + public string GetMaterialValue(string sliceSetting, int extruderIndex) + { + int numberOfActiveLayers = activeSettingsLayers.Count; + string settingValue = null; + if (ActivePrinterProfile.Instance.GetMaterialSetting(extruderIndex) != 0) + { + int materialOneSettingsID = ActivePrinterProfile.Instance.GetMaterialSetting(extruderIndex); + DataStorage.SliceSettingsCollection collection = DataStorage.Datastore.Instance.dbSQLite.Table().Where(v => v.Id == materialOneSettingsID).Take(1).FirstOrDefault(); + SettingsLayer printerSettingsLayer = LoadConfigurationSettingsFromDatastore(collection); + if (printerSettingsLayer.settingsDictionary.ContainsKey(sliceSetting)) + { + settingValue = printerSettingsLayer.settingsDictionary[sliceSetting].Value; + } + } + + if (settingValue == null) + { + //Go through settings layers one-by-one, starting with quality (index = 2), in reverse order, until we find a layer that contains the value + int startingLayer = Math.Min(numberOfActiveLayers - 1, 2); + for (int i = startingLayer; i >= 0; i--) + { + if (activeSettingsLayers[i].settingsDictionary.ContainsKey(sliceSetting)) + { + settingValue = activeSettingsLayers[i].settingsDictionary[sliceSetting].Value; + } + } + } + + if (settingValue == null) + { + settingValue = "Unknown"; + } + + return "Unknown"; + } + public void LoadSettingsForQuality() { if (ActivePrinterProfile.Instance.ActivePrinter != null) diff --git a/SlicerConfiguration/SliceSettingsWidget.cs b/SlicerConfiguration/SliceSettingsWidget.cs index 13fb63776..ec14d59bc 100644 --- a/SlicerConfiguration/SliceSettingsWidget.cs +++ b/SlicerConfiguration/SliceSettingsWidget.cs @@ -47,6 +47,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration "has_heated_bed", "has_sd_card_reader", "extruder_count", + "extruders_share_temperature", }; const string SliceSettingsShowHelpEntry = "SliceSettingsShowHelp";