summaryrefslogtreecommitdiff
path: root/pcbnew/dialogs/dialog_print_for_modedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pcbnew/dialogs/dialog_print_for_modedit.cpp')
-rw-r--r--pcbnew/dialogs/dialog_print_for_modedit.cpp238
1 files changed, 238 insertions, 0 deletions
diff --git a/pcbnew/dialogs/dialog_print_for_modedit.cpp b/pcbnew/dialogs/dialog_print_for_modedit.cpp
new file mode 100644
index 0000000..296463d
--- /dev/null
+++ b/pcbnew/dialogs/dialog_print_for_modedit.cpp
@@ -0,0 +1,238 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2010-2014 Jean-Pierre Charras, jean-pierre.charras at wanadoo.fr
+ * Copyright (C) 1992-2015 KiCad Developers, see AUTHORS.txt for contributors.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* File: dialog_print_for_modedit.cpp */
+
+#include <fctsys.h>
+#include <kiface_i.h>
+#include <class_drawpanel.h>
+#include <confirm.h>
+#include <pcbnew.h>
+#include <wxPcbStruct.h>
+#include <module_editor_frame.h>
+#include <pcbplot.h>
+
+#include <dialog_print_for_modedit_base.h>
+#include <printout_controler.h>
+
+static double s_scaleList[] =
+{ 0, 0.5, 0.7, 1.0, 1.4, 2.0, 3.0, 4.0, 8.0, 16.0 };
+
+
+// static print data and page setup data, to remember settings during the session
+static PRINT_PARAMETERS s_Parameters;
+static wxPrintData* s_PrintData;
+static wxPageSetupDialogData* s_pageSetupData = (wxPageSetupDialogData*) NULL;
+
+
+/**
+ * Class DIALOG_PRINT_FOR_MODEDIT
+ * is derived from DIALOG_PRINT_FOR_MODEDIT_BASE which is created by wxFormBuilder.
+ */
+class DIALOG_PRINT_FOR_MODEDIT : public DIALOG_PRINT_FOR_MODEDIT_BASE
+{
+public:
+ DIALOG_PRINT_FOR_MODEDIT( PCB_BASE_FRAME* parent );
+
+private:
+ PCB_BASE_FRAME* m_parent;
+ wxConfigBase* m_config;
+
+ void OnCloseWindow( wxCloseEvent& event );
+
+ /// Open a dialog box for printer setup (printer options, page size ...)
+ void OnPageSetup( wxCommandEvent& event );
+
+ void OnPrintPreview( wxCommandEvent& event );
+
+ /// Called on activate Print button
+ void OnPrintButtonClick( wxCommandEvent& event );
+
+ void OnButtonCancelClick( wxCommandEvent& event ) { Close(); }
+ void InitValues( );
+};
+
+
+void FOOTPRINT_EDIT_FRAME::ToPrinter( wxCommandEvent& event )
+{
+ const PAGE_INFO& pageInfo = GetPageSettings();
+
+ if( s_PrintData == NULL ) // First print
+ {
+ s_PrintData = new wxPrintData();
+
+ if( !s_PrintData->Ok() )
+ {
+ DisplayError( this, _( "An error occurred initializing the printer information." ) );
+ }
+
+ s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGH;
+ }
+
+ if( s_pageSetupData == NULL )
+ s_pageSetupData = new wxPageSetupDialogData( *s_PrintData );
+
+ s_pageSetupData->SetPaperId( pageInfo.GetPaperId() );
+ s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() );
+ s_PrintData->SetOrientation( pageInfo.GetWxOrientation() );
+
+ *s_PrintData = s_pageSetupData->GetPrintData();
+ s_Parameters.m_PageSetupData = s_pageSetupData;
+
+ DIALOG_PRINT_FOR_MODEDIT dlg( this );
+
+ dlg.ShowModal();
+}
+
+
+DIALOG_PRINT_FOR_MODEDIT::DIALOG_PRINT_FOR_MODEDIT( PCB_BASE_FRAME* parent ) :
+ DIALOG_PRINT_FOR_MODEDIT_BASE( parent )
+{
+ m_parent = parent;
+ s_Parameters.m_ForceCentered = true;
+ m_config = Kiface().KifaceSettings();
+ InitValues();
+
+ m_buttonPrint->SetDefault();
+ GetSizer()->SetSizeHints( this );
+ GetSizer()->Fit( this ); // Needed on Ubuntu/Unity to display the dialog
+}
+
+
+void DIALOG_PRINT_FOR_MODEDIT::InitValues( )
+{
+ // Read the scale adjust option
+ int scale_Select = 3; // default selected scale = ScaleList[3] = 1
+
+ if( m_config )
+ {
+ m_config->Read( OPTKEY_PRINT_MODULE_SCALE, &scale_Select );
+ m_config->Read( OPTKEY_PRINT_MONOCHROME_MODE, &s_Parameters.m_Print_Black_and_White, 1);
+ }
+
+ s_Parameters.m_PenDefaultSize = g_DrawDefaultLineThickness;
+ m_ScaleOption->SetSelection( scale_Select );
+
+ if( s_Parameters.m_Print_Black_and_White )
+ m_ModeColorOption->SetSelection( 1 );
+}
+
+
+
+void DIALOG_PRINT_FOR_MODEDIT::OnCloseWindow( wxCloseEvent& event )
+{
+ if( m_config )
+ {
+ m_config->Write( OPTKEY_PRINT_MODULE_SCALE, m_ScaleOption->GetSelection() );
+ m_config->Write( OPTKEY_PRINT_MONOCHROME_MODE, s_Parameters.m_Print_Black_and_White );
+ }
+
+ EndModal( 0 );
+}
+
+
+void DIALOG_PRINT_FOR_MODEDIT::OnPageSetup( wxCommandEvent& event )
+{
+ wxPageSetupDialog pageSetupDialog( this, s_pageSetupData );
+ pageSetupDialog.ShowModal();
+
+ (*s_PrintData) = pageSetupDialog.GetPageSetupDialogData().GetPrintData();
+ (*s_pageSetupData) = pageSetupDialog.GetPageSetupDialogData();
+}
+
+
+void DIALOG_PRINT_FOR_MODEDIT::OnPrintPreview( wxCommandEvent& event )
+{
+ s_Parameters.m_Print_Black_and_White = m_ModeColorOption->GetSelection();
+ s_Parameters.m_PrintScale = s_scaleList[m_ScaleOption->GetSelection()];
+
+ // Pass two printout objects: for preview, and possible printing.
+ wxString title = _( "Print Preview" );
+ wxPrintPreview* preview =
+ new wxPrintPreview( new BOARD_PRINTOUT_CONTROLLER( s_Parameters, m_parent, title ),
+ new BOARD_PRINTOUT_CONTROLLER( s_Parameters, m_parent, title ),
+ s_PrintData );
+
+ if( preview == NULL )
+ {
+ DisplayError( this, wxT( "OnPrintPreview() problem" ) );
+ return;
+ }
+
+ // Uses the parent position and size.
+ // @todo uses last position and size ans store them when exit in m_config
+ wxPoint WPos = m_parent->GetPosition();
+ wxSize WSize = m_parent->GetSize();
+
+ wxPreviewFrame* frame = new wxPreviewFrame( preview, this, title, WPos, WSize );
+ frame->SetMinSize( wxSize( 550, 350 ) );
+
+ // On wxGTK, set the flag wxTOPLEVEL_EX_DIALOG is mandatory, if we want
+ // close the frame using the X box in caption, when the preview frame is run
+ // from a dialog
+ frame->SetExtraStyle( frame->GetExtraStyle() | wxTOPLEVEL_EX_DIALOG );
+
+ // We use here wxPreviewFrame_WindowModal option to make the wxPrintPreview frame
+ // modal for its caller only.
+ // An other reason is the fact when closing the frame without this option,
+ // all top level frames are reenabled.
+ // With this option, only the parent is reenabled.
+ // Reenabling all top level frames should be made by the parent dialog.
+ frame->InitializeWithModality( wxPreviewFrame_WindowModal );
+
+ frame->Raise(); // Needed on Ubuntu/Unity to display the frame
+ frame->Show( true );
+}
+
+
+void DIALOG_PRINT_FOR_MODEDIT::OnPrintButtonClick( wxCommandEvent& event )
+{
+ PCB_PLOT_PARAMS plot_opts = m_parent->GetPlotSettings();
+
+ s_Parameters.m_Print_Black_and_White = m_ModeColorOption->GetSelection();
+ s_Parameters.m_PrintScale = s_scaleList[m_ScaleOption->GetSelection()];
+
+ plot_opts.SetFineScaleAdjustX( s_Parameters.m_XScaleAdjust );
+ plot_opts.SetFineScaleAdjustY( s_Parameters.m_YScaleAdjust );
+ plot_opts.SetScale( s_Parameters.m_PrintScale );
+
+ m_parent->SetPlotSettings( plot_opts );
+
+ wxPrintDialogData printDialogData( *s_PrintData );
+ wxPrinter printer( &printDialogData );
+
+ BOARD_PRINTOUT_CONTROLLER printout( s_Parameters, m_parent, _( "Print Footprint" ) );
+
+ if( !printer.Print( this, &printout, true ) )
+ {
+ if( wxPrinter::GetLastError() == wxPRINTER_ERROR )
+ DisplayError( this, _( "There was a problem printing." ) );
+
+ return;
+ }
+ else
+ {
+ *s_PrintData = printer.GetPrintDialogData().GetPrintData();
+ }
+}