2014-04-16 15:11:01 -07:00
/ *
2017-01-23 12:38:34 -08:00
Copyright ( c ) 2017 , Kevin Pope , John Lewin
2014-04-16 15:11:01 -07:00
All rights reserved .
Redistribution and use in source and binary forms , with or without
2015-04-08 15:20:10 -07:00
modification , are permitted provided that the following conditions are met :
2014-04-16 15:11:01 -07:00
1. Redistributions of source code must retain the above copyright notice , this
2015-04-08 15:20:10 -07:00
list of conditions and the following disclaimer .
2014-04-16 15:11:01 -07:00
2. Redistributions in binary form must reproduce the above copyright notice ,
this list of conditions and the following disclaimer in the documentation
2015-04-08 15:20:10 -07:00
and / or other materials provided with the distribution .
2014-04-16 15:11:01 -07:00
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
2015-04-08 15:20:10 -07:00
of the authors and should not be interpreted as representing official policies ,
2014-04-16 15:11:01 -07:00
either expressed or implied , of the FreeBSD Project .
* /
2017-06-27 18:41:34 -07:00
using MatterHackers.Agg ;
2017-07-11 16:12:08 -07:00
using MatterHackers.Agg.ImageProcessing ;
2017-06-27 18:41:34 -07:00
using MatterHackers.Agg.PlatformAbstract ;
2017-02-03 13:06:08 -08:00
using MatterHackers.Agg.UI ;
2014-04-16 15:11:01 -07:00
using MatterHackers.Localizations ;
2017-06-27 18:41:34 -07:00
using MatterHackers.MatterControl.ConfigurationPage ;
2014-06-11 14:52:58 -07:00
using MatterHackers.MatterControl.PrinterCommunication ;
2015-04-08 15:20:10 -07:00
using MatterHackers.MatterControl.SlicerConfiguration ;
2014-04-16 15:11:01 -07:00
namespace MatterHackers.MatterControl.ActionBar
{
2015-04-08 15:20:10 -07:00
internal class TemperatureWidgetBed : TemperatureWidgetBase
{
2017-01-23 12:38:34 -08:00
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 ( ) ;
2015-04-08 15:20:10 -07:00
public TemperatureWidgetBed ( )
: base ( "150.3°" )
{
2017-06-27 18:41:34 -07:00
this . DisplayCurrentTemperature ( ) ;
this . ToolTipText = "Current bed temperature" . Localize ( ) ;
2017-07-11 16:12:08 -07:00
var icon = StaticData . Instance . LoadIcon ( "bed.png" ) ;
if ( ! ActiveTheme . Instance . IsDarkTheme )
{
icon = icon . InvertLightness ( ) ;
}
this . ImageWidget . Image = icon ;
2017-06-27 18:41:34 -07:00
this . PopupContent = this . GetPopupContent ( ) ;
2014-04-16 15:11:01 -07:00
2017-06-13 17:22:49 -07:00
PrinterConnection . Instance . BedTemperatureRead . RegisterEvent ( ( s , e ) = > DisplayCurrentTemperature ( ) , ref unregisterEvents ) ;
2015-04-08 15:20:10 -07:00
}
2017-06-27 18:41:34 -07:00
protected override int TargetTemperature = > ( int ) PrinterConnection . Instance . TargetBedTemperature ;
2014-04-16 15:11:01 -07:00
2017-06-27 18:41:34 -07:00
protected override int ActualTemperature = > ( int ) PrinterConnection . Instance . ActualBedTemperature ;
2014-04-16 15:11:01 -07:00
2015-04-08 15:20:10 -07:00
protected override void SetTargetTemperature ( )
{
2016-06-16 10:31:18 -07:00
double targetTemp = ActiveSliceSettings . Instance . GetValue < double > ( SettingsKey . bed_temperature ) ;
2015-02-16 16:16:06 -08:00
if ( targetTemp ! = 0 )
{
2015-04-08 15:20:10 -07:00
double goalTemp = ( int ) ( targetTemp + . 5 ) ;
2017-06-13 17:22:49 -07:00
if ( PrinterConnection . Instance . PrinterIsPrinting
2017-06-13 17:32:38 -07:00
& & PrinterConnection . Instance . PrintingState = = DetailedPrintingState . HeatingBed
2017-06-13 17:22:49 -07:00
& & goalTemp ! = PrinterConnection . Instance . TargetBedTemperature )
2015-04-08 15:20:10 -07:00
{
2017-06-13 17:22:49 -07:00
string message = string . Format ( waitingForBedToHeatMessage , PrinterConnection . Instance . TargetBedTemperature , sliceSettingsNote ) ;
2015-04-08 15:20:10 -07:00
StyledMessageBox . ShowMessageBox ( null , message , waitingForBedToHeatTitle ) ;
}
else
{
2017-06-13 17:22:49 -07:00
PrinterConnection . Instance . TargetBedTemperature = ( int ) ( targetTemp + . 5 ) ;
2015-04-08 15:20:10 -07:00
}
}
}
2017-01-23 12:38:34 -08:00
2017-06-27 18:41:34 -07:00
protected override GuiWidget GetPopupContent ( )
2017-01-23 12:38:34 -08:00
{
2017-06-27 18:41:34 -07:00
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 ;
2017-01-23 12:38:34 -08:00
}
2015-04-08 15:20:10 -07:00
}
}