Revise temperature widgets

This commit is contained in:
John Lewin 2017-06-27 18:41:34 -07:00
parent 8564ba8969
commit bd10edc2aa
19 changed files with 382 additions and 1198 deletions

View file

@ -86,7 +86,7 @@ namespace MatterHackers.MatterControl.ActionBar
{
var temperatureWidgets = new FlowLayoutWidget();
{
extruderTemperatureWidget = new TemperatureWidgetExtruder();
extruderTemperatureWidget = new TemperatureWidgetExtruder(ApplicationController.Instance.Theme.MenuButtonFactory);
temperatureWidgets.AddChild(extruderTemperatureWidget);
bedTemperatureWidget = new TemperatureWidgetBed();

View file

@ -29,76 +29,108 @@ either expressed or implied, of the FreeBSD Project.
using System;
using MatterHackers.Agg;
using MatterHackers.Agg.PlatformAbstract;
using MatterHackers.Agg.UI;
using MatterHackers.Agg.VertexSource;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.PrinterCommunication;
using MatterHackers.MatterControl.PartPreviewWindow;
namespace MatterHackers.MatterControl.ActionBar
{
internal class TemperatureWidgetBase : GuiWidget
internal class TemperatureWidgetBase : PopupButton
{
private TextWidget currentTempIndicator;
protected TextWidget temperatureTypeName;
protected TextWidget CurrentTempIndicator;
private TextWidget goalTempIndicator;
protected TextWidget DirectionIndicator;
protected TextImageButtonFactory whiteButtonFactory = new TextImageButtonFactory()
protected ImageWidget ImageWidget = new ImageWidget(StaticData.Instance.LoadIcon("Hotend.png"))
{
FixedHeight = 18 * GuiWidget.DeviceScale,
fontSize = 7,
normalFillColor = ApplicationController.Instance.Theme.TabBodyBackground,
normalTextColor = ActiveTheme.Instance.PrimaryTextColor,
VAnchor = VAnchor.ParentCenter,
Margin = new BorderDouble(right: 5)
};
private static RGBA_Bytes borderColor = new RGBA_Bytes(255, 255, 255);
protected EventHandler unregisterEvents;
public string IndicatorValue
{
get
{
return currentTempIndicator.Text;
}
set
{
if (currentTempIndicator.Text != value)
{
currentTempIndicator.Text = value;
}
}
}
protected virtual int ActualTemperature { get; }
protected virtual int TargetTemperature { get; }
public TemperatureWidgetBase(string textValue)
: base(52 * GuiWidget.DeviceScale, 52 * GuiWidget.DeviceScale)
{
this.BackgroundColor = ApplicationController.Instance.Theme.SlightShade;
this.Margin = new BorderDouble(0, 2) * GuiWidget.DeviceScale;
this.HAnchor = HAnchor.FitToChildren;
this.VAnchor = VAnchor.FitToChildren;
this.Cursor = Cursors.Hand;
temperatureTypeName = new TextWidget("", pointSize: 8)
this.AlignToRightEdge = true;
var container = new FlowLayoutWidget()
{
AutoExpandBoundsToText = true,
HAnchor = HAnchor.ParentCenter,
VAnchor = VAnchor.ParentTop,
Margin = new BorderDouble(0, 3),
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.FitToChildren,
VAnchor = VAnchor.FitToChildren,
Padding = new BorderDouble(5)
};
this.AddChild(temperatureTypeName);
this.AddChild(container);
currentTempIndicator = new TextWidget(textValue, pointSize: 11)
container.AddChild(this.ImageWidget);
CurrentTempIndicator = new TextWidget(textValue, pointSize: 11)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
HAnchor = HAnchor.ParentCenter,
VAnchor = VAnchor.ParentCenter,
AutoExpandBoundsToText = true
};
this.AddChild(currentTempIndicator);
container.AddChild(CurrentTempIndicator);
var buttonContainer = new GuiWidget()
container.AddChild(new TextWidget("/") { TextColor = ActiveTheme.Instance.PrimaryTextColor });
goalTempIndicator = new TextWidget(textValue, pointSize: 11)
{
HAnchor = Agg.UI.HAnchor.ParentLeftRight,
Height = 18 * GuiWidget.DeviceScale
TextColor = ActiveTheme.Instance.PrimaryTextColor,
VAnchor = VAnchor.ParentCenter,
AutoExpandBoundsToText = true
};
this.AddChild(buttonContainer);
container.AddChild(goalTempIndicator);
DirectionIndicator = new TextWidget(textValue, pointSize: 11)
{
TextColor = ActiveTheme.Instance.PrimaryTextColor,
VAnchor = VAnchor.ParentCenter,
AutoExpandBoundsToText = true,
Margin = new BorderDouble(left: 5)
};
container.AddChild(DirectionIndicator);
}
protected void DisplayCurrentTemperature()
{
int actualTemperature = this.ActualTemperature;
int targetTemperature = this.TargetTemperature;
if (targetTemperature > 0)
{
int targetTemp = (int)(targetTemperature + 0.5);
int actualTemp = (int)(actualTemperature + 0.5);
this.goalTempIndicator.Text = $"{targetTemperature:0.#}°";
this.DirectionIndicator.Text = (targetTemp < actualTemp) ? "↓" : "↑";
}
else
{
this.DirectionIndicator.Text = "";
}
this.CurrentTempIndicator.Text = $"{actualTemperature:0.#}";
}
protected virtual void SetTargetTemperature() { }
protected virtual GuiWidget GetPopupContent() { return null; }
public override void OnClosed(ClosedEventArgs e)
{
unregisterEvents?.Invoke(this, null);
base.OnClosed(e);
}
}
}
}

View file

@ -27,9 +27,11 @@ 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.PlatformAbstract;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.ConfigurationPage;
using MatterHackers.MatterControl.PrinterCommunication;
using MatterHackers.MatterControl.SlicerConfiguration;
@ -37,41 +39,25 @@ namespace MatterHackers.MatterControl.ActionBar
{
internal class TemperatureWidgetBed : TemperatureWidgetBase
{
private EventHandler unregisterEvents;
private string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.".Localize();
private string waitingForBedToHeatMessage = "The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in SETTINGS -> Filament -> Temperatures.\n\n{1}".Localize();
private string waitingForBedToHeatTitle = "Waiting For Bed To Heat".Localize();
//Not currently hooked up to anything
public TemperatureWidgetBed()
: base("150.3°")
{
temperatureTypeName.Text = "Print Bed";
DisplayCurrentTemperature();
ToolTipText = "Current bed temperature".Localize();
this.DisplayCurrentTemperature();
this.ToolTipText = "Current bed temperature".Localize();
this.ImageWidget.Image = StaticData.Instance.LoadIcon("Bed.png");
this.PopupContent = this.GetPopupContent();
PrinterConnection.Instance.BedTemperatureRead.RegisterEvent((s, e) => DisplayCurrentTemperature(), ref unregisterEvents);
}
private void DisplayCurrentTemperature()
{
string tempDirectionIndicator = "";
protected override int TargetTemperature => (int)PrinterConnection.Instance.TargetBedTemperature;
if (PrinterConnection.Instance.TargetBedTemperature > 0)
{
if ((int)(PrinterConnection.Instance.TargetBedTemperature + 0.5) < (int)(PrinterConnection.Instance.ActualBedTemperature + 0.5))
{
tempDirectionIndicator = "↓";
}
else if ((int)(PrinterConnection.Instance.TargetBedTemperature + 0.5) > (int)(PrinterConnection.Instance.ActualBedTemperature + 0.5))
{
tempDirectionIndicator = "↑";
}
}
this.IndicatorValue = string.Format(" {0:0.#}°{1}", PrinterConnection.Instance.ActualBedTemperature, tempDirectionIndicator);
}
protected override int ActualTemperature => (int)PrinterConnection.Instance.ActualBedTemperature;
protected override void SetTargetTemperature()
{
@ -93,10 +79,65 @@ namespace MatterHackers.MatterControl.ActionBar
}
}
public override void OnClosed(ClosedEventArgs e)
protected override GuiWidget GetPopupContent()
{
unregisterEvents?.Invoke(this, null);
base.OnClosed(e);
var widget = new IgnoredPopupWidget()
{
Width = 300,
HAnchor = HAnchor.AbsolutePosition,
VAnchor = VAnchor.FitToChildren,
BackgroundColor = RGBA_Bytes.White,
Padding = new BorderDouble(12, 0)
};
var container = new FlowLayoutWidget(FlowDirection.TopToBottom)
{
HAnchor = HAnchor.ParentLeftRight,
VAnchor = VAnchor.FitToChildren | VAnchor.ParentTop,
BackgroundColor = RGBA_Bytes.White
};
widget.AddChild(container);
container.AddChild(new SettingsItem(
"Heated Bed".Localize(),
new SettingsItem.ToggleSwitchConfig()
{
Checked = false,
ToggleAction = (itemChecked) =>
{
var goalTemp = itemChecked ? ActiveSliceSettings.Instance.GetValue<double>(SettingsKey.bed_temperature) : 0;
if (PrinterConnection.Instance.PrinterIsPrinting
&& PrinterConnection.Instance.PrintingState == DetailedPrintingState.HeatingBed
&& goalTemp != PrinterConnection.Instance.TargetBedTemperature)
{
string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.";
string message = string.Format(
"The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in 'Slice Settings' -> 'Filament'.\n\n{1}",
PrinterConnection.Instance.TargetBedTemperature,
sliceSettingsNote);
StyledMessageBox.ShowMessageBox(null, message, "Waiting For Bed To Heat");
}
else
{
if (itemChecked)
{
SetTargetTemperature();
}
else
{
PrinterConnection.Instance.TargetBedTemperature = 0;
//string displayString = string.Format("{0:0.0}°C", PrinterConnectionAndCommunication.Instance.TargetBedTemperature);
//targetTemperatureDisplay.SetDisplayString(displayString);
}
}
}
},
enforceGutter: false));
return widget;
}
}
}

View file

@ -27,11 +27,14 @@ of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using MatterHackers.Localizations;
using MatterHackers.MatterControl.PrinterCommunication;
using MatterHackers.MatterControl.SlicerConfiguration;
using System;
using System.Linq;
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.ConfigurationPage;
using MatterHackers.MatterControl.PrinterCommunication;
using MatterHackers.MatterControl.PrinterControls;
using MatterHackers.MatterControl.SlicerConfiguration;
namespace MatterHackers.MatterControl.ActionBar
{
@ -39,38 +42,28 @@ namespace MatterHackers.MatterControl.ActionBar
{
// Extruder widget is hard-wired to extruder 0
private const int extruderIndex = 0;
private EventHandler unregisterEvents;
private int moveAmount = 1;
private string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.".Localize();
private string waitingForExtruderToHeatMessage = "The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}".Localize();
public TemperatureWidgetExtruder()
private TextImageButtonFactory buttonFactory;
public TemperatureWidgetExtruder(TextImageButtonFactory buttonFactory)
: base("150.3°")
{
temperatureTypeName.Text = "Extruder";
DisplayCurrentTemperature();
this.buttonFactory = buttonFactory;
this.DisplayCurrentTemperature();
this.ToolTipText = "Current extruder temperature".Localize();
ToolTipText = "Current extruder temperature".Localize();
this.PopupContent = this.GetPopupContent();
PrinterConnection.Instance.ExtruderTemperatureRead.RegisterEvent((s, e) => DisplayCurrentTemperature(), ref unregisterEvents);
}
private void DisplayCurrentTemperature()
{
string tempDirectionIndicator = "";
if (PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex) > 0)
{
if ((int)(PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex) + 0.5) < (int)(PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex) + 0.5))
{
tempDirectionIndicator = "↓";
}
else if ((int)(PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex) + 0.5) > (int)(PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex) + 0.5))
{
tempDirectionIndicator = "↑";
}
}
this.IndicatorValue = string.Format(" {0:0.#}°{1}", PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex), tempDirectionIndicator);
}
protected override int TargetTemperature => (int)PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex);
protected override int ActualTemperature => (int)PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex);
protected override void SetTargetTemperature()
{
@ -92,10 +85,173 @@ namespace MatterHackers.MatterControl.ActionBar
}
}
public override void OnClosed(ClosedEventArgs e)
protected override GuiWidget GetPopupContent()
{
unregisterEvents?.Invoke(this, null);
base.OnClosed(e);
var widget = new IgnoredPopupWidget()
{
Width = 300,
HAnchor = HAnchor.AbsolutePosition,
VAnchor = VAnchor.FitToChildren,
BackgroundColor = RGBA_Bytes.White,
Padding = new BorderDouble(12, 0)
};
var container = new FlowLayoutWidget(FlowDirection.TopToBottom)
{
HAnchor = HAnchor.ParentLeftRight,
VAnchor = VAnchor.FitToChildren | VAnchor.ParentTop,
BackgroundColor = RGBA_Bytes.White
};
container.AddChild(new SettingsItem(
string.Format("{0} {1}", "HotEnd".Localize(), extruderIndex + 1),
new SettingsItem.ToggleSwitchConfig()
{
Checked = false,
ToggleAction = (itemChecked) =>
{
if (itemChecked)
{
// Set to goal temp
SetTargetTemperature();
}
else
{
// Turn off extruder
PrinterConnection.Instance.SetTargetExtruderTemperature(extruderIndex, 0);
}
}
},
enforceGutter: false));
var presetsSelector = new PresetSelectorWidget(string.Format($"{"Material".Localize()} {extruderIndex + 1}"), RGBA_Bytes.Transparent, NamedSettingsLayers.Material, extruderIndex)
{
Margin = 0,
BackgroundColor = RGBA_Bytes.Transparent,
HAnchor = HAnchor.AbsolutePosition,
Width = 150
};
this.Width = 150;
// HACK: remove undesired item
var label = presetsSelector.Children<TextWidget>().FirstOrDefault();
label.Close();
var pulldownContainer = presetsSelector.FindNamedChildRecursive("Preset Pulldown Container");
if (pulldownContainer != null)
{
pulldownContainer.Padding = 0;
}
var dropList = presetsSelector.FindNamedChildRecursive("Material") as DropDownList;
if (dropList != null)
{
dropList.TextColor = buttonFactory.normalTextColor;
}
container.AddChild(new SettingsItem("Material".Localize(), presetsSelector, enforceGutter: false));
widget.AddChild(container);
// Extrude buttons {{
var moveButtonFactory = new TextImageButtonFactory()
{
FixedHeight = 20 * GuiWidget.DeviceScale,
FixedWidth = 30 * GuiWidget.DeviceScale,
fontSize = 8,
Margin = new BorderDouble(2, 0),
checkedBorderColor = buttonFactory.normalTextColor,
normalTextColor = buttonFactory.normalTextColor,
normalFillColor = buttonFactory.normalFillColor,
hoverFillColor = buttonFactory.hoverFillColor,
pressedFillColor = buttonFactory.pressedFillColor,
pressedTextColor = buttonFactory.pressedTextColor
};
var buttonContainer = new FlowLayoutWidget()
{
HAnchor = HAnchor.FitToChildren,
VAnchor = VAnchor.FitToChildren
};
var retractButton = buttonFactory.Generate("Retract".Localize());
retractButton.ToolTipText = "Retract filament".Localize();
retractButton.Margin = new BorderDouble(8, 0);
retractButton.Click += (s, e) =>
{
PrinterConnection.Instance.MoveExtruderRelative(moveAmount * -1, MovementControls.EFeedRate(extruderIndex), extruderIndex);
};
buttonContainer.AddChild(retractButton);
var extrudeButton = buttonFactory.Generate("Extrude".Localize());
extrudeButton.ToolTipText = "Extrude filament".Localize();
extrudeButton.Margin = 0;
extrudeButton.Click += (s, e) =>
{
PrinterConnection.Instance.MoveExtruderRelative(moveAmount, MovementControls.EFeedRate(extruderIndex), extruderIndex);
};
buttonContainer.AddChild(extrudeButton);
container.AddChild(new SettingsItem(
string.Format("{0} {1}", "Extruder".Localize(), extruderIndex + 1),
buttonContainer,
enforceGutter: false));
var moveButtonsContainer = new FlowLayoutWidget()
{
VAnchor = VAnchor.FitToChildren,
HAnchor = HAnchor.FitToChildren,
Margin = new BorderDouble(0, 3)
};
RadioButton oneButton = moveButtonFactory.GenerateRadioButton("1");
oneButton.VAnchor = VAnchor.ParentCenter;
oneButton.CheckedStateChanged += (s, e) =>
{
if (oneButton.Checked)
{
moveAmount = 1;
}
};
moveButtonsContainer.AddChild(oneButton);
RadioButton tenButton = moveButtonFactory.GenerateRadioButton("10");
tenButton.VAnchor = VAnchor.ParentCenter;
tenButton.CheckedStateChanged += (s, e) =>
{
if (tenButton.Checked)
{
moveAmount = 10;
}
};
moveButtonsContainer.AddChild(tenButton);
RadioButton oneHundredButton = moveButtonFactory.GenerateRadioButton("100");
oneHundredButton.VAnchor = VAnchor.ParentCenter;
oneHundredButton.CheckedStateChanged += (s, e) =>
{
if (oneHundredButton.Checked)
{
moveAmount = 100;
}
};
moveButtonsContainer.AddChild(oneHundredButton);
tenButton.Checked = true;
moveButtonsContainer.AddChild(new TextWidget("mm", textColor: buttonFactory.normalTextColor, pointSize: 8)
{
VAnchor = VAnchor.ParentCenter,
Margin = new BorderDouble(3, 0)
});
container.AddChild(new SettingsItem("Distance".Localize(), moveButtonsContainer, enforceGutter: false));
// Extrude buttons }}
return widget;
}
}
}

View file

@ -114,7 +114,7 @@ namespace MatterHackers.MatterControl.ActionBar
tempWidgets.Width = 120;
extruderTemperatureWidget = new TemperatureWidgetExtruder();
extruderTemperatureWidget = new TemperatureWidgetExtruder(ApplicationController.Instance.Theme.MenuButtonFactory);
//extruderTemperatureWidget.Margin = new BorderDouble(right: 6);
extruderTemperatureWidget.VAnchor = VAnchor.ParentTop;

View file

@ -187,6 +187,7 @@ namespace MatterHackers.MatterControl
pressedTextColor = RGBA_Bytes.Black,
disabledTextColor = theme.TertiaryBackgroundColor,
normalFillColor = RGBA_Bytes.LightGray,
pressedFillColor = RGBA_Bytes.LightGray,
Margin = new BorderDouble(8, 0),
borderWidth = 0,
FixedHeight = 32,

View file

@ -18,9 +18,10 @@ namespace MatterHackers.MatterControl.ConfigurationPage
private RGBA_Bytes menuTextColor = RGBA_Bytes.Black;
public SettingsItem(string text, ToggleSwitchConfig toggleSwitchConfig = null, GuiWidget optionalControls = null, ImageBuffer iconImage = null)
public SettingsItem(string text, ToggleSwitchConfig toggleSwitchConfig = null, GuiWidget optionalControls = null, ImageBuffer iconImage = null, bool enforceGutter = true)
: base(FlowDirection.LeftToRight)
{
this.HAnchor = HAnchor.ParentLeftRight;
var switchContainer = new FlowLayoutWidget()
{
VAnchor = VAnchor.ParentCenter,
@ -40,16 +41,16 @@ namespace MatterHackers.MatterControl.ConfigurationPage
switchContainer.SetBoundsToEncloseChildren();
}
CreateChildControls(text, switchContainer, optionalControls, iconImage);
CreateChildControls(text, switchContainer, optionalControls, enforceGutter, iconImage);
}
public SettingsItem (string text, GuiWidget settingsControls, GuiWidget optionalControls = null, ImageBuffer iconImage = null)
public SettingsItem (string text, GuiWidget settingsControls, GuiWidget optionalControls = null, ImageBuffer iconImage = null, bool enforceGutter = true)
: base (FlowDirection.LeftToRight)
{
CreateChildControls(text, settingsControls, optionalControls, iconImage);
CreateChildControls(text, settingsControls, optionalControls, enforceGutter, iconImage);
}
private void CreateChildControls(string text, GuiWidget settingsControls, GuiWidget optionalControls, ImageBuffer imageBuffer = null)
private void CreateChildControls(string text, GuiWidget settingsControls, GuiWidget optionalControls, bool enforceGutter, ImageBuffer imageBuffer = null)
{
this.HAnchor = HAnchor.ParentLeftRight;
this.MinimumSize = new Vector2(0, 40);
@ -61,13 +62,6 @@ namespace MatterHackers.MatterControl.ConfigurationPage
optionalControls.VAnchor |= VAnchor.ParentCenter;
}
var sectionLabel = new TextWidget(text)
{
AutoExpandBoundsToText = true,
TextColor = menuTextColor,
VAnchor = VAnchor.ParentCenter
};
if (imageBuffer != null)
{
if (!ActiveTheme.Instance.IsDarkTheme)
@ -81,7 +75,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage
VAnchor = VAnchor.ParentCenter
});
}
else
else if (enforceGutter)
{
// Add an icon place holder to get consistent label indenting on items lacking icons
this.AddChild(new GuiWidget()
@ -92,13 +86,20 @@ namespace MatterHackers.MatterControl.ConfigurationPage
});
}
// Add flag to align all labels - fill empty space if sectionIconPath is empty
this.AddChild(sectionLabel, -1);
this.AddChild(new TextWidget(text)
{
AutoExpandBoundsToText = true,
TextColor = menuTextColor,
VAnchor = VAnchor.ParentCenter,
});
this.AddChild(new HorizontalSpacer());
if (optionalControls != null)
{
this.AddChild(optionalControls);
}
this.AddChild(settingsControls);
}
}

View file

@ -266,9 +266,6 @@
<Compile Include="PrinterControls\ControlWidgets\FanControls.cs" />
<Compile Include="PrinterControls\ControlWidgets\MovementControls.cs" />
<Compile Include="PrinterControls\ControlWidgets\PowerControls.cs" />
<Compile Include="PrinterControls\ControlWidgets\TemperatureControls.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="PrinterControls\PrinterConnections\ShowAuthPanel.cs" />
<Compile Include="PrinterControls\TerminalWindow\PrinterOutputCache.cs" />
<Compile Include="PrinterControls\TerminalWindow\TextScrolBar.cs" />
@ -319,9 +316,6 @@
<Compile Include="PartPreviewWindow\CreateDiscreteMeshes.cs" />
<Compile Include="CustomWidgets\EditableNumberDisplay.cs" />
<Compile Include="PartPreviewWindow\PlatingHelper.cs" />
<Compile Include="PrinterControls\EditTemperaturePresetsWindow.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="PrinterControls\ControlWidgets\MacroControls.cs" />
<Compile Include="PrinterControls\EditManualMovementSpeedsWindow.cs" />
<Compile Include="PrinterControls\EditMacrosWindow.cs" />
@ -372,7 +366,6 @@
<Compile Include="PrinterControls\PrinterConnections\BaseConnectionWidget.cs" />
<Compile Include="PrinterControls\PrinterConnections\PrinterChooser.cs" />
<Compile Include="PrinterControls\PrinterConnections\ConnectionWizardPage.cs" />
<Compile Include="PrinterControls\TemperatureIndicator.cs" />
<Compile Include="PrinterControls\XYZJogControls.cs" />
<Compile Include="Library\Widgets\PrintLibraryWidget.cs" />
<Compile Include="Queue\OptionsMenu\ExportToFolderProcess.cs" />

View file

@ -49,8 +49,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
protected bool autoRotating = false;
protected bool allowAutoRotate = false;
protected GuiWidget buttonRightPanelDisabledCover;
public MeshViewerWidget meshViewerWidget;
private EventHandler unregisterEvents;

View file

@ -109,7 +109,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private bool menuVisible = false;
private PopupWidget popupWidget;
//private GuiWidget buttonView;
public PopupButton()
{
}
public PopupButton(GuiWidget buttonView)
{
this.Margin = 3;
@ -139,8 +142,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public override void OnMouseUp(MouseEventArgs mouseEvent)
{
// HACK: Child controls seem to be interfering with this.MouseCaptured - this short term workaround ensure we get clicks but likely mean mouse down outside of the control will fire the popup
bool mouseUpInBounds = this.PositionWithinLocalBounds(mouseEvent.X, mouseEvent.Y);
// Only show the popup if the menu was hidden as the mouse events started
if ((buttonView.MouseCaptured || this.MouseCaptured)
if ((mouseUpInBounds || buttonView?.MouseCaptured == true)
&& !menuVisibileAtMouseDown)
{
ShowPopup();

View file

@ -27,7 +27,6 @@ of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
@ -46,6 +45,7 @@ using MatterHackers.Agg.UI;
using MatterHackers.Agg.VertexSource;
using MatterHackers.DataConverters3D;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.ActionBar;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.MatterControl.Library;
@ -57,8 +57,6 @@ using MatterHackers.PolygonMesh;
using MatterHackers.RayTracer;
using MatterHackers.RenderOpenGl;
using MatterHackers.VectorMath;
using MatterHackers.RayTracer.Traceable;
using MatterHackers.MatterControl.ActionBar;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
@ -273,8 +271,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
GuiWidget viewArea = new GuiWidget();
viewArea.AnchorAll();
{
//viewControls3D.RegisterViewer(meshViewerWidget);
PutOemImageOnBed();
meshViewerWidget.AnchorAll();
@ -447,64 +443,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
editToolBar.AddChild(doEdittingButtonsContainer);
buttonBottomPanel.AddChild(editToolBar);
var extruderTemperatureWidget = new TemperatureWidgetExtruder()
{
VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren | VAnchor.AbsolutePosition,
HAnchor = HAnchor.ParentRight | HAnchor.FitToChildren,
Visible = true,
Margin = new BorderDouble(0, 0, 210, 5)
};
this.AddChild(extruderTemperatureWidget);
if (ActiveSliceSettings.Instance.GetValue<bool>(SettingsKey.has_heated_bed))
{
var bedTemperatureWidget = new TemperatureWidgetBed()
{
VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren | VAnchor.AbsolutePosition,
HAnchor = HAnchor.ParentRight | HAnchor.FitToChildren,
Visible = true,
Margin = new BorderDouble(0, 0, 150, 5)
};
this.AddChild(bedTemperatureWidget);
}
}
GuiWidget buttonRightPanelHolder = new GuiWidget()
{
HAnchor = HAnchor.FitToChildren,
VAnchor = VAnchor.ParentBottomTop
};
buttonRightPanelHolder.Name = "buttonRightPanelHolder";
centerPartPreviewAndControls.AddChild(buttonRightPanelHolder);
buttonRightPanelDisabledCover = new GuiWidget()
{
HAnchor = HAnchor.ParentLeftRight,
VAnchor = VAnchor.ParentBottomTop
};
buttonRightPanelDisabledCover.BackgroundColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryBackgroundColor, 150);
buttonRightPanelHolder.AddChild(buttonRightPanelDisabledCover);
LockEditControls();
GuiWidget leftRightSpacer = new GuiWidget();
leftRightSpacer.HAnchor = HAnchor.ParentLeftRight;
buttonBottomPanel.AddChild(leftRightSpacer);
if (windowType == WindowMode.StandAlone)
{
Button closeButton = smallMarginButtonFactory.Generate("Close".Localize());
buttonBottomPanel.AddChild(closeButton);
closeButton.Click += (sender, e) =>
{
CloseOnIdle();
};
}
mainContainerTopToBottom.AddChild(buttonBottomPanel);
this.AddChild(mainContainerTopToBottom);
var temperatureBar = new FlowLayoutWidget()
{
VAnchor = VAnchor.ParentTop | VAnchor.FitToChildren,
HAnchor = HAnchor.ParentRight | HAnchor.FitToChildren,
Margin = new BorderDouble(right: 165, top: 5)
};
temperatureBar.AddChild(new TemperatureWidgetExtruder(ApplicationController.Instance.Theme.MenuButtonFactory)
{
Margin = new BorderDouble(right: 10)
});
if (ActiveSliceSettings.Instance.GetValue<bool>(SettingsKey.has_heated_bed))
{
temperatureBar.AddChild(new TemperatureWidgetBed());
}
this.AddChild(temperatureBar);
this.AnchorAll();
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
@ -2004,7 +1968,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
viewIsInEditModePreLock = doEdittingButtonsContainer.Visible;
doEdittingButtonsContainer.Visible = false;
buttonRightPanelDisabledCover.Visible = true;
if (viewControls3D.PartSelectVisible == true)
{
viewControls3D.PartSelectVisible = false;
@ -2403,7 +2366,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public void UnlockEditControls()
{
buttonRightPanelDisabledCover.Visible = false;
processingProgressControl.Visible = false;
if (viewIsInEditModePreLock)

View file

@ -1,59 +0,0 @@
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.SlicerConfiguration;
using System.Collections.Generic;
namespace MatterHackers.MatterControl.PrinterControls
{
public class TemperatureControls : ControlWidgetBase
{
public List<DisableableWidget> ExtruderWidgetContainers = new List<DisableableWidget>();
public DisableableWidget BedTemperatureControlWidget;
public TemperatureControls()
{
AltGroupBox temperatureGroupBox = new AltGroupBox(new TextWidget("Temperature".Localize(), pointSize: 18, textColor: ActiveTheme.Instance.SecondaryAccentColor));
temperatureGroupBox.Margin = new BorderDouble(0);
FlowLayoutWidget mainContainer = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom);
mainContainer.HAnchor = HAnchor.ParentLeftRight;
mainContainer.Margin = new BorderDouble(left: 0);
temperatureGroupBox.AddChild(mainContainer);
RGBA_Bytes separatorLineColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 100);
int numberOfHeatedExtruders = ActiveSliceSettings.Instance.Helpers.NumberOfHotEnds();
if (numberOfHeatedExtruders > 1)
{
for (int i = 0; i < numberOfHeatedExtruders; i++)
{
DisableableWidget extruderTemperatureControlWidget = new DisableableWidget();
extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget(i));
mainContainer.AddChild(extruderTemperatureControlWidget);
mainContainer.AddChild(new HorizontalLine(50));
ExtruderWidgetContainers.Add(extruderTemperatureControlWidget);
}
}
else
{
DisableableWidget extruderTemperatureControlWidget = new DisableableWidget();
extruderTemperatureControlWidget.AddChild(new ExtruderTemperatureControlWidget());
mainContainer.AddChild(extruderTemperatureControlWidget);
mainContainer.AddChild(new HorizontalLine(50));
ExtruderWidgetContainers.Add(extruderTemperatureControlWidget);
}
BedTemperatureControlWidget = new DisableableWidget();
BedTemperatureControlWidget.AddChild(new BedTemperatureControlWidget());
if (ActiveSliceSettings.Instance.GetValue<bool>(SettingsKey.has_heated_bed))
{
mainContainer.AddChild(BedTemperatureControlWidget);
}
this.AddChild(temperatureGroupBox);
}
}
}

View file

@ -1,238 +0,0 @@
/*
Copyright (c) 2014, Lars Brubaker
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using MatterHackers.Agg;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.VectorMath;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MatterHackers.MatterControl
{
public class EditTemperaturePresetsWindow : SystemWindow
{
protected TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
private EventHandler functionToCallOnSave;
private List<GuiWidget> listWithValues = new List<GuiWidget>();
public EditTemperaturePresetsWindow(string windowTitle, string temperatureSettings, EventHandler functionToCallOnSave)
: base(360, 300)
{
AlwaysOnTopOfMain = true;
Title = LocalizedString.Get(windowTitle);
FlowLayoutWidget topToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom);
topToBottom.AnchorAll();
topToBottom.Padding = new BorderDouble(3, 0, 3, 5);
FlowLayoutWidget headerRow = new FlowLayoutWidget(FlowDirection.LeftToRight);
headerRow.HAnchor = HAnchor.ParentLeftRight;
headerRow.Margin = new BorderDouble(0, 3, 0, 0);
headerRow.Padding = new BorderDouble(0, 3, 0, 3);
{
string tempShortcutPresetLabel = "Temperature Shortcut Presets".Localize();
string tempShortcutPresetLabelFull = string.Format("{0}:", tempShortcutPresetLabel);
TextWidget elementHeader = new TextWidget(tempShortcutPresetLabelFull, pointSize: 14);
elementHeader.TextColor = ActiveTheme.Instance.PrimaryTextColor;
elementHeader.HAnchor = HAnchor.ParentLeftRight;
elementHeader.VAnchor = Agg.UI.VAnchor.ParentBottom;
headerRow.AddChild(elementHeader);
}
topToBottom.AddChild(headerRow);
FlowLayoutWidget presetsFormContainer = new FlowLayoutWidget(FlowDirection.TopToBottom);
//ListBox printerListContainer = new ListBox();
{
presetsFormContainer.HAnchor = HAnchor.ParentLeftRight;
presetsFormContainer.VAnchor = VAnchor.ParentBottomTop;
presetsFormContainer.Padding = new BorderDouble(3);
presetsFormContainer.BackgroundColor = ActiveTheme.Instance.SecondaryBackgroundColor;
}
topToBottom.AddChild(presetsFormContainer);
this.functionToCallOnSave = functionToCallOnSave;
BackgroundColor = ActiveTheme.Instance.PrimaryBackgroundColor;
double oldHeight = textImageButtonFactory.FixedHeight;
textImageButtonFactory.FixedHeight = 30 * GuiWidget.DeviceScale;
TextWidget tempTypeLabel = new TextWidget(windowTitle, textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10);
tempTypeLabel.Margin = new BorderDouble(3);
tempTypeLabel.HAnchor = HAnchor.ParentLeft;
presetsFormContainer.AddChild(tempTypeLabel);
FlowLayoutWidget leftRightLabels = new FlowLayoutWidget();
leftRightLabels.Padding = new BorderDouble(3, 6);
leftRightLabels.HAnchor |= Agg.UI.HAnchor.ParentLeftRight;
GuiWidget hLabelSpacer = new GuiWidget();
hLabelSpacer.HAnchor = HAnchor.ParentLeftRight;
GuiWidget labelLabelContainer = new GuiWidget();
labelLabelContainer.Width = 66;
labelLabelContainer.Height = 16;
labelLabelContainer.Margin = new BorderDouble(3, 0);
string labelLabelTxt = "Label".Localize();
TextWidget labelLabel = new TextWidget(string.Format(labelLabelTxt), textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10);
labelLabel.HAnchor = HAnchor.ParentLeft;
labelLabel.VAnchor = VAnchor.ParentCenter;
labelLabelContainer.AddChild(labelLabel);
GuiWidget tempLabelContainer = new GuiWidget();
tempLabelContainer.Width = 66;
tempLabelContainer.Height = 16;
tempLabelContainer.Margin = new BorderDouble(3, 0);
TextWidget tempLabel = new TextWidget(string.Format("Temp (C)"), textColor: ActiveTheme.Instance.PrimaryTextColor, pointSize: 10);
tempLabel.HAnchor = HAnchor.ParentLeft;
tempLabel.VAnchor = VAnchor.ParentCenter;
tempLabelContainer.AddChild(tempLabel);
leftRightLabels.AddChild(hLabelSpacer);
leftRightLabels.AddChild(labelLabelContainer);
leftRightLabels.AddChild(tempLabelContainer);
presetsFormContainer.AddChild(leftRightLabels);
// put in the temperature edit controls
string[] settingsArray = temperatureSettings.Split(',');
int preset_count = 1;
int tab_index = 0;
for (int i = 0; i < settingsArray.Count() - 1; i += 2)
{
FlowLayoutWidget leftRightEdit = new FlowLayoutWidget();
leftRightEdit.Padding = new BorderDouble(3);
leftRightEdit.HAnchor |= Agg.UI.HAnchor.ParentLeftRight;
string presetLabelTxt = "Preset".Localize();
TextWidget label = new TextWidget(string.Format("{1} {0}", preset_count, presetLabelTxt), textColor: ActiveTheme.Instance.PrimaryTextColor);
label.VAnchor = VAnchor.ParentCenter;
leftRightEdit.AddChild(label);
leftRightEdit.AddChild(new HorizontalSpacer());
MHTextEditWidget typeEdit = new MHTextEditWidget(settingsArray[i], pixelWidth: 60, tabIndex: tab_index++);
typeEdit.Margin = new BorderDouble(3);
leftRightEdit.AddChild(typeEdit);
listWithValues.Add(typeEdit);
double temperatureValue = 0;
double.TryParse(settingsArray[i + 1], out temperatureValue);
MHNumberEdit valueEdit = new MHNumberEdit(temperatureValue, minValue: 0, pixelWidth: 60, tabIndex: tab_index++);
valueEdit.Margin = new BorderDouble(3);
leftRightEdit.AddChild(valueEdit);
listWithValues.Add(valueEdit);
//leftRightEdit.AddChild(textImageButtonFactory.Generate("Delete".Localize()));
presetsFormContainer.AddChild(leftRightEdit);
preset_count += 1;
}
{
FlowLayoutWidget leftRightEdit = new FlowLayoutWidget();
leftRightEdit.Padding = new BorderDouble(3);
leftRightEdit.HAnchor |= Agg.UI.HAnchor.ParentLeftRight;
TextWidget maxWidgetLabel = new TextWidget("Max Temp".Localize(), textColor: ActiveTheme.Instance.PrimaryTextColor);
maxWidgetLabel.VAnchor = VAnchor.ParentCenter;
leftRightEdit.AddChild(maxWidgetLabel);
leftRightEdit.AddChild(new HorizontalSpacer());
double maxTemperature = 0;
double.TryParse(settingsArray[settingsArray.Count() - 1], out maxTemperature);
MHNumberEdit valueEdit = new MHNumberEdit(maxTemperature, minValue: 0, pixelWidth: 60, tabIndex: tab_index);
valueEdit.Margin = new BorderDouble(3);
leftRightEdit.AddChild(valueEdit);
listWithValues.Add(valueEdit);
presetsFormContainer.AddChild(leftRightEdit);
}
textImageButtonFactory.FixedHeight = oldHeight;
ShowAsSystemWindow();
MinimumSize = new Vector2(360, 300);
Button savePresetsButton = textImageButtonFactory.Generate("Save".Localize());
savePresetsButton.Click += save_Click;
Button cancelPresetsButton = textImageButtonFactory.Generate("Cancel".Localize());
cancelPresetsButton.Click += (sender, e) => { CloseOnIdle(); };
FlowLayoutWidget buttonRow = new FlowLayoutWidget();
buttonRow.HAnchor = HAnchor.ParentLeftRight;
buttonRow.Padding = new BorderDouble(0, 3);
GuiWidget hButtonSpacer = new GuiWidget();
hButtonSpacer.HAnchor = HAnchor.ParentLeftRight;
buttonRow.AddChild(savePresetsButton);
buttonRow.AddChild(hButtonSpacer);
buttonRow.AddChild(cancelPresetsButton);
topToBottom.AddChild(buttonRow);
AddChild(topToBottom);
}
private void save_Click(object sender, EventArgs mouseEvent)
{
UiThread.RunOnIdle(save_OnIdle);
}
private void save_OnIdle()
{
bool first = true;
StringBuilder settingString = new StringBuilder();
foreach (GuiWidget valueToAdd in listWithValues)
{
if (!first)
{
settingString.Append(",");
}
settingString.Append(valueToAdd.Text);
first = false;
}
functionToCallOnSave(this, new StringEventArgs(settingString.ToString()));
CloseOnIdle();
}
}
}

View file

@ -81,8 +81,6 @@ namespace MatterHackers.MatterControl
private MovementControls movementControlsContainer;
private TemperatureControls temperatureControlsContainer;
private TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
private DisableableWidget tuningAdjustmentControlsContainer;
@ -107,7 +105,6 @@ namespace MatterHackers.MatterControl
};
AddActionControls(controlsTopToBottomLayout);
AddTemperatureControls(controlsTopToBottomLayout);
AddMovementControls(controlsTopToBottomLayout);
if (!ActiveSliceSettings.Instance.GetValue<bool>(SettingsKey.has_hardware_leveling))
@ -185,12 +182,6 @@ namespace MatterHackers.MatterControl
controlsTopToBottomLayout.AddChild(movementControlsContainer);
}
private void AddTemperatureControls(FlowLayoutWidget controlsTopToBottomLayout)
{
temperatureControlsContainer = new TemperatureControls();
controlsTopToBottomLayout.AddChild(temperatureControlsContainer);
}
private void onPrinterStatusChanged(object sender, EventArgs e)
{
SetVisibleControls();
@ -201,12 +192,6 @@ namespace MatterHackers.MatterControl
{
if (!ActiveSliceSettings.Instance.PrinterSelected)
{
// no printer selected
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
@ -222,11 +207,6 @@ namespace MatterHackers.MatterControl
case CommunicationStates.Disconnected:
case CommunicationStates.AttemptingToConnect:
case CommunicationStates.FailedToConnect:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
@ -243,11 +223,6 @@ namespace MatterHackers.MatterControl
case CommunicationStates.FinishedPrint:
case CommunicationStates.Connected:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
@ -262,11 +237,6 @@ namespace MatterHackers.MatterControl
break;
case CommunicationStates.PrintingFromSd:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
@ -282,11 +252,6 @@ namespace MatterHackers.MatterControl
case DetailedPrintingState.HeatingBed:
case DetailedPrintingState.HeatingExtruder:
case DetailedPrintingState.Printing:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
actionControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
@ -306,11 +271,6 @@ namespace MatterHackers.MatterControl
break;
case CommunicationStates.Paused:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
@ -336,7 +296,6 @@ namespace MatterHackers.MatterControl
{
event EventHandler unregisterEvents;
TemperatureControls temperatureControlsContainer;
MovementControls movementControlsContainer;
DisableableWidget fanControlsContainer;
DisableableWidget tuningAdjustmentControlsContainer;
@ -385,22 +344,6 @@ namespace MatterHackers.MatterControl
}
}
// add temperature tab
{
GuiWidget temperatureContainerContainer = new GuiWidget();
temperatureContainerContainer.Padding = new BorderDouble(6);
temperatureContainerContainer.AnchorAll();
temperatureControlsContainer = new TemperatureControls();
temperatureControlsContainer.VAnchor |= VAnchor.ParentTop;
temperatureContainerContainer.AddChild(temperatureControlsContainer);
TabPage temperatureTabPage = new TabPage(temperatureContainerContainer, "Temperature".Localize().ToUpper());
this.AddTab(new SimpleTextTabWidget(temperatureTabPage, "Temperature Tab", TabTextSize,
ActiveTheme.Instance.SecondaryAccentColor, new RGBA_Bytes(), unselectedTextColor, new RGBA_Bytes()));
}
// add movement tab
{
GuiWidget movementContainerContainer = new GuiWidget();
@ -499,12 +442,6 @@ namespace MatterHackers.MatterControl
{
if (ActiveSliceSettings.Instance == null)
{
// no printer selected
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
@ -521,11 +458,6 @@ namespace MatterHackers.MatterControl
case CommunicationStates.Disconnected:
case CommunicationStates.AttemptingToConnect:
case CommunicationStates.FailedToConnect:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Disabled);
@ -542,11 +474,6 @@ namespace MatterHackers.MatterControl
case CommunicationStates.FinishedPrint:
case CommunicationStates.Connected:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
@ -562,11 +489,6 @@ namespace MatterHackers.MatterControl
break;
case CommunicationStates.PrintingFromSd:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
@ -582,11 +504,6 @@ namespace MatterHackers.MatterControl
case DetailedPrintingState.HeatingBed:
case DetailedPrintingState.HeatingExtruder:
case DetailedPrintingState.Printing:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
macroControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.ConfigOnly);
@ -608,11 +525,6 @@ namespace MatterHackers.MatterControl
break;
case CommunicationStates.Paused:
foreach (DisableableWidget extruderTemperatureControlWidget in temperatureControlsContainer.ExtruderWidgetContainers)
{
extruderTemperatureControlWidget?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
}
temperatureControlsContainer?.BedTemperatureControlWidget.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
movementControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
fanControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);
tuningAdjustmentControlsContainer?.SetEnableLevel(DisableableWidget.EnableLevel.Enabled);

View file

@ -1,617 +0,0 @@
/*
Copyright (c) 2014, Lars Brubaker
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using MatterHackers.Agg;
using MatterHackers.Agg.Font;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.PrinterCommunication;
using MatterHackers.MatterControl.SlicerConfiguration;
using MatterHackers.VectorMath;
using System;
using System.Collections.Generic;
namespace MatterHackers.MatterControl
{
public abstract class TemperatureControlBase : FlowLayoutWidget
{
protected TextImageButtonFactory textImageButtonFactory = new TextImageButtonFactory();
protected TextWidget actualTempIndicator;
protected FlowLayoutWidget presetButtonsContainer;
protected EditableNumberDisplay targetTemperatureDisplay;
protected string label;
protected string editWindowLabel;
protected int extruderIndex0Based = 0;
protected TemperatureControlBase(int extruderIndex0Based, string label, string editWindowLabel)
: base(FlowDirection.TopToBottom)
{
this.extruderIndex0Based = extruderIndex0Based;
this.label = label;
this.editWindowLabel = editWindowLabel;
SetDisplayAttributes();
}
protected abstract double GetActualTemperature();
protected abstract double GetTargetTemperature();
protected abstract void SetTargetTemperature(double targetTemp);
protected abstract string GetTemperaturePresets();
protected abstract double GetPreheatTemperature();
protected abstract void SetTemperaturePresets(object sender, EventArgs stringEvent);
protected abstract string HelpText { get; }
private void SetDisplayAttributes()
{
this.textImageButtonFactory.normalFillColor = RGBA_Bytes.Transparent;
this.textImageButtonFactory.FixedWidth = 38 * GuiWidget.DeviceScale;
this.textImageButtonFactory.FixedHeight = 20 * GuiWidget.DeviceScale;
this.textImageButtonFactory.fontSize = 10;
this.textImageButtonFactory.borderWidth = 1;
this.textImageButtonFactory.normalBorderColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 200);
this.textImageButtonFactory.hoverBorderColor = new RGBA_Bytes(ActiveTheme.Instance.PrimaryTextColor, 200);
this.textImageButtonFactory.disabledTextColor = RGBA_Bytes.Gray;
this.textImageButtonFactory.hoverTextColor = ActiveTheme.Instance.PrimaryTextColor;
this.textImageButtonFactory.normalTextColor = ActiveTheme.Instance.SecondaryTextColor;
this.textImageButtonFactory.pressedTextColor = ActiveTheme.Instance.PrimaryTextColor;
this.HAnchor = HAnchor.ParentLeftRight;
}
public override RectangleDouble LocalBounds
{
get
{
return base.LocalBounds;
}
set
{
base.LocalBounds = value;
}
}
protected FlowLayoutWidget tempEditContainer;
private EditTemperaturePresetsWindow editSettingsWindow;
protected void AddChildElements()
{
Button editButton;
AltGroupBox groupBox = new AltGroupBox(textImageButtonFactory.GenerateGroupBoxLabelWithEdit(label, out editButton));
editButton.Click += (sender, e) =>
{
if (editSettingsWindow == null)
{
editSettingsWindow = new EditTemperaturePresetsWindow(editWindowLabel, GetTemperaturePresets(), SetTemperaturePresets);
editSettingsWindow.Closed += (popupWindowSender, popupWindowSenderE) => { editSettingsWindow = null; };
}
else
{
editSettingsWindow.BringToFront();
}
};
groupBox.TextColor = ActiveTheme.Instance.PrimaryTextColor;
groupBox.BorderColor = ActiveTheme.Instance.PrimaryTextColor;
groupBox.HAnchor |= Agg.UI.HAnchor.ParentLeftRight;
// make sure the client area will get smaller when the contents get smaller
groupBox.ClientArea.VAnchor = Agg.UI.VAnchor.FitToChildren;
FlowLayoutWidget controlRow = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom);
controlRow.Margin = new BorderDouble(top: 2);
controlRow.HAnchor |= HAnchor.ParentLeftRight;
{
// put in the temperature slider and preset buttons
tempEditContainer = new FlowLayoutWidget(Agg.UI.FlowDirection.TopToBottom);
{
GuiWidget sliderLabels = GetSliderLabels();
tempEditContainer.HAnchor = HAnchor.ParentLeftRight;
tempEditContainer.AddChild(sliderLabels);
tempEditContainer.Visible = false;
}
GuiWidget spacer = new GuiWidget(0, 10);
spacer.HAnchor = Agg.UI.HAnchor.ParentLeftRight;
// put in the temperature indicators
{
FlowLayoutWidget temperatureIndicator = new FlowLayoutWidget();
temperatureIndicator.HAnchor = Agg.UI.HAnchor.ParentLeftRight;
temperatureIndicator.Margin = new BorderDouble(bottom: 0);
temperatureIndicator.Padding = new BorderDouble(0, 3);
// put in the actual temperature controls
{
var extruderActualIndicator = new FlowLayoutWidget(Agg.UI.FlowDirection.LeftToRight);
extruderActualIndicator.Margin = new BorderDouble(3, 0);
TextWidget extruderActualLabel = new TextWidget("Actual".Localize() + ": ", pointSize: 10);
extruderActualLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor;
extruderActualLabel.VAnchor = VAnchor.ParentCenter;
actualTempIndicator = new TextWidget(string.Format("{0:0.0}°C", GetActualTemperature()), pointSize: 12);
actualTempIndicator.AutoExpandBoundsToText = true;
actualTempIndicator.TextColor = ActiveTheme.Instance.PrimaryTextColor;
actualTempIndicator.VAnchor = VAnchor.ParentCenter;
extruderActualIndicator.AddChild(extruderActualLabel);
extruderActualIndicator.AddChild(actualTempIndicator);
var extruderTargetLabel = new TextWidget("Target".Localize() + ": ", pointSize: 10);
extruderTargetLabel.Margin = new BorderDouble(left: 10);
extruderTargetLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor;
extruderTargetLabel.VAnchor = VAnchor.ParentCenter;
extruderActualIndicator.AddChild(extruderTargetLabel);
temperatureIndicator.AddChild(extruderActualIndicator);
}
// put in the target temperature controls
temperatureIndicator.AddChild(GetTargetTemperatureDisplay());
FlowLayoutWidget helperTextWidget = GetHelpTextWidget();
LinkButtonFactory linkFactory = new LinkButtonFactory();
linkFactory.textColor = ActiveTheme.Instance.PrimaryTextColor;
linkFactory.fontSize = 10;
Button helpTextLink = linkFactory.Generate("?");
helpTextLink.Click += (sender, e) =>
{
helperTextWidget.Visible = !helperTextWidget.Visible;
};
this.presetButtonsContainer = GetPresetsContainer();
temperatureIndicator.AddChild(new HorizontalSpacer());
temperatureIndicator.AddChild(presetButtonsContainer);
controlRow.AddChild(temperatureIndicator);
}
}
groupBox.AddChild(controlRow);
this.AddChild(groupBox);
}
private FlowLayoutWidget GetPresetsContainer()
{
FlowLayoutWidget presetsContainer = new FlowLayoutWidget();
presetsContainer.Margin = new BorderDouble(3, 0);
string presetsLabelTxt = "Presets".Localize();
string presetsLabelTxtFull = string.Format("{0}: ", presetsLabelTxt);
TextWidget presetsLabel = new TextWidget(presetsLabelTxtFull, pointSize: 10);
presetsLabel.Margin = new BorderDouble(right: 5);
presetsLabel.TextColor = ActiveTheme.Instance.PrimaryTextColor;
presetsLabel.VAnchor = VAnchor.ParentCenter;
//presetsContainer.AddChild(presetsLabel);
SortedDictionary<double, string> labels = GetTemperaturePresetLabels();
foreach (KeyValuePair<double, string> keyValue in labels)
{
Button tempButton = textImageButtonFactory.Generate(keyValue.Value);
tempButton.Margin = new BorderDouble(right: 5);
presetsContainer.AddChild(tempButton);
// We push the value into a temp double so that the function will not point to a shared keyValue instance.
double temp = keyValue.Key;
tempButton.Click += (sender, e) =>
{
UiThread.RunOnIdle(() =>
{
SetTargetTemperature(temp);
tempEditContainer.Visible = false;
});
};
}
this.textImageButtonFactory.FixedWidth = 76 * GuiWidget.DeviceScale;
{
Button tempButton = textImageButtonFactory.Generate("Preheat".Localize().ToUpper());
tempButton.Margin = new BorderDouble(right: 5);
presetsContainer.AddChild(tempButton);
// We push the value into a temp double so that the function will not point to a shared keyValue instance.
tempButton.Click += (sender, e) =>
{
UiThread.RunOnIdle(() =>
{
SetTargetTemperature(GetPreheatTemperature());
tempEditContainer.Visible = false;
});
};
}
this.textImageButtonFactory.FixedWidth = 38 * GuiWidget.DeviceScale;
return presetsContainer;
}
private EditableNumberDisplay GetTargetTemperatureDisplay()
{
targetTemperatureDisplay = new EditableNumberDisplay(textImageButtonFactory, string.Format("{0:0.0}°C", GetTargetTemperature()), string.Format("{0:0.0}°C", 240.2));
targetTemperatureDisplay.EditEnabled += (sender, e) =>
{
tempEditContainer.Visible = true;
};
targetTemperatureDisplay.EditComplete += (sender, e) =>
{
SetTargetTemperature(targetTemperatureDisplay.GetValue());
};
return targetTemperatureDisplay;
}
private FlowLayoutWidget GetHelpTextWidget()
{
FlowLayoutWidget allText = new FlowLayoutWidget(FlowDirection.TopToBottom);
double textRegionWidth = 260 * GuiWidget.DeviceScale;
allText.Margin = new BorderDouble(3);
allText.Padding = new BorderDouble(3);
allText.HAnchor = HAnchor.ParentLeftRight;
allText.BackgroundColor = ActiveTheme.Instance.TransparentDarkOverlay;
double helpPointSize = 10;
EnglishTextWrapping wrapper = new EnglishTextWrapping(helpPointSize);
List<string> wrappedText = wrapper.WrapText(HelpText, textRegionWidth - allText.Padding.Width);
foreach (string line in wrappedText)
{
GuiWidget helpWidget = new TextWidget(line, pointSize: helpPointSize, textColor: RGBA_Bytes.White);
allText.AddChild(helpWidget);
}
allText.MinimumSize = new Vector2(textRegionWidth, allText.MinimumSize.y);
allText.Visible = false;
return allText;
}
protected SortedDictionary<double, string> GetTemperaturePresetLabels()
{
string sliderLabelDefinitions = GetTemperaturePresets();
SortedDictionary<double, string> labels = new SortedDictionary<double, string>() { };
labels.Add(0.0, "OFF");
string[] labelItems = sliderLabelDefinitions.Split(',');
for (int i = 0; i < labelItems.Length / 2; i++)
{
string name = labelItems[i * 2];
double temp;
double.TryParse(labelItems[i * 2 + 1], out temp);
//Ignore temp values that already exits
if (temp > 0 && !labels.ContainsKey(temp))
{
labels.Add(temp, name);
}
}
return labels;
}
protected GuiWidget GetSliderLabels()
{
GuiWidget sliderLabels = new GuiWidget();
sliderLabels.HAnchor = HAnchor.ParentLeftRight;
sliderLabels.Height = 20 * GuiWidget.DeviceScale;
{
double buttonOffset = -10 * GuiWidget.DeviceScale;
var offPosition = buttonOffset;
SortedDictionary<double, string> labels = GetTemperaturePresetLabels();
bool firstElement = true;
double minButtonPosition = 0;
foreach (KeyValuePair<double, string> keyValue in labels)
{
if (firstElement)
{
minButtonPosition = buttonOffset;
firstElement = false;
}
else
{
double wantedButtonPosition = buttonOffset;
minButtonPosition = Math.Max(minButtonPosition + textImageButtonFactory.FixedWidth + 3, wantedButtonPosition);
}
Button tempButton = textImageButtonFactory.Generate(keyValue.Value);
tempButton.OriginRelativeParent = new Vector2(minButtonPosition, 0);
sliderLabels.AddChild(tempButton);
// We push the value into a temp double so that the function will not point to a shared keyValue instance.
double temp = keyValue.Key;
tempButton.Click += (sender, e) =>
{
SetTargetTemperature(temp);
tempEditContainer.Visible = false;
};
}
}
sliderLabels.HAnchor = HAnchor.FitToChildren;
sliderLabels.VAnchor = VAnchor.FitToChildren;
sliderLabels.MinimumSize = new Vector2(sliderLabels.Width, sliderLabels.Height);
return sliderLabels;
}
private double MaxTemp
{
get
{
string presets = GetTemperaturePresets();
string[] list = presets.Split(',');
double max = 0;
foreach (string item in list)
{
double value = 0;
double.TryParse(item, out value);
max = Math.Max(max, value);
}
return max;
}
}
protected void onTemperatureRead(Object sender, EventArgs e)
{
TemperatureEventArgs tempArgs = e as TemperatureEventArgs;
if (tempArgs != null && tempArgs.Index0Based == extruderIndex0Based)
{
actualTempIndicator.Text = string.Format("{0:0.0}°C", tempArgs.Temperature);
}
}
protected void ExtruderTemperatureSet(Object sender, EventArgs e)
{
TemperatureEventArgs tempArgs = e as TemperatureEventArgs;
if (tempArgs != null && tempArgs.Index0Based == extruderIndex0Based)
{
string displayString = string.Format("{0:0.0}°C", tempArgs.Temperature);
targetTemperatureDisplay.SetDisplayString(displayString);
}
}
protected void BedTemperatureSet(Object sender, EventArgs e)
{
TemperatureEventArgs tempArgs = e as TemperatureEventArgs;
if (tempArgs != null)
{
string displayString = string.Format("{0:0.0}°C", tempArgs.Temperature);
targetTemperatureDisplay.SetDisplayString(displayString);
}
}
}
public class ExtruderTemperatureControlWidget : TemperatureControlBase
{
public ExtruderTemperatureControlWidget()
: base(0, "Extruder Temperature".Localize(), "Extruder Temperature Settings".Localize())
{
AddChildElements();
AddHandlers();
}
public ExtruderTemperatureControlWidget(int extruderIndex0Based)
: base(extruderIndex0Based, string.Format("{0} {1}", "Extruder Temperature".Localize(), extruderIndex0Based + 1), "Extruder Temperature Settings".Localize())
{
AddChildElements();
AddHandlers();
}
override protected string HelpText
{
get { return "Override the current extruder temperature. While printing, the extruder temperature is normally determined by the 'Slice Settings'."; }
}
private EventHandler unregisterEvents;
private void AddHandlers()
{
PrinterConnection.Instance.ExtruderTemperatureRead.RegisterEvent(onTemperatureRead, ref unregisterEvents);
PrinterConnection.Instance.ExtruderTemperatureSet.RegisterEvent(ExtruderTemperatureSet, ref unregisterEvents);
}
public override void OnClosed(ClosedEventArgs e)
{
unregisterEvents.Invoke(this, null);
base.OnClosed(e);
}
protected override string GetTemperaturePresets()
{
string default_presets = ",0,,0,,0,250";
string presets;
string presetKey = string.Format("Extruder{0}PresetTemps", extruderIndex0Based + 1);
if (UserSettings.Instance.get(presetKey) == null)
{
UserSettings.Instance.set(presetKey, default_presets);
}
presets = UserSettings.Instance.get(presetKey);
return presets;
}
protected override void SetTemperaturePresets(object seder, EventArgs e)
{
StringEventArgs stringEvent = e as StringEventArgs;
if (stringEvent != null && stringEvent.Data != null)
{
UserSettings.Instance.set(string.Format("Extruder{0}PresetTemps", extruderIndex0Based + 1), stringEvent.Data);
ApplicationController.Instance.ReloadAdvancedControlsPanel();
}
}
protected override double GetPreheatTemperature()
{
return ActiveSliceSettings.Instance.Helpers.ExtruderTemperature(extruderIndex0Based);
}
protected override double GetTargetTemperature()
{
return PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based);
}
protected override double GetActualTemperature()
{
return PrinterConnection.Instance.GetActualExtruderTemperature(extruderIndex0Based);
}
protected override void SetTargetTemperature(double targetTemp)
{
UiThread.RunOnIdle(() =>
{
double goalTemp = (int)(targetTemp + .5);
if (PrinterConnection.Instance.PrinterIsPrinting
&& PrinterConnection.Instance.PrintingState == DetailedPrintingState.HeatingExtruder
&& goalTemp != PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based))
{
string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.";
string message = string.Format("The extruder is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting extruder temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based), sliceSettingsNote);
StyledMessageBox.ShowMessageBox(null, message, "Waiting For Extruder To Heat");
}
else
{
PrinterConnection.Instance.SetTargetExtruderTemperature(extruderIndex0Based, (int)(targetTemp + .5));
string displayString = string.Format("{0:0.0}°C", PrinterConnection.Instance.GetTargetExtruderTemperature(extruderIndex0Based));
targetTemperatureDisplay.SetDisplayString(displayString);
}
});
}
}
public class BedTemperatureControlWidget : TemperatureControlBase
{
public BedTemperatureControlWidget()
: base(0, "Bed Temperature".Localize(), "Bed Temperature Settings".Localize())
{
AddChildElements();
AddHandlers();
this.Name = "Bed Temperature Controls Widget";
}
override protected string HelpText
{
get { return "Override the current bed temperature. While printing, the bed temperature is normally determined by the 'Slice Settings'."; }
}
private EventHandler unregisterEvents;
private void AddHandlers()
{
PrinterConnection.Instance.BedTemperatureRead.RegisterEvent(onTemperatureRead, ref unregisterEvents);
PrinterConnection.Instance.BedTemperatureSet.RegisterEvent(BedTemperatureSet, ref unregisterEvents);
}
public override void OnClosed(ClosedEventArgs e)
{
if (unregisterEvents != null)
{
unregisterEvents(this, null);
}
base.OnClosed(e);
}
private void onOffButtonClicked(object sender, EventArgs e)
{
SetTargetTemperature(0);
}
protected override string GetTemperaturePresets()
{
string default_presets = ",0,,0,,0,150";
string presets;
if (UserSettings.Instance.get("BedPresetTemps") == null)
{
UserSettings.Instance.set("BedPresetTemps", default_presets);
}
presets = UserSettings.Instance.get("BedPresetTemps");
return presets;
}
protected override void SetTemperaturePresets(object seder, EventArgs e)
{
StringEventArgs stringEvent = e as StringEventArgs;
if (stringEvent != null && stringEvent.Data != null)
{
UserSettings.Instance.set("BedPresetTemps", stringEvent.Data);
ApplicationController.Instance.ReloadAdvancedControlsPanel();
}
}
protected override double GetPreheatTemperature()
{
return ActiveSliceSettings.Instance.GetValue<double>(SettingsKey.bed_temperature);
}
protected override double GetActualTemperature()
{
return PrinterConnection.Instance.ActualBedTemperature;
}
protected override double GetTargetTemperature()
{
return PrinterConnection.Instance.TargetBedTemperature;
}
protected override void SetTargetTemperature(double targetTemp)
{
double goalTemp = (int)(targetTemp + .5);
if (PrinterConnection.Instance.PrinterIsPrinting
&& PrinterConnection.Instance.PrintingState == DetailedPrintingState.HeatingBed
&& goalTemp != PrinterConnection.Instance.TargetBedTemperature)
{
string sliceSettingsNote = "Note: Slice Settings are applied before the print actually starts. Changes while printing will not effect the active print.";
string message = string.Format("The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in 'Slice Settings' -> 'Filament'.\n\n{1}", PrinterConnection.Instance.TargetBedTemperature, sliceSettingsNote);
StyledMessageBox.ShowMessageBox(null, message, "Waiting For Bed To Heat");
}
else
{
PrinterConnection.Instance.TargetBedTemperature = goalTemp;
string displayString = string.Format("{0:0.0}°C", PrinterConnection.Instance.TargetBedTemperature);
targetTemperatureDisplay.SetDisplayString(displayString);
}
}
}
}

View file

@ -28,20 +28,15 @@ either expressed or implied, of the FreeBSD Project.
*/
//#define DO_IN_PLACE_EDIT
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.ImageProcessing;
using MatterHackers.Agg.PlatformAbstract;
using MatterHackers.Agg.UI;
using MatterHackers.ImageProcessing;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.MatterControl.DataStorage;
using MatterHackers.VectorMath;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using MatterHackers.Agg;
using MatterHackers.Agg.PlatformAbstract;
using MatterHackers.Agg.UI;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.CustomWidgets;
using MatterHackers.VectorMath;
namespace MatterHackers.MatterControl.SlicerConfiguration
{
@ -108,7 +103,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
FlowLayoutWidget container = new FlowLayoutWidget()
{
HAnchor = HAnchor.ParentLeftRight,
Padding = new BorderDouble(12, 0)
Padding = new BorderDouble(12, 0),
Name = "Preset Pulldown Container"
};
editButton = TextImageButtonFactory.GetThemedEditButton();

BIN
StaticData/Icons/bed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
StaticData/Icons/hotend.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

@ -1 +1 @@
Subproject commit 14e17874500a7b15a008c21228e5ee341bdbc30b
Subproject commit 3d0d8dd95263063982b25a954fffb7559ee60924