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 .
* /
using MatterHackers.Localizations ;
2014-06-11 14:52:58 -07:00
using MatterHackers.MatterControl.PrinterCommunication ;
2015-04-08 15:20:10 -07:00
using MatterHackers.MatterControl.SlicerConfiguration ;
using System ;
2014-04-16 15:11:01 -07:00
namespace MatterHackers.MatterControl.ActionBar
{
2015-04-08 15:20:10 -07:00
internal class TemperatureWidgetExtruder : TemperatureWidgetBase
{
2017-01-23 12:45:27 -08:00
// Extruder widget is hard-wired to extruder 0
private const int extruderIndex = 0 ;
2016-12-29 06:55:12 -08:00
private EventHandler unregisterEvents ;
2016-05-03 08:49:16 -07: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 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 ( ) ;
2015-04-08 15:20:10 -07:00
public TemperatureWidgetExtruder ( )
: base ( "150.3°" )
{
2015-08-12 13:16:39 -07:00
temperatureTypeName . Text = "Extruder" ;
2017-01-23 12:38:34 -08:00
DisplayCurrentTemperature ( ) ;
2015-08-12 13:16:39 -07:00
ToolTipText = "Current extruder temperature" . Localize ( ) ;
preheatButton . ToolTipText = "Preheat the Extruder" . Localize ( ) ;
2015-04-08 15:20:10 -07:00
2017-01-23 12:38:34 -08:00
PrinterConnectionAndCommunication . Instance . ExtruderTemperatureRead . RegisterEvent ( ( s , e ) = > DisplayCurrentTemperature ( ) , ref unregisterEvents ) ;
2015-04-08 15:20:10 -07:00
}
2017-01-23 12:38:34 -08:00
private void DisplayCurrentTemperature ( )
2015-04-08 15:20:10 -07:00
{
string tempDirectionIndicator = "" ;
2017-01-23 12:45:27 -08:00
if ( PrinterConnectionAndCommunication . Instance . GetTargetExtruderTemperature ( extruderIndex ) > 0 )
2015-04-08 15:20:10 -07:00
{
2017-01-23 12:45:27 -08:00
if ( ( int ) ( PrinterConnectionAndCommunication . Instance . GetTargetExtruderTemperature ( extruderIndex ) + 0.5 ) < ( int ) ( PrinterConnectionAndCommunication . Instance . GetActualExtruderTemperature ( extruderIndex ) + 0.5 ) )
2015-04-08 15:20:10 -07:00
{
tempDirectionIndicator = "↓" ;
}
2017-01-23 12:45:27 -08:00
else if ( ( int ) ( PrinterConnectionAndCommunication . Instance . GetTargetExtruderTemperature ( extruderIndex ) + 0.5 ) > ( int ) ( PrinterConnectionAndCommunication . Instance . GetActualExtruderTemperature ( extruderIndex ) + 0.5 ) )
2015-04-08 15:20:10 -07:00
{
tempDirectionIndicator = "↑" ;
}
}
2017-01-23 12:45:27 -08:00
this . IndicatorValue = string . Format ( " {0:0.#}°{1}" , PrinterConnectionAndCommunication . Instance . GetActualExtruderTemperature ( extruderIndex ) , tempDirectionIndicator ) ;
2015-04-08 15:20:10 -07:00
}
protected override void SetTargetTemperature ( )
{
double targetTemp ;
2016-10-10 12:44:22 -07:00
if ( double . TryParse ( ActiveSliceSettings . Instance . GetValue ( SettingsKey . temperature ) , out targetTemp ) )
2015-04-08 15:20:10 -07:00
{
double goalTemp = ( int ) ( targetTemp + . 5 ) ;
if ( PrinterConnectionAndCommunication . Instance . PrinterIsPrinting
& & PrinterConnectionAndCommunication . Instance . PrintingState = = PrinterConnectionAndCommunication . DetailedPrintingState . HeatingExtruder
2017-01-23 12:45:27 -08:00
& & goalTemp ! = PrinterConnectionAndCommunication . Instance . GetTargetExtruderTemperature ( extruderIndex ) )
2015-04-08 15:20:10 -07:00
{
2017-01-23 12:45:27 -08:00
string message = string . Format ( waitingForExtruderToHeatMessage , PrinterConnectionAndCommunication . Instance . GetTargetExtruderTemperature ( extruderIndex ) , sliceSettingsNote ) ;
2016-05-03 08:49:16 -07:00
StyledMessageBox . ShowMessageBox ( null , message , "Waiting For Extruder To Heat" . Localize ( ) ) ;
2015-04-08 15:20:10 -07:00
}
else
{
2017-01-23 12:45:27 -08:00
PrinterConnectionAndCommunication . Instance . SetTargetExtruderTemperature ( extruderIndex , ( int ) ( targetTemp + . 5 ) ) ;
2015-04-08 15:20:10 -07:00
}
}
}
2017-01-23 12:38:34 -08:00
public override void OnClosed ( EventArgs e )
{
unregisterEvents ? . Invoke ( this , null ) ;
base . OnClosed ( e ) ;
}
2015-04-08 15:20:10 -07:00
}
}