2017-05-23 19:03:30 -07:00
/ *
Copyright ( c ) 2017 , Lars Brubaker , John Lewin
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 System ;
using MatterHackers.Agg ;
2017-06-04 14:02:56 -07:00
using MatterHackers.Agg.PlatformAbstract ;
2017-05-23 19:03:30 -07:00
using MatterHackers.Agg.UI ;
using MatterHackers.Localizations ;
using MatterHackers.MatterControl.ActionBar ;
2017-05-24 14:19:02 -07:00
using MatterHackers.MatterControl.CustomWidgets ;
2017-05-23 19:03:30 -07:00
using MatterHackers.MatterControl.EeProm ;
using MatterHackers.MatterControl.PrinterCommunication ;
namespace MatterHackers.MatterControl.PartPreviewWindow
{
2017-06-09 08:16:46 -07:00
public class PrinterActionsBar : FlowLayoutWidget
2017-05-23 19:03:30 -07:00
{
2017-06-09 08:16:46 -07:00
private static EePromMarlinWindow openEePromMarlinWidget = null ;
private static EePromRepetierWindow openEePromRepetierWidget = null ;
private string noEepromMappingMessage = "Oops! There is no eeprom mapping for your printer's firmware." . Localize ( ) + "\n\n" + "You may need to wait a minute for your printer to finish initializing." . Localize ( ) ;
private string noEepromMappingTitle = "Warning - No EEProm Mapping" . Localize ( ) ;
private OverflowDropdown overflowDropdown ;
public PrinterActionsBar ( View3DWidget modelViewer )
2017-05-23 19:03:30 -07:00
{
2017-06-09 08:16:46 -07:00
UndoBuffer undoBuffer = modelViewer . UndoBuffer ;
2017-05-23 19:03:30 -07:00
2017-06-09 08:16:46 -07:00
this . HAnchor = HAnchor . ParentLeftRight ;
this . VAnchor = VAnchor . FitToChildren ;
2017-05-27 17:48:32 -07:00
2017-06-09 08:16:46 -07:00
var buttonFactory = ApplicationController . Instance . Theme . BreadCrumbButtonFactory ;
2017-05-27 17:48:32 -07:00
2017-06-09 08:16:46 -07:00
this . AddChild ( new PrinterConnectButton ( buttonFactory ) ) ;
2017-05-23 19:03:30 -07:00
2017-06-09 08:16:46 -07:00
this . AddChild ( new PrintActionRow ( buttonFactory , this ) ) ;
2017-05-24 19:11:51 -07:00
2017-06-09 08:16:46 -07:00
this . AddChild ( new HorizontalSpacer ( ) ) ;
2017-05-24 14:19:02 -07:00
2017-06-09 08:16:46 -07:00
var initialMargin = buttonFactory . Margin ;
2017-05-24 14:19:02 -07:00
2017-06-09 08:16:46 -07:00
buttonFactory . Margin = new BorderDouble ( 8 , 0 ) ;
2017-06-04 14:02:56 -07:00
2017-06-09 08:16:46 -07:00
Button configureEePromButton = buttonFactory . Generate ( "" , StaticData . Instance . LoadIcon ( "chip_24x24.png" , 16 , 16 ) ) ;
configureEePromButton . ToolTipText = "EEProm" ;
configureEePromButton . Click + = configureEePromButton_Click ;
this . AddChild ( configureEePromButton ) ;
2017-05-24 19:11:51 -07:00
2017-06-09 08:16:46 -07:00
Button undoButton = buttonFactory . Generate ( "" , StaticData . Instance . LoadIcon ( "undo_24x24.png" , 16 , 16 ) ) ;
undoButton . Name = "3D View Undo" ;
undoButton . ToolTipText = "Undo" ;
undoButton . Enabled = false ;
undoButton . Margin = new BorderDouble ( 8 , 0 ) ;
undoButton . Click + = ( sender , e ) = >
{
undoBuffer . Undo ( ) ;
} ;
this . AddChild ( undoButton ) ;
undoButton . VAnchor = VAnchor . ParentCenter ;
undoButton . Margin = 3 ;
Button redoButton = buttonFactory . Generate ( "" , StaticData . Instance . LoadIcon ( "redo_24x24.png" , 16 , 16 ) ) ;
redoButton . Name = "3D View Redo" ;
redoButton . ToolTipText = "Redo" ;
redoButton . Enabled = false ;
redoButton . Click + = ( sender , e ) = >
{
undoBuffer . Redo ( ) ;
} ;
this . AddChild ( redoButton ) ;
redoButton . VAnchor = VAnchor . ParentCenter ;
redoButton . Margin = 3 ;
2017-06-04 14:02:56 -07:00
2017-06-09 08:16:46 -07:00
buttonFactory . Margin = initialMargin ;
2017-06-04 14:02:56 -07:00
2017-06-09 08:16:46 -07:00
undoBuffer . Changed + = ( sender , e ) = >
{
undoButton . Enabled = undoBuffer . UndoCount > 0 ;
redoButton . Enabled = undoBuffer . RedoCount > 0 ;
} ;
2017-05-26 01:14:22 -07:00
2017-06-09 08:16:46 -07:00
var editPrinterButton = PrinterSelectEditDropdown . CreatePrinterEditButton ( ) ;
this . AddChild ( editPrinterButton ) ;
2017-05-26 01:14:22 -07:00
2017-06-09 08:16:46 -07:00
overflowDropdown = new OverflowDropdown ( allowLightnessInvert : true )
{
AlignToRightEdge = true ,
Name = "Printer Overflow Menu"
} ;
overflowDropdown . DynamicPopupContent = GeneratePrinterOverflowMenu ;
2017-06-02 13:17:30 -07:00
2017-06-09 08:16:46 -07:00
// Deregister on close
this . Closed + = ( s , e ) = >
{
2017-06-02 13:17:30 -07:00
overflowDropdown . DynamicPopupContent = GeneratePrinterOverflowMenu ;
2017-06-09 08:16:46 -07:00
} ;
2017-05-25 17:58:20 -07:00
2017-06-09 08:16:46 -07:00
this . AddChild ( overflowDropdown ) ;
}
2017-05-24 14:19:02 -07:00
2017-06-09 08:16:46 -07:00
private GuiWidget GeneratePrinterOverflowMenu ( )
{
var widgetToPop = new FlowLayoutWidget ( )
2017-05-24 14:19:02 -07:00
{
2017-06-09 08:16:46 -07:00
HAnchor = HAnchor . FitToChildren ,
VAnchor = VAnchor . FitToChildren ,
BackgroundColor = ActiveTheme . Instance . PrimaryBackgroundColor
} ;
2017-05-24 14:19:02 -07:00
2017-06-09 08:16:46 -07:00
widgetToPop . AddChild ( new PrinterSelectEditDropdown ( )
{
Margin = 10
} ) ;
2017-05-23 19:03:30 -07:00
2017-06-09 08:16:46 -07:00
return widgetToPop ;
}
2017-05-23 19:03:30 -07:00
2017-06-09 08:16:46 -07:00
private void configureEePromButton_Click ( object sender , EventArgs mouseEvent )
{
UiThread . RunOnIdle ( ( ) = >
2017-05-23 19:03:30 -07:00
{
#if false // This is to force the creation of the repetier window for testing when we don't have repetier firmware.
new MatterHackers . MatterControl . EeProm . EePromRepetierWidget ( ) ;
#else
2017-06-13 17:22:49 -07:00
switch ( PrinterConnection . Instance . FirmwareType )
2017-06-09 08:16:46 -07:00
{
2017-06-13 17:32:38 -07:00
case FirmwareTypes . Repetier :
2017-06-09 08:16:46 -07:00
if ( openEePromRepetierWidget ! = null )
{
openEePromRepetierWidget . BringToFront ( ) ;
}
else
{
openEePromRepetierWidget = new EePromRepetierWindow ( ) ;
openEePromRepetierWidget . Closed + = ( RepetierWidget , RepetierEvent ) = >
2017-05-23 19:03:30 -07:00
{
2017-06-09 08:16:46 -07:00
openEePromRepetierWidget = null ;
} ;
}
break ;
2017-06-13 17:32:38 -07:00
case FirmwareTypes . Marlin :
2017-06-09 08:16:46 -07:00
if ( openEePromMarlinWidget ! = null )
{
openEePromMarlinWidget . BringToFront ( ) ;
}
else
{
openEePromMarlinWidget = new EePromMarlinWindow ( ) ;
openEePromMarlinWidget . Closed + = ( marlinWidget , marlinEvent ) = >
2017-05-23 19:03:30 -07:00
{
2017-06-09 08:16:46 -07:00
openEePromMarlinWidget = null ;
} ;
}
break ;
default :
2017-06-13 17:22:49 -07:00
PrinterConnection . Instance . SendLineToPrinterNow ( "M115" ) ;
2017-06-09 08:16:46 -07:00
StyledMessageBox . ShowMessageBox ( null , noEepromMappingMessage , noEepromMappingTitle , StyledMessageBox . MessageType . OK ) ;
break ;
}
2017-05-23 19:03:30 -07:00
#endif
} ) ;
}
}
}