From dea778842ba603b9980ba1981db8b82f338a9898 Mon Sep 17 00:00:00 2001 From: Maciej Suminski Date: Fri, 5 Oct 2018 16:41:17 +0200 Subject: [PATCH] Grand printing dialogs refactor Patch introduces a generic printing settings window that is customized by pcbnew and gerbview. --- common/CMakeLists.txt | 3 + common/board_printout.cpp | 87 +- common/dialogs/dialog_print_generic.cpp | 297 +++++ common/dialogs/dialog_print_generic.h | 104 ++ common/dialogs/dialog_print_generic_base.cpp | 149 +++ .../dialogs/dialog_print_generic_base.fbp | 1073 +-------------- .../dialogs/dialog_print_generic_base.h | 53 +- common/printout.cpp | 36 + gerbview/CMakeLists.txt | 4 +- gerbview/dialogs/dialog_print_gerbview.cpp | 328 +++++ .../dialogs/dialog_print_using_printer.cpp | 432 ------ .../dialog_print_using_printer_base.cpp | 137 -- .../dialog_print_using_printer_base.fbp | 1172 ----------------- .../dialogs/dialog_print_using_printer_base.h | 76 -- gerbview/gerbview_printout.cpp | 13 +- gerbview/gerbview_printout.h | 2 +- include/board_printout.h | 62 +- include/printout.h | 68 + include/widgets/unit_binder.h | 20 +- pcbnew/CMakeLists.txt | 1 - pcbnew/dialogs/dialog_export_svg.cpp | 10 +- pcbnew/dialogs/dialog_print_pcbnew.cpp | 622 ++++----- pcbnew/dialogs/dialog_print_pcbnew_base.cpp | 228 ---- pcbnew/pcb_base_edit_frame.h | 5 - pcbnew/pcbnew_printout.cpp | 59 +- pcbnew/pcbnew_printout.h | 26 +- pcbnew/pcbplot.h | 4 +- 27 files changed, 1426 insertions(+), 3645 deletions(-) create mode 100644 common/dialogs/dialog_print_generic.cpp create mode 100644 common/dialogs/dialog_print_generic.h create mode 100644 common/dialogs/dialog_print_generic_base.cpp rename pcbnew/dialogs/dialog_print_pcbnew_base.fbp => common/dialogs/dialog_print_generic_base.fbp (53%) rename pcbnew/dialogs/dialog_print_pcbnew_base.h => common/dialogs/dialog_print_generic_base.h (55%) create mode 100644 common/printout.cpp create mode 100644 gerbview/dialogs/dialog_print_gerbview.cpp delete mode 100644 gerbview/dialogs/dialog_print_using_printer.cpp delete mode 100644 gerbview/dialogs/dialog_print_using_printer_base.cpp delete mode 100644 gerbview/dialogs/dialog_print_using_printer_base.fbp delete mode 100644 gerbview/dialogs/dialog_print_using_printer_base.h create mode 100644 include/printout.h delete mode 100644 pcbnew/dialogs/dialog_print_pcbnew_base.cpp diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index a3cca81ee4..4eaca33e69 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -187,6 +187,8 @@ set( COMMON_DLG_SRCS dialogs/dialog_list_selector_base.cpp dialogs/dialog_page_settings_base.cpp dialogs/dialog_text_entry_base.cpp + dialogs/dialog_print_generic.cpp + dialogs/dialog_print_generic_base.cpp dialogs/dialog_text_entry.cpp dialogs/panel_common_settings.cpp dialogs/panel_common_settings_base.cpp @@ -322,6 +324,7 @@ set( COMMON_SRCS netlist_keywords.cpp observable.cpp prependpath.cpp + printout.cpp project.cpp properties.cpp ptree.cpp diff --git a/common/board_printout.cpp b/common/board_printout.cpp index 087bf81126..c50bdb5345 100644 --- a/common/board_printout.cpp +++ b/common/board_printout.cpp @@ -29,35 +29,48 @@ #include #include #include +#include -PRINT_PARAMETERS::PRINT_PARAMETERS() + +BOARD_PRINTOUT_SETTINGS::BOARD_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo ) + : PRINTOUT_SETTINGS( aPageInfo ) { - // TODO Millimeter2iu is depends on PCBNEW/GERBVIEW #ifdefs, so it cannot be compiled to libcommon - //m_PenDefaultSize = Millimeter2iu( 0.2 ); // A reasonable default value to draw items - // which do not have a specified line width - m_PenDefaultSize = 0.0; - m_PrintScale = 1.0; - m_XScaleAdjust = 1.0; - m_YScaleAdjust = 1.0; - m_Print_Sheet_Ref = false; - m_PrintMaskLayer.set(); - m_PrintMirror = false; - m_Print_Black_and_White = true; - m_OptionPrintPage = 1; - m_PageCount = 1; - m_ForceCentered = false; - m_Flags = 0; - m_DrillShapeOpt = PRINT_PARAMETERS::SMALL_DRILL_SHAPE; - m_PageSetupData = NULL; + m_layerSet.set(); + m_mirror = false; } -BOARD_PRINTOUT::BOARD_PRINTOUT( const PRINT_PARAMETERS& aParams, const KIGFX::VIEW* aView, +void BOARD_PRINTOUT_SETTINGS::Load( wxConfigBase* aConfig ) +{ + PRINTOUT_SETTINGS::Load( aConfig ); + + for( unsigned layer = 0; layer < m_layerSet.count(); ++layer ) + { + int tmp; + wxString key = wxString::Format( OPTKEY_LAYERBASE, layer ); + aConfig->Read( key, &tmp, 1 ); + m_layerSet.set( layer, tmp ); + } +} + + +void BOARD_PRINTOUT_SETTINGS::Save( wxConfigBase* aConfig ) +{ + PRINTOUT_SETTINGS::Save( aConfig ); + + for( unsigned layer = 0; layer < m_layerSet.count(); ++layer ) + { + wxString key = wxString::Format( OPTKEY_LAYERBASE, layer ); + aConfig->Write( key, m_layerSet.test( layer ) ); + } +} + + +BOARD_PRINTOUT::BOARD_PRINTOUT( const BOARD_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView, const wxSize& aSheetSize, const wxString& aTitle ) : - wxPrintout( aTitle ) + wxPrintout( aTitle ), m_settings( aParams ) { m_view = aView; - m_PrintParams = aParams; m_sheetSize = aSheetSize; } @@ -67,13 +80,8 @@ void BOARD_PRINTOUT::GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, *minPage = 1; *selPageFrom = 1; - int icnt = 1; - - if( m_PrintParams.m_OptionPrintPage == 0 ) - icnt = m_PrintParams.m_PageCount; - - *maxPage = icnt; - *selPageTo = icnt; + *maxPage = m_settings.m_pageCount; + *selPageTo = m_settings.m_pageCount; } @@ -102,7 +110,7 @@ void BOARD_PRINTOUT::DrawPage( const wxString& aLayerName, int aPageNum, int aPa auto srcSettings = m_view->GetPainter()->GetSettings(); auto dstSettings = view->GetPainter()->GetSettings(); - if( m_PrintParams.m_Print_Black_and_White ) + if( m_settings.m_blackWhite ) { for( int i = 0; i < LAYER_ID_COUNT; ++i ) dstSettings->SetLayerColor( i, COLOR4D::BLACK ); @@ -114,12 +122,12 @@ void BOARD_PRINTOUT::DrawPage( const wxString& aLayerName, int aPageNum, int aPa } - setupViewLayers( view, m_PrintParams.m_PrintMaskLayer ); + setupViewLayers( view, m_settings.m_layerSet ); setupPainter( painter ); BOX2I bBox; // determine printout bounding box - if( m_PrintParams.PrintBorderAndTitleBlock() ) + if( m_settings.PrintBorderAndTitleBlock() ) { bBox = BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( m_sheetSize ) ); view->SetLayerVisible( LAYER_WORKSHEET, true ); @@ -133,26 +141,25 @@ void BOARD_PRINTOUT::DrawPage( const wxString& aLayerName, int aPageNum, int aPa // Fit to page - if( m_PrintParams.m_PrintScale <= 0.0 ) + if( m_settings.m_scale <= 0.0 ) { if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 ) { // Nothing to print - m_PrintParams.m_PrintScale = 1.0; + m_settings.m_scale = 1.0; } else { double scaleX = (double) m_sheetSize.GetWidth() / bBox.GetWidth(); double scaleY = (double) m_sheetSize.GetHeight() / bBox.GetHeight(); - m_PrintParams.m_PrintScale = std::min( scaleX, scaleY ); + m_settings.m_scale = std::min( scaleX, scaleY ); } } setupGal( gal ); galPrint->SetNativePaperSize( pageSizeIn, printCtx->HasNativeLandscapeRotation() ); - gal->SetFlip( m_PrintParams.m_PrintMirror, false ); gal->SetLookAtPoint( bBox.Centre() ); - gal->SetZoomFactor( m_PrintParams.m_PrintScale ); + gal->SetZoomFactor( m_settings.m_scale ); { KIGFX::GAL_DRAWING_CONTEXT ctx( gal ); @@ -176,6 +183,12 @@ void BOARD_PRINTOUT::setupViewLayers( const std::unique_ptr& aView, void BOARD_PRINTOUT::setupPainter( const std::unique_ptr& aPainter ) { - aPainter->GetSettings()->SetOutlineWidth( m_PrintParams.m_PenDefaultSize ); + aPainter->GetSettings()->SetOutlineWidth( m_settings.m_lineWidth ); aPainter->GetSettings()->SetBackgroundColor( COLOR4D::WHITE ); } + + +void BOARD_PRINTOUT::setupGal( KIGFX::GAL* aGal ) +{ + aGal->SetFlip( m_settings.m_mirror, false ); +} diff --git a/common/dialogs/dialog_print_generic.cpp b/common/dialogs/dialog_print_generic.cpp new file mode 100644 index 0000000000..2683e4c9b8 --- /dev/null +++ b/common/dialogs/dialog_print_generic.cpp @@ -0,0 +1,297 @@ +/* + * Copyright (C) 2018 CERN + * Author: Maciej Suminski + * + * 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 3 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, see . + */ + +#include "dialog_print_generic.h" + +#include +#include +#include +#include + +// Define min and max reasonable values for print scale +static constexpr double MIN_SCALE = 0.01; +static constexpr double MAX_SCALE = 100.0; + +DIALOG_PRINT_GENERIC::DIALOG_PRINT_GENERIC( EDA_DRAW_FRAME* aParent, PRINTOUT_SETTINGS* aSettings ) + : DIALOG_PRINT_GENERIC_BASE( aParent ), m_config( nullptr ), m_settings( aSettings ), + m_lineWidth( aParent, m_penWidthLabel, m_penWidthCtrl, m_penWidthUnits, true ) +{ + m_scaleValidator.SetRange( MIN_SCALE, MAX_SCALE ); + m_scaleCustomText->SetValidator( m_scaleValidator ); + + // We use a sdbSizer to get platform-dependent ordering of the action buttons, but + // that requires us to correct the button labels here. + m_sdbSizer1OK->SetLabel( _( "Print" ) ); + m_sdbSizer1Apply->SetLabel( _( "Print Preview" ) ); + m_sdbSizer1Cancel->SetLabel( _( "Close" ) ); + m_sdbSizer1->Layout(); + + m_sdbSizer1OK->SetDefault(); + +#if defined(__WXMAC__) or defined(__WXGTK__) + // Preview does not work well on GTK or Mac, + // but these platforms provide native print preview + m_sdbSizer1Apply->Hide(); +#endif + + FinishDialogSettings(); + Layout(); + initPrintData(); +} + + +DIALOG_PRINT_GENERIC::~DIALOG_PRINT_GENERIC() +{ +} + + +void DIALOG_PRINT_GENERIC::ForcePrintBorder( bool aValue ) +{ + m_titleBlock->SetValue( aValue ); + m_titleBlock->Hide(); +} + + +void DIALOG_PRINT_GENERIC::saveSettings() +{ + m_settings->m_lineWidth = m_lineWidth.GetValue(); + m_settings->m_scale = getScaleValue(); + m_settings->m_titleBlock = m_titleBlock->GetValue(); + m_settings->m_blackWhite = m_outputMode->GetSelection(); + + if( m_config ) + m_settings->Save( m_config ); +} + + +double DIALOG_PRINT_GENERIC::getScaleValue() const +{ + if( m_scale1->GetValue() ) + return 1.0; + + if( m_scaleFit->GetValue() ) + return 0.0; + + if( m_scaleCustom->GetValue() ) + { + double scale; + + wxCHECK( m_scaleCustomText->GetValue().ToDouble( &scale ), 1.0 ); + return scale; + } + + wxCHECK( false, 1.0 ); +} + + +void DIALOG_PRINT_GENERIC::setScaleValue( double aValue ) +{ + wxASSERT( aValue >= 0.0 ); + + if( aValue == 0.0 ) // fit to page + { + m_scaleFit->SetValue( true ); + } + else if( aValue == 1.0 ) + { + m_scale1->SetValue( true ); + } + else + { + if( aValue > MAX_SCALE ) + { + DisplayInfoMessage( nullptr, _( "Warning: Scale option set to a very large value" ) ); + } + else if( aValue < MIN_SCALE ) + { + DisplayInfoMessage( nullptr, _( "Warning: Scale option set to a very small value" ) ); + } + + m_scaleCustom->SetValue( true ); + m_scaleCustomText->SetValue( wxString::Format( wxT( "%f" ), aValue ) ); + } +} + + +bool DIALOG_PRINT_GENERIC::TransferDataToWindow() +{ + if( !wxDialog::TransferDataToWindow() ) + return false; + + if( m_config ) + m_settings->Load( m_config ); + + m_lineWidth.SetValue( m_settings->m_lineWidth ); + setScaleValue( m_settings->m_scale ); + m_titleBlock->SetValue( m_settings->m_titleBlock ); + m_outputMode->SetSelection( m_settings->m_blackWhite ? 1 : 0 ); + + return true; +} + + +void DIALOG_PRINT_GENERIC::onPageSetup( wxCommandEvent& event ) +{ + wxPageSetupDialog pageSetupDialog( this, s_pageSetupData ); + pageSetupDialog.ShowModal(); + + (*s_PrintData) = pageSetupDialog.GetPageSetupDialogData().GetPrintData(); + (*s_pageSetupData) = pageSetupDialog.GetPageSetupDialogData(); +} + + +void DIALOG_PRINT_GENERIC::onPrintPreview( wxCommandEvent& event ) +{ + m_settings->m_pageCount = 0; // it needs to be set by a derived dialog + saveSettings(); + + if( m_settings->m_pageCount == 0 ) + { + DisplayError( this, _( "Nothing to print" ) ); + return; + } + + // Pass two printout objects: for preview, and possible printing. + wxString title = _( "Print Preview" ); + wxPrintPreview* preview = + new wxPrintPreview( createPrintout( title ), createPrintout( title ), s_PrintData ); + + preview->SetZoom( 100 ); + + wxPreviewFrame* frame = new wxPreviewFrame( preview, this, title, m_parent->GetPosition(), + m_parent->GetSize() ); + frame->SetMinSize( wxSize( 550, 350 ) ); + frame->Center(); + + // 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_GENERIC::onPrintButtonClick( wxCommandEvent& event ) +{ + m_settings->m_pageCount = 0; // it needs to be set by a derived dialog + saveSettings(); + + if( m_settings->m_pageCount == 0 ) + { + DisplayError( this, _( "Nothing to print" ) ); + return; + } + + wxPrintDialogData printDialogData( *s_PrintData ); + printDialogData.SetMaxPage( m_settings->m_pageCount ); + + wxPrinter printer( &printDialogData ); + auto printout = std::unique_ptr( createPrintout( _( "Print" ) ) ); + + // Disable 'Print' button to prevent issuing another print + // command before the previous one is finished (causes problems on Windows) + ENABLER printBtnDisable( *m_sdbSizer1OK, false ); + + if( !printer.Print( this, printout.get(), true ) ) + { + if( wxPrinter::GetLastError() == wxPRINTER_ERROR ) + DisplayError( this, _( "There was a problem printing." ) ); + } + else + { + *s_PrintData = printer.GetPrintDialogData().GetPrintData(); + } +} + + +void DIALOG_PRINT_GENERIC::onCloseButton( wxCommandEvent& event ) +{ + saveSettings(); + + if( IsQuasiModal() ) + EndQuasiModal( wxID_CANCEL ); + + if( IsModal() ) + EndModal( wxID_CANCEL ); + + Close( wxID_CANCEL ); +} + + +void DIALOG_PRINT_GENERIC::onClose( wxCloseEvent& event ) +{ + saveSettings(); + event.Skip(); +} + + +void DIALOG_PRINT_GENERIC::onSetCustomScale( wxCommandEvent& event ) +{ + // Select 'custom scale' radio button when user types in a value in the + // custom scale text box + m_scaleCustom->SetValue( true ); +} + + +void DIALOG_PRINT_GENERIC::initPrintData() +{ + if( !s_PrintData ) // 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 ) + { + const PAGE_INFO& pageInfo = m_settings->m_pageInfo; + + s_pageSetupData = new wxPageSetupDialogData( *s_PrintData ); + s_pageSetupData->SetPaperId( pageInfo.GetPaperId() ); + s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() ); + + if( pageInfo.IsCustom() ) + { + if( pageInfo.IsPortrait() ) + s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ), + Mils2mm( pageInfo.GetHeightMils() ) ) ); + else + s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ), + Mils2mm( pageInfo.GetWidthMils() ) ) ); + } + + *s_PrintData = s_pageSetupData->GetPrintData(); + } +} + + +wxPrintData* DIALOG_PRINT_GENERIC::s_PrintData = nullptr; +wxPageSetupDialogData* DIALOG_PRINT_GENERIC::s_pageSetupData = nullptr; diff --git a/common/dialogs/dialog_print_generic.h b/common/dialogs/dialog_print_generic.h new file mode 100644 index 0000000000..ea5b9b5a7d --- /dev/null +++ b/common/dialogs/dialog_print_generic.h @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2018 CERN + * Author: Maciej Suminski + * + * 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 3 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, see . + */ + +#ifndef DIALOG_PRINT_GENERIC_H +#define DIALOG_PRINT_GENERIC_H + +#include "dialog_print_generic_base.h" +#include +#include + +class wxConfigBase; +class EDA_DRAW_FRAME; +struct PRINTOUT_SETTINGS; + +class DIALOG_PRINT_GENERIC : public DIALOG_PRINT_GENERIC_BASE +{ +public: + DIALOG_PRINT_GENERIC( EDA_DRAW_FRAME* aParent, PRINTOUT_SETTINGS* aSettings ); + virtual ~DIALOG_PRINT_GENERIC(); + + /** + * Set 'print border and title block' to a requested value and hides the + * corresponding checkbox. + */ + void ForcePrintBorder( bool aValue ); + +protected: + /** + * Create a printout with a requested title. + */ + virtual wxPrintout* createPrintout( const wxString& aTitle ) = 0; + + virtual void saveSettings(); + + wxSizer* getMainSizer() + { + return bUpperSizer; + } + + wxGridBagSizer* getOptionsSizer() + { + return gbOptionsSizer; + } + + wxStaticBox* getOptionsBox() + { + return sbOptionsSizer->GetStaticBox(); + } + + /** + * Return scale value selected in the dialog. + */ + double getScaleValue() const; + + /** + * Select a corresponding scale radio button and update custom scale value if needed. + * @param aValue is the scale value to be selected (0 stands for fit-to-page). + */ + void setScaleValue( double aValue ); + + // There is no TransferDataFromWindow() so options are saved + // even if the dialog is closed without printing + bool TransferDataToWindow() override; + + wxConfigBase* m_config; + + PRINTOUT_SETTINGS* m_settings; + + UNIT_BINDER m_lineWidth; + +private: + void onPageSetup( wxCommandEvent& event ) override; + void onPrintPreview( wxCommandEvent& event ) override; + void onPrintButtonClick( wxCommandEvent& event ) override; + + // Needed to execute onClose handler + void onCloseButton( wxCommandEvent& event ) override; + void onClose( wxCloseEvent& event ) override; + void onSetCustomScale( wxCommandEvent& event ) override; + + void initPrintData(); + + wxFloatingPointValidator m_scaleValidator; + + static wxPrintData* s_PrintData; + static wxPageSetupDialogData* s_pageSetupData; +}; + +#endif // DIALOG_PRINT_GENERIC_H diff --git a/common/dialogs/dialog_print_generic_base.cpp b/common/dialogs/dialog_print_generic_base.cpp new file mode 100644 index 0000000000..de2e721675 --- /dev/null +++ b/common/dialogs/dialog_print_generic_base.cpp @@ -0,0 +1,149 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Oct 17 2016) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#include "dialog_print_generic_base.h" + +/////////////////////////////////////////////////////////////////////////// + +DIALOG_PRINT_GENERIC_BASE::DIALOG_PRINT_GENERIC_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + + wxBoxSizer* bMainSizer; + bMainSizer = new wxBoxSizer( wxVERTICAL ); + + bUpperSizer = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bOptionsSizer; + bOptionsSizer = new wxBoxSizer( wxVERTICAL ); + + sbOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL ); + + gbOptionsSizer = new wxGridBagSizer( 2, 0 ); + gbOptionsSizer->SetFlexibleDirection( wxBOTH ); + gbOptionsSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_penWidthLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Default line width:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_penWidthLabel->Wrap( -1 ); + m_penWidthLabel->SetToolTip( _("Pen size used to draw items that have no pen size specified.\nUsed mainly to draw items in sketch mode.") ); + + gbOptionsSizer->Add( m_penWidthLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 ); + + m_penWidthCtrl = new wxTextCtrl( sbOptionsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + gbOptionsSizer->Add( m_penWidthCtrl, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_penWidthUnits = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_penWidthUnits->Wrap( -1 ); + gbOptionsSizer->Add( m_penWidthUnits, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); + + m_outputModeLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Output mode:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_outputModeLabel->Wrap( -1 ); + gbOptionsSizer->Add( m_outputModeLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 ); + + wxString m_outputModeChoices[] = { _("Color"), _("Black and white") }; + int m_outputModeNChoices = sizeof( m_outputModeChoices ) / sizeof( wxString ); + m_outputMode = new wxChoice( sbOptionsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_outputModeNChoices, m_outputModeChoices, 0 ); + m_outputMode->SetSelection( 0 ); + gbOptionsSizer->Add( m_outputMode, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_titleBlock = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_FRAME_SEL, _("Print border and title block"), wxDefaultPosition, wxDefaultSize, 0 ); + m_titleBlock->SetValue(true); + m_titleBlock->SetToolTip( _("Print Frame references.") ); + + gbOptionsSizer->Add( m_titleBlock, wxGBPosition( 3, 0 ), wxGBSpan( 1, 3 ), wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + + + gbOptionsSizer->AddGrowableCol( 1 ); + + sbOptionsSizer->Add( gbOptionsSizer, 1, wxEXPAND, 5 ); + + + bOptionsSizer->Add( sbOptionsSizer, 1, wxEXPAND|wxALL, 5 ); + + wxStaticBoxSizer* bScaleSizer; + bScaleSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Scale") ), wxVERTICAL ); + + m_scale1 = new wxRadioButton( bScaleSizer->GetStaticBox(), wxID_ANY, _("1:1"), wxDefaultPosition, wxDefaultSize, 0 ); + bScaleSizer->Add( m_scale1, 0, 0, 5 ); + + m_scaleFit = new wxRadioButton( bScaleSizer->GetStaticBox(), wxID_ANY, _("Fit to page"), wxDefaultPosition, wxDefaultSize, 0 ); + bScaleSizer->Add( m_scaleFit, 0, wxTOP, 5 ); + + wxBoxSizer* bSizer10; + bSizer10 = new wxBoxSizer( wxHORIZONTAL ); + + m_scaleCustom = new wxRadioButton( bScaleSizer->GetStaticBox(), wxID_ANY, _("Custom:"), wxDefaultPosition, wxDefaultSize, 0 ); + bSizer10->Add( m_scaleCustom, 0, wxTOP, 5 ); + + m_scaleCustomText = new wxTextCtrl( bScaleSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_scaleCustomText->SetToolTip( _("Set X scale adjust for exact scale plotting") ); + + bSizer10->Add( m_scaleCustomText, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + + bScaleSizer->Add( bSizer10, 1, wxEXPAND, 5 ); + + + bOptionsSizer->Add( bScaleSizer, 0, wxALL|wxEXPAND, 5 ); + + + bUpperSizer->Add( bOptionsSizer, 1, wxEXPAND, 5 ); + + + bMainSizer->Add( bUpperSizer, 1, wxEXPAND|wxALL, 5 ); + + m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); + bMainSizer->Add( m_staticline1, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 ); + + wxBoxSizer* bButtonsSizer; + bButtonsSizer = new wxBoxSizer( wxHORIZONTAL ); + + m_buttonOption = new wxButton( this, wxID_PRINT_OPTIONS, _("Page Setup..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonOption->SetMinSize( wxSize( 120,-1 ) ); + + bButtonsSizer->Add( m_buttonOption, 0, wxALL|wxEXPAND, 5 ); + + m_sdbSizer1 = new wxStdDialogButtonSizer(); + m_sdbSizer1OK = new wxButton( this, wxID_OK ); + m_sdbSizer1->AddButton( m_sdbSizer1OK ); + m_sdbSizer1Apply = new wxButton( this, wxID_APPLY ); + m_sdbSizer1->AddButton( m_sdbSizer1Apply ); + m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); + m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); + m_sdbSizer1->Realize(); + + bButtonsSizer->Add( m_sdbSizer1, 1, wxALL|wxEXPAND, 5 ); + + + bMainSizer->Add( bButtonsSizer, 0, wxEXPAND|wxLEFT, 10 ); + + + this->SetSizer( bMainSizer ); + this->Layout(); + + this->Centre( wxBOTH ); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_GENERIC_BASE::onClose ) ); + m_scaleCustomText->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onSetCustomScale ), NULL, this ); + m_buttonOption->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onPageSetup ), NULL, this ); + m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onPrintPreview ), NULL, this ); + m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onCloseButton ), NULL, this ); + m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onPrintButtonClick ), NULL, this ); +} + +DIALOG_PRINT_GENERIC_BASE::~DIALOG_PRINT_GENERIC_BASE() +{ + // Disconnect Events + this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_GENERIC_BASE::onClose ) ); + m_scaleCustomText->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onSetCustomScale ), NULL, this ); + m_buttonOption->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onPageSetup ), NULL, this ); + m_sdbSizer1Apply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onPrintPreview ), NULL, this ); + m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onCloseButton ), NULL, this ); + m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_GENERIC_BASE::onPrintButtonClick ), NULL, this ); + +} diff --git a/pcbnew/dialogs/dialog_print_pcbnew_base.fbp b/common/dialogs/dialog_print_generic_base.fbp similarity index 53% rename from pcbnew/dialogs/dialog_print_pcbnew_base.fbp rename to common/dialogs/dialog_print_generic_base.fbp index 70e6ef64e2..8147cbfc68 100644 --- a/pcbnew/dialogs/dialog_print_pcbnew_base.fbp +++ b/common/dialogs/dialog_print_generic_base.fbp @@ -11,11 +11,11 @@ res UTF-8 connect - dialog_print_pcbnew_base + dialog_print_generic_base 1000 none 1 - DIALOG_PRINT_PCBNEW + DIALOG_PRINT_GENERIC . @@ -42,9 +42,9 @@ wxID_ANY -1,-1 - DIALOG_PRINT_PCBNEW_BASE + DIALOG_PRINT_GENERIC_BASE - 700,550 + 410,476 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER DIALOG_SHIM; dialog_shim.h Print @@ -61,7 +61,7 @@ - + onClose @@ -101,710 +101,43 @@ bUpperSizer wxHORIZONTAL - none + protected - 5 - wxALL|wxEXPAND - 1 - - wxID_ANY - Included Layers - - sbLayersSizer - wxVERTICAL - 1 - none - - - 5 - wxALL|wxEXPAND - 1 - - - bLayerListsSizer - wxHORIZONTAL - none - - 5 - wxEXPAND - 1 - - - bSizer6 - wxVERTICAL - none - - 5 - wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Copper layers: - - 0 - - - 0 - - 1 - m_staticText4 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_CopperLayersList - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND - 1 - - - bSizer7 - wxVERTICAL - none - - 5 - wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Technical layers: - - 0 - - - 0 - - 1 - m_staticText5 - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_TechnicalLayersList - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND - 0 - - - bSizer9 - wxHORIZONTAL - none - - 5 - wxALL - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Select all - - 0 - - - 0 - - 1 - m_buttonSelectAll - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnSelectAllClick - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Deselect all - - 0 - - - 0 - - 1 - m_buttonDeselectAll - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnDeselectAllClick - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Exclude PCB edge layer - - 0 - - - 0 - - 1 - m_Exclude_Edges_Pcb - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - Exclude contents of Edges_Pcb layer from all other layers - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 wxEXPAND - 0 - + 1 + bOptionsSizer wxVERTICAL none - + 5 wxEXPAND|wxALL 1 - + wxID_ANY Options sbOptionsSizer wxVERTICAL 1 - none + protected - + 5 wxEXPAND 1 - + wxBOTH 1 0 - gbSizer1 + gbOptionsSizer wxFLEX_GROWMODE_SPECIFIED - none + protected 2 5 @@ -1072,183 +405,6 @@ - - 5 - 1 - 0 - wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL - 1 - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Drill marks: - - 0 - - - 0 - - 1 - m_drillMarksLabel - 1 - - - protected - 1 - - Resizable - 1 - - - ; forward_declare - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - 1 - 1 - wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND - 1 - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - "No drill mark" "Small mark" "Real drill" - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - - 0 - - 1 - m_drillMarksChoice - 1 - - - protected - 1 - - Resizable - 0 - 1 - - - ; forward_declare - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 1 @@ -1517,196 +673,15 @@ - - 5 - 3 - 0 - wxBOTTOM|wxRIGHT|wxLEFT - 4 - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Print mirrored - - 0 - - - 0 - - 1 - m_Print_Mirror - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND|wxLEFT|wxRIGHT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - "One page per layer" "All layers on single page" - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_PAGE_MODE - Pagination - 1 - - 0 - - - 0 - - 1 - m_PagesOption - 1 - - - protected - 1 - - Resizable - 0 - 1 - - wxRA_SPECIFY_COLS - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 5 wxALL|wxEXPAND 0 - + wxID_ANY Scale @@ -1891,11 +866,11 @@ - + 5 wxEXPAND 1 - + bSizer10 wxHORIZONTAL @@ -2072,7 +1047,7 @@ - OnSetCustomScale + onSetCustomScale @@ -2239,7 +1214,7 @@ - OnPageSetup + onPageSetup @@ -2281,12 +1256,12 @@ m_sdbSizer1 protected - OnPrintPreview - + onPrintPreview + onCloseButton - OnPrintButtonClick + onPrintButtonClick diff --git a/pcbnew/dialogs/dialog_print_pcbnew_base.h b/common/dialogs/dialog_print_generic_base.h similarity index 55% rename from pcbnew/dialogs/dialog_print_pcbnew_base.h rename to common/dialogs/dialog_print_generic_base.h index 691fdc96ca..cbac148ba1 100644 --- a/pcbnew/dialogs/dialog_print_pcbnew_base.h +++ b/common/dialogs/dialog_print_generic_base.h @@ -5,8 +5,8 @@ // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#ifndef __DIALOG_PRINT_PCBNEW_BASE_H__ -#define __DIALOG_PRINT_PCBNEW_BASE_H__ +#ifndef __DIALOG_PRINT_GENERIC_BASE_H__ +#define __DIALOG_PRINT_GENERIC_BASE_H__ #include #include @@ -20,25 +20,23 @@ class DIALOG_SHIM; #include #include #include -#include -#include -#include -#include -#include #include #include +#include #include -#include +#include +#include #include #include +#include #include /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// -/// Class DIALOG_PRINT_PCBNEW_BASE +/// Class DIALOG_PRINT_GENERIC_BASE /////////////////////////////////////////////////////////////////////////////// -class DIALOG_PRINT_PCBNEW_BASE : public DIALOG_SHIM +class DIALOG_PRINT_GENERIC_BASE : public DIALOG_SHIM { private: @@ -46,27 +44,18 @@ class DIALOG_PRINT_PCBNEW_BASE : public DIALOG_SHIM enum { wxID_FRAME_SEL = 1000, - wxID_PAGE_MODE, wxID_PRINT_OPTIONS }; - wxStaticText* m_staticText4; - wxCheckListBox* m_CopperLayersList; - wxStaticText* m_staticText5; - wxCheckListBox* m_TechnicalLayersList; - wxButton* m_buttonSelectAll; - wxButton* m_buttonDeselectAll; - wxCheckBox* m_Exclude_Edges_Pcb; + wxBoxSizer* bUpperSizer; + wxStaticBoxSizer* sbOptionsSizer; + wxGridBagSizer* gbOptionsSizer; wxStaticText* m_penWidthLabel; wxTextCtrl* m_penWidthCtrl; wxStaticText* m_penWidthUnits; - wxStaticText* m_drillMarksLabel; - wxChoice* m_drillMarksChoice; wxStaticText* m_outputModeLabel; wxChoice* m_outputMode; - wxCheckBox* m_Print_Sheet_Ref; - wxCheckBox* m_Print_Mirror; - wxRadioBox* m_PagesOption; + wxCheckBox* m_titleBlock; wxRadioButton* m_scale1; wxRadioButton* m_scaleFit; wxRadioButton* m_scaleCustom; @@ -79,19 +68,19 @@ class DIALOG_PRINT_PCBNEW_BASE : public DIALOG_SHIM wxButton* m_sdbSizer1Cancel; // Virtual event handlers, overide them in your derived class - virtual void OnSelectAllClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnDeselectAllClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnSetCustomScale( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPageSetup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPrintPreview( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPrintButtonClick( wxCommandEvent& event ) { event.Skip(); } + virtual void onClose( wxCloseEvent& event ) { event.Skip(); } + virtual void onSetCustomScale( wxCommandEvent& event ) { event.Skip(); } + virtual void onPageSetup( wxCommandEvent& event ) { event.Skip(); } + virtual void onPrintPreview( wxCommandEvent& event ) { event.Skip(); } + virtual void onCloseButton( wxCommandEvent& event ) { event.Skip(); } + virtual void onPrintButtonClick( wxCommandEvent& event ) { event.Skip(); } public: - DIALOG_PRINT_PCBNEW_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Print"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 700,550 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~DIALOG_PRINT_PCBNEW_BASE(); + DIALOG_PRINT_GENERIC_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Print"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 410,476 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_PRINT_GENERIC_BASE(); }; -#endif //__DIALOG_PRINT_PCBNEW_BASE_H__ +#endif //__DIALOG_PRINT_GENERIC_BASE_H__ diff --git a/common/printout.cpp b/common/printout.cpp new file mode 100644 index 0000000000..a9dbfcec98 --- /dev/null +++ b/common/printout.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2018 CERN + * Author: Maciej Suminski + * + * 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 3 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, see . + */ + +#include +#include +#include + +void PRINTOUT_SETTINGS::Save( wxConfigBase* aConfig ) +{ + aConfig->Write( OPTKEY_PRINT_SCALE, m_scale ); + aConfig->Write( OPTKEY_PRINT_PAGE_FRAME, m_titleBlock ); + aConfig->Write( OPTKEY_PRINT_MONOCHROME_MODE, m_blackWhite ); +} + + +void PRINTOUT_SETTINGS::Load( wxConfigBase* aConfig ) +{ + aConfig->Read( OPTKEY_PRINT_SCALE, &m_scale, 1.0 ); + aConfig->Read( OPTKEY_PRINT_PAGE_FRAME, &m_titleBlock, false ); + aConfig->Read( OPTKEY_PRINT_MONOCHROME_MODE, &m_blackWhite, 1 ); +} diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index ebb52e2955..0cc5fd2488 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -10,6 +10,7 @@ include_directories( ../include/legacy_wx ../pcbnew dialogs + ../common ../3d-viewer ../polygon ${INC_AFTER} @@ -22,8 +23,7 @@ set( DIALOGS_SRCS dialogs/panel_gerbview_settings.cpp dialogs/panel_gerbview_settings_base.cpp dialogs/dialog_layers_select_to_pcb_base.cpp - dialogs/dialog_print_using_printer.cpp - dialogs/dialog_print_using_printer_base.cpp + dialogs/dialog_print_gerbview.cpp dialogs/dialog_select_one_pcb_layer.cpp ) diff --git a/gerbview/dialogs/dialog_print_gerbview.cpp b/gerbview/dialogs/dialog_print_gerbview.cpp new file mode 100644 index 0000000000..c5f2ec98d1 --- /dev/null +++ b/gerbview/dialogs/dialog_print_gerbview.cpp @@ -0,0 +1,328 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2010-2016 Jean-Pierre Charras jp.charras at wanadoo.fr + * Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors. + * Copyright (C) 2018 CERN + * Author: Maciej Suminski + * + * 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 + */ + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +///@{ +/// \ingroup config + +#define OPTKEY_LAYERBASE wxT( "PlotLayer_%d" ) +#define OPTKEY_PRINT_X_FINESCALE_ADJ wxT( "PrintXFineScaleAdj" ) +#define OPTKEY_PRINT_Y_FINESCALE_ADJ wxT( "PrintYFineScaleAdj" ) +#define OPTKEY_PRINT_SCALE wxT( "PrintScale" ) +#define OPTKEY_PRINT_PAGE_FRAME wxT( "PrintPageFrame" ) +#define OPTKEY_PRINT_MONOCHROME_MODE wxT( "PrintMonochrome" ) + +///@} + + +class DIALOG_PRINT_GERBVIEW : public DIALOG_PRINT_GENERIC +{ +public: + DIALOG_PRINT_GERBVIEW( GERBVIEW_FRAME* aParent, BOARD_PRINTOUT_SETTINGS* aSettings ); + ~DIALOG_PRINT_GERBVIEW() {}; + +private: + BOARD_PRINTOUT_SETTINGS* settings() const + { + wxASSERT( dynamic_cast( m_settings ) ); + return static_cast( m_settings ); + } + + bool TransferDataToWindow() override; + + void createExtraOptions(); + void createLeftPanel(); + + void onSelectAllClick( wxCommandEvent& event ); + void onDeselectAllClick( wxCommandEvent& event ); + + ///> (Un)check all items in a checklist box + void setListBoxValue( wxCheckListBox* aList, bool aValue ); + + ///> Check whether a layer is enabled in a listbox + bool isLayerEnabled( unsigned int aLayer ) const; + + ///> Enable/disable layer in a listbox + void enableLayer( unsigned int aLayer, bool aValue ); + + ///> Update layerset basing on the selected layers + int setLayerSetFromList(); + + void saveSettings() override; + + wxPrintout* createPrintout( const wxString& aTitle ) override + { + return new GERBVIEW_PRINTOUT( m_parent->GetGerberLayout(), *settings(), + m_parent->GetGalCanvas()->GetView(), m_parent->GetPageSettings().GetSizeIU(), aTitle ); + } + + GERBVIEW_FRAME* m_parent; + + // Number of layers in each list + static constexpr unsigned int LAYER_PER_LIST = 16; + + // Number of layer list widgets + static constexpr unsigned int LAYER_LIST_COUNT = 2; + + // Extra widgets + wxCheckListBox* m_layerLists[LAYER_LIST_COUNT]; + wxButton* m_buttonSelectAll; + wxButton* m_buttonDeselectAll; + wxCheckBox* m_checkboxMirror; + + // Map layer numbers to items on the list + std::unordered_map m_layerToItemMap; +}; + + +DIALOG_PRINT_GERBVIEW::DIALOG_PRINT_GERBVIEW( GERBVIEW_FRAME* aParent, BOARD_PRINTOUT_SETTINGS* aSettings ) : + DIALOG_PRINT_GENERIC( aParent, aSettings ) +{ + m_parent = aParent; + m_config = Kiface().KifaceSettings(); + + // Line width settings range + m_lineWidth.SetMax( KiROUND( 5 * IU_PER_MM ) ); + m_lineWidth.SetMin( KiROUND( 0.005 * IU_PER_MM ) ); + + createExtraOptions(); + createLeftPanel(); +} + + +bool DIALOG_PRINT_GERBVIEW::TransferDataToWindow() +{ + if( !DIALOG_PRINT_GENERIC::TransferDataToWindow() ) + return false; + + if( m_config ) + settings()->Load( m_config ); + + GERBER_FILE_IMAGE_LIST* images = m_parent->GetGerberLayout()->GetImagesList(); + int itemIdx = 0; + + // Create layer list + for( unsigned ii = 0; ii < images->ImagesMaxCount(); ++ii ) + { + wxString layerName; + unsigned int listIdx = itemIdx / LAYER_PER_LIST; + + if( listIdx >= LAYER_LIST_COUNT ) + { + wxFAIL; + break; + } + + GERBER_FILE_IMAGE* gbrImage = images->GetGbrImage( ii ); + + if( !gbrImage ) + continue; + + wxFileName filename( gbrImage->m_FileName ); + m_layerLists[listIdx]->Append( filename.GetFullName() ); + wxASSERT( m_layerToItemMap.count( ii ) == 0 ); + m_layerToItemMap[ii] = itemIdx; + ++itemIdx; + } + + m_checkboxMirror->SetValue( settings()->m_mirror ); + + // Update the dialog layout when layers are added + GetSizer()->Fit( this ); + + return true; +} + + +void DIALOG_PRINT_GERBVIEW::createExtraOptions() +{ + wxGridBagSizer* optionsSizer = getOptionsSizer(); + wxStaticBox* box = getOptionsBox(); + int rows = optionsSizer->GetEffectiveRowsCount(); + int cols = optionsSizer->GetEffectiveColsCount(); + + // Print mirrored + m_checkboxMirror = new wxCheckBox( box, wxID_ANY, _( "Print mirrored" ) ); + optionsSizer->Add( m_checkboxMirror, wxGBPosition( rows, 0 ), wxGBSpan( 1, cols ), + wxBOTTOM | wxRIGHT | wxLEFT, 5 ); +} + + +void DIALOG_PRINT_GERBVIEW::createLeftPanel() +{ + wxStaticBoxSizer* sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, + wxID_ANY, _( "Included Layers" ) ), wxVERTICAL ); + + // Layer lists + wxBoxSizer* bLayerListsSizer = new wxBoxSizer( wxHORIZONTAL ); + + for( unsigned int i = 0; i < LAYER_LIST_COUNT; ++i ) + { + m_layerLists[i] = new wxCheckListBox( sbLayersSizer->GetStaticBox(), wxID_ANY ); + bLayerListsSizer->Add( m_layerLists[i], 1, wxEXPAND, 5 ); + } + + + // Select/Unselect all buttons + m_buttonSelectAll = new wxButton( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Select all" ) ); + m_buttonDeselectAll = new wxButton( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Deselect all" ) ); + + m_buttonSelectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler( DIALOG_PRINT_GERBVIEW::onSelectAllClick ), NULL, this ); + m_buttonDeselectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler( DIALOG_PRINT_GERBVIEW::onDeselectAllClick ), NULL, this ); + + wxBoxSizer* buttonSizer = new wxBoxSizer( wxHORIZONTAL ); + buttonSizer->Add( m_buttonSelectAll, 1, wxALL, 5 ); + buttonSizer->Add( m_buttonDeselectAll, 1, wxALL, 5 ); + + // Static box sizer layout + sbLayersSizer->Add( bLayerListsSizer, 1, wxALL | wxEXPAND, 5 ); + sbLayersSizer->Add( buttonSizer, 0, wxALL | wxEXPAND, 5 ); + + getMainSizer()->Insert( 0, sbLayersSizer, 1, wxEXPAND ); +} + + +void DIALOG_PRINT_GERBVIEW::onSelectAllClick( wxCommandEvent& event ) +{ + for( unsigned int i = 0; i < LAYER_LIST_COUNT; ++i ) + setListBoxValue( m_layerLists[i], true ); +} + + +void DIALOG_PRINT_GERBVIEW::onDeselectAllClick( wxCommandEvent& event ) +{ + for( unsigned int i = 0; i < LAYER_LIST_COUNT; ++i ) + setListBoxValue( m_layerLists[i], false ); +} + + +void DIALOG_PRINT_GERBVIEW::setListBoxValue( wxCheckListBox* aList, bool aValue ) +{ + for( unsigned int i = 0; i < aList->GetCount(); ++i ) + aList->Check( i, aValue ); +} + + +bool DIALOG_PRINT_GERBVIEW::isLayerEnabled( unsigned int aLayer ) const +{ + auto layerMapIt = m_layerToItemMap.find( aLayer ); + + if( layerMapIt == m_layerToItemMap.end() ) + return false; + + unsigned int itemNr = layerMapIt->second; + unsigned int listIdx = itemNr / LAYER_PER_LIST; + unsigned int itemIdx = itemNr % LAYER_PER_LIST; + wxCHECK( listIdx < LAYER_LIST_COUNT, false ); + wxCheckListBox* listBox = m_layerLists[listIdx]; + + return itemIdx < listBox->GetCount() && listBox->IsChecked( itemIdx ); +} + + +void DIALOG_PRINT_GERBVIEW::enableLayer( unsigned int aLayer, bool aValue ) +{ + auto layerMapIt = m_layerToItemMap.find( aLayer ); + + if( layerMapIt == m_layerToItemMap.end() ) + return; + + unsigned int itemNr = layerMapIt->second; + unsigned int listIdx = itemNr / LAYER_PER_LIST; + unsigned int itemIdx = itemNr % LAYER_PER_LIST; + wxCHECK( listIdx < LAYER_LIST_COUNT, /* void */ ); + wxCheckListBox* listBox = m_layerLists[listIdx]; + + if( itemIdx < listBox->GetCount() ) + listBox->Check( itemIdx, aValue ); +} + + +int DIALOG_PRINT_GERBVIEW::setLayerSetFromList() +{ + settings()->m_layerSet = LSET(); + int& pageCount = settings()->m_pageCount; + pageCount = 0; + + unsigned int layer = 0; + + for( unsigned int j = 0; j < LAYER_LIST_COUNT; ++j ) + { + for( unsigned int i = 0; i < LAYER_PER_LIST; ++i ) + { + if( isLayerEnabled( layer ) ) + { + settings()->m_layerSet.set( layer ); + ++pageCount; + } + + ++layer; + } + } + + return pageCount; +} + + +void DIALOG_PRINT_GERBVIEW::saveSettings() +{ + setLayerSetFromList(); + + settings()->m_mirror = m_checkboxMirror->GetValue(); + + DIALOG_PRINT_GENERIC::saveSettings(); +} + + +void GERBVIEW_FRAME::ToPrinter( wxCommandEvent& event ) +{ + // Selection affects the original item visibility + GetToolManager()->RunAction( GERBVIEW_ACTIONS::selectionClear, true ); + + BOARD_PRINTOUT_SETTINGS settings( GetPageSettings() ); + DIALOG_PRINT_GERBVIEW dlg( this, &settings ); + dlg.ForcePrintBorder( false ); + dlg.ShowModal(); +} diff --git a/gerbview/dialogs/dialog_print_using_printer.cpp b/gerbview/dialogs/dialog_print_using_printer.cpp deleted file mode 100644 index e918f02d8a..0000000000 --- a/gerbview/dialogs/dialog_print_using_printer.cpp +++ /dev/null @@ -1,432 +0,0 @@ -/* - * This program source code file is part of KiCad, a free EDA CAD application. - * - * Copyright (C) 2010-2016 Jean-Pierre Charras jp.charras at wanadoo.fr - * Copyright (C) 1992-2016 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 - */ - -#include - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include - -///@{ -/// \ingroup config - -#define OPTKEY_LAYERBASE wxT( "PlotLayer_%d" ) -#define OPTKEY_PRINT_X_FINESCALE_ADJ wxT( "PrintXFineScaleAdj" ) -#define OPTKEY_PRINT_Y_FINESCALE_ADJ wxT( "PrintYFineScaleAdj" ) -#define OPTKEY_PRINT_SCALE wxT( "PrintScale" ) -#define OPTKEY_PRINT_PAGE_FRAME wxT( "PrintPageFrame" ) -#define OPTKEY_PRINT_MONOCHROME_MODE wxT( "PrintMonochrome" ) - -///@} - -static double s_ScaleList[] = -{ 0, 0.5, 0.7, 0.999, 1.0, 1.4, 2.0, 3.0, 4.0 }; - -// Define min et max reasonnable values for print scale -#define MIN_SCALE 0.01 -#define MAX_SCALE 100.0 - -// static print data and page setup data, to remember settings during the session -static wxPrintData* s_printData; -static wxPageSetupDialogData* s_pageSetupData = (wxPageSetupDialogData*) NULL; - -// Variables locales -static PRINT_PARAMETERS s_Parameters; - - -/* Dialog to print schematic. Class derived from DIALOG_PRINT_USING_PRINTER_BASE - * created by wxFormBuilder - */ -class DIALOG_PRINT_USING_PRINTER : public DIALOG_PRINT_USING_PRINTER_BASE -{ -private: - GERBVIEW_FRAME* m_Parent; - wxConfigBase* m_Config; - wxCheckBox* m_BoxSelectLayer[32]; - -public: - DIALOG_PRINT_USING_PRINTER( GERBVIEW_FRAME* parent ); - ~DIALOG_PRINT_USING_PRINTER() {}; - -private: - void OnCloseWindow( wxCloseEvent& event ) override; - void OnInitDialog( wxInitDialogEvent& event ); - void OnPageSetup( wxCommandEvent& event ) override; - void OnPrintPreview( wxCommandEvent& event ) override; - void OnPrintButtonClick( wxCommandEvent& event ) override; - void OnScaleSelectionClick( wxCommandEvent& event ) override; - - void OnButtonCloseClick( wxCommandEvent& event ) override { Close(); } - void SetPrintParameters(); - void InitValues(); - - GERBVIEW_PRINTOUT* createPrintout( const wxString& aTitle ) - { - return new GERBVIEW_PRINTOUT( m_Parent->GetGerberLayout(), s_Parameters, - m_Parent->GetGalCanvas()->GetView(), m_Parent->GetPageSettings().GetSizeIU(), aTitle ); - } - -public: - bool IsMirrored() { return m_Print_Mirror->IsChecked(); } - bool PrintUsingSinglePage() { return true; } - int SetLayerSetFromListSelection(); -}; - - -void GERBVIEW_FRAME::ToPrinter( wxCommandEvent& event ) -{ - // Selection affects the original item visibility - GetToolManager()->RunAction( GERBVIEW_ACTIONS::selectionClear, true ); - - if( s_printData == NULL ) // First print - s_printData = new wxPrintData(); - - if( !s_printData->Ok() ) - { - DisplayError( this, _( "Error Init Printer info" ) ); - return; - } - - s_printData->SetQuality( wxPRINT_QUALITY_HIGH ); - s_printData->SetOrientation( GetPageSettings().IsPortrait() ? - wxPORTRAIT : wxLANDSCAPE ); - - DIALOG_PRINT_USING_PRINTER* frame = new DIALOG_PRINT_USING_PRINTER( this ); - - frame->ShowModal(); - frame->Destroy(); -} - - -DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER( GERBVIEW_FRAME* parent ) : - DIALOG_PRINT_USING_PRINTER_BASE( parent ) -{ - m_Parent = parent; - m_Config = Kiface().KifaceSettings(); - - InitValues( ); - GetSizer()->SetSizeHints( this ); - -#ifdef __WXMAC__ - /* Problems with modal on wx-2.9 - Anyway preview is standard for OSX */ - m_buttonPreview->Hide(); -#endif - - GetSizer()->Fit( this ); -} - - -void DIALOG_PRINT_USING_PRINTER::InitValues( ) -{ - SetFocus(); - wxString msg; - - if( s_pageSetupData == NULL ) - { - s_pageSetupData = new wxPageSetupDialogData; - // Set initial page margins. - // Margins are already set in Gerbview, so we can use 0 - s_pageSetupData->SetMarginTopLeft( wxPoint( 0, 0 ) ); - s_pageSetupData->SetMarginBottomRight( wxPoint( 0, 0 ) ); - } - - s_Parameters.m_PageSetupData = s_pageSetupData; - GERBER_FILE_IMAGE_LIST* images = m_Parent->GetGerberLayout()->GetImagesList(); - - // Create layer list - for( unsigned ii = 0; ii < images->ImagesMaxCount(); ++ii ) - { - msg = _( "Layer" ); - msg << wxT( " " ) << ii + 1; - - wxStaticBoxSizer* boxSizer = ( ii < 16 ) ? m_leftLayersBoxSizer - : m_rightLayersBoxSizer; - - m_BoxSelectLayer[ii] = new wxCheckBox( boxSizer->GetStaticBox(), - wxID_ANY, msg ); - boxSizer->Add( m_BoxSelectLayer[ii], wxGROW | wxLEFT | wxRIGHT | wxTOP ); - - if( images->GetGbrImage( ii ) == NULL ) // Nothing loaded on this draw layer - m_BoxSelectLayer[ii]->Enable( false ); - } - - // Read the scale adjust option - int scale_idx = 4; // default selected scale = ScaleList[4] = 1.000 - - if( m_Config ) - { - m_Config->Read( OPTKEY_PRINT_X_FINESCALE_ADJ, &s_Parameters.m_XScaleAdjust ); - m_Config->Read( OPTKEY_PRINT_Y_FINESCALE_ADJ, &s_Parameters.m_YScaleAdjust ); - m_Config->Read( OPTKEY_PRINT_SCALE, &scale_idx ); - m_Config->Read( OPTKEY_PRINT_PAGE_FRAME, &s_Parameters.m_Print_Sheet_Ref, 1 ); - m_Config->Read( OPTKEY_PRINT_MONOCHROME_MODE, &s_Parameters.m_Print_Black_and_White, 1 ); - - // Test for a reasonnable scale value. Set to 1 if problem - if( s_Parameters.m_XScaleAdjust < MIN_SCALE || - s_Parameters.m_YScaleAdjust < MIN_SCALE || - s_Parameters.m_XScaleAdjust > MAX_SCALE || - s_Parameters.m_YScaleAdjust > MAX_SCALE ) - s_Parameters.m_XScaleAdjust = s_Parameters.m_YScaleAdjust = 1.0; - - for( int layer = 0; layer < GERBER_DRAWLAYERS_COUNT; ++layer ) - { - wxString layerKey; - bool option; - - layerKey.Printf( OPTKEY_LAYERBASE, layer ); - m_Config->Read( layerKey, &option, false ); - m_BoxSelectLayer[layer]->SetValue( option ); - } - } - - m_ScaleOption->SetSelection( scale_idx ); - scale_idx = m_ScaleOption->GetSelection(); - s_Parameters.m_PrintScale = s_ScaleList[scale_idx]; - m_Print_Mirror->SetValue( s_Parameters.m_PrintMirror ); - - - if( s_Parameters.m_Print_Black_and_White ) - m_ModeColorOption->SetSelection( 1 ); - else - m_ModeColorOption->SetSelection( 0 ); - - s_Parameters.m_PenDefaultSize = 0; - s_Parameters.m_Print_Sheet_Ref = false; - - // Create scale adjust option - msg.Printf( wxT( "%f" ), s_Parameters.m_XScaleAdjust ); - m_FineAdjustXscaleOpt->SetValue( msg ); - msg.Printf( wxT( "%f" ), s_Parameters.m_YScaleAdjust ); - m_FineAdjustYscaleOpt->SetValue( msg ); - - bool enable = (s_Parameters.m_PrintScale == 1.0); - - m_FineAdjustXscaleOpt->Enable(enable); - m_FineAdjustYscaleOpt->Enable(enable); -} - - -int DIALOG_PRINT_USING_PRINTER::SetLayerSetFromListSelection() -{ - s_Parameters.m_PrintMaskLayer = LSET(); - s_Parameters.m_PageCount = 0; - s_Parameters.m_Flags = 0; - - for( unsigned layer = 0; layer < DIM( m_BoxSelectLayer ); ++layer ) - { - if( m_BoxSelectLayer[layer]->IsChecked() && m_BoxSelectLayer[layer]->IsEnabled() ) - { - ++s_Parameters.m_PageCount; - s_Parameters.m_PrintMaskLayer.set( layer ); - } - } - - return s_Parameters.m_PageCount; -} - - -void DIALOG_PRINT_USING_PRINTER::OnCloseWindow( wxCloseEvent& event ) -{ - SetPrintParameters(); - - if( m_Config ) - { - m_Config->Write( OPTKEY_PRINT_X_FINESCALE_ADJ, s_Parameters.m_XScaleAdjust ); - m_Config->Write( OPTKEY_PRINT_Y_FINESCALE_ADJ, s_Parameters.m_YScaleAdjust ); - m_Config->Write( OPTKEY_PRINT_SCALE, m_ScaleOption->GetSelection() ); - m_Config->Write( OPTKEY_PRINT_PAGE_FRAME, s_Parameters.m_Print_Sheet_Ref); - m_Config->Write( OPTKEY_PRINT_MONOCHROME_MODE, s_Parameters.m_Print_Black_and_White); - wxString layerKey; - - for( int layer = 0; layer < GERBER_DRAWLAYERS_COUNT; ++layer ) - { - layerKey.Printf( OPTKEY_LAYERBASE, layer ); - m_Config->Write( layerKey, m_BoxSelectLayer[layer]->IsChecked() ); - } - } - - EndModal( 0 ); -} - - -void DIALOG_PRINT_USING_PRINTER::SetPrintParameters() -{ - s_Parameters.m_PrintMirror = m_Print_Mirror->GetValue(); - s_Parameters.m_Print_Black_and_White = m_ModeColorOption->GetSelection() != 0; - - // Due to negative objects in gerber objects, always use one page per image, - // because these objects create artefact when they are printed on an existing image. - s_Parameters.m_OptionPrintPage = false; - - SetLayerSetFromListSelection(); - - int idx = m_ScaleOption->GetSelection(); - s_Parameters.m_PrintScale = s_ScaleList[idx]; - - // Test for a reasonnable scale value - bool ok = true; - double scaleX; - m_FineAdjustXscaleOpt->GetValue().ToDouble( &scaleX ); - - double scaleY; - m_FineAdjustYscaleOpt->GetValue().ToDouble( &scaleY ); - - if( scaleX > MAX_SCALE || scaleY > MAX_SCALE ) - { - DisplayInfoMessage( NULL, _( "Warning: Scale option set to a very large value" ) ); - ok = false; - } - - if( scaleX < MIN_SCALE || scaleY < MIN_SCALE ) - { - DisplayInfoMessage( NULL, _( "Warning: Scale option set to a very small value" ) ); - ok = false; - } - - if( ok ) - { - s_Parameters.m_XScaleAdjust = scaleX; - s_Parameters.m_YScaleAdjust = scaleY; - } - else - { - // Update actual fine scale value - m_FineAdjustXscaleOpt->SetValue( wxString::Format( "%f", s_Parameters.m_XScaleAdjust ) ); - m_FineAdjustYscaleOpt->SetValue( wxString::Format( "%f", s_Parameters.m_YScaleAdjust ) ); - } -} - - -void DIALOG_PRINT_USING_PRINTER::OnScaleSelectionClick( wxCommandEvent& event ) -{ - double scale = s_ScaleList[m_ScaleOption->GetSelection()]; - bool enable = ( scale == 1.0 ); - - if( m_FineAdjustXscaleOpt ) - m_FineAdjustXscaleOpt->Enable( enable ); - - if( m_FineAdjustYscaleOpt ) - m_FineAdjustYscaleOpt->Enable( enable ); -} - - -// Open a dialog box for printer setup (printer options, page size ...) -void DIALOG_PRINT_USING_PRINTER::OnPageSetup( wxCommandEvent& event ) -{ - *s_pageSetupData = *s_printData; - - wxPageSetupDialog pageSetupDialog(this, s_pageSetupData); - pageSetupDialog.ShowModal(); - - (*s_printData) = pageSetupDialog.GetPageSetupDialogData().GetPrintData(); - (*s_pageSetupData) = pageSetupDialog.GetPageSetupDialogData(); -} - - - -// Open and display a previewer frame for printing -void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event ) -{ - SetPrintParameters(); - - // If no layer selected, we have no plot. prompt user if it happens - // because he could think there is a bug in Pcbnew: - if( s_Parameters.m_PrintMaskLayer == 0 ) - { - DisplayError( this, _( "No layer selected" ) ); - return; - } - - // Pass two printout objects: for preview, and possible printing. - wxString title = _( "Print Preview" ); - wxPrintPreview* preview = - new wxPrintPreview( createPrintout( title ), createPrintout( 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 ) ); - - frame->Initialize(); - - frame->Raise(); // Needed on Ubuntu/Unity to display the frame - frame->Show( true ); -} - - -void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event ) -{ - SetPrintParameters(); - - // If no layer selected, we have no plot. prompt user if it happens - // because he could think there is a bug in Pcbnew: - if( s_Parameters.m_PrintMaskLayer == 0 ) - { - DisplayError( this, _( "No layer selected" ) ); - return; - } - - wxPrintDialogData printDialogData( *s_printData ); - wxPrinter printer( &printDialogData ); - wxString title = _( "Print" ); - auto printout = std::unique_ptr( createPrintout( _( "Print" ) ) ); - - // Disable 'Print' button to prevent issuing another print - // command before the previous one is finished (causes problems on Windows) - ENABLER printBtnDisable( *m_buttonPrint, false ); - - if( !printer.Print( this, printout.get(), true ) ) - { - if( wxPrinter::GetLastError() == wxPRINTER_ERROR ) - DisplayError( this, _( "There was a problem printing" ) ); - } - else - { - *s_printData = printer.GetPrintDialogData().GetPrintData(); - } -} diff --git a/gerbview/dialogs/dialog_print_using_printer_base.cpp b/gerbview/dialogs/dialog_print_using_printer_base.cpp deleted file mode 100644 index 3abaa8e850..0000000000 --- a/gerbview/dialogs/dialog_print_using_printer_base.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Apr 19 2018) -// http://www.wxformbuilder.org/ -// -// PLEASE DO *NOT* EDIT THIS FILE! -/////////////////////////////////////////////////////////////////////////// - -#include "dialog_print_using_printer_base.h" - -/////////////////////////////////////////////////////////////////////////// - -DIALOG_PRINT_USING_PRINTER_BASE::DIALOG_PRINT_USING_PRINTER_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) -{ - this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - - wxBoxSizer* bMainSizer; - bMainSizer = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticBoxSizer* sbLayersSizer; - sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Layers:") ), wxVERTICAL ); - - wxBoxSizer* bleftSizer; - bleftSizer = new wxBoxSizer( wxHORIZONTAL ); - - m_leftLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Graphic layers:") ), wxVERTICAL ); - - - bleftSizer->Add( m_leftLayersBoxSizer, 1, wxALL, 5 ); - - m_rightLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Graphic layers:") ), wxVERTICAL ); - - - bleftSizer->Add( m_rightLayersBoxSizer, 1, wxALL, 5 ); - - - sbLayersSizer->Add( bleftSizer, 1, wxEXPAND, 5 ); - - - bMainSizer->Add( sbLayersSizer, 1, wxEXPAND, 5 ); - - wxBoxSizer* bmiddleLeftSizer; - bmiddleLeftSizer = new wxBoxSizer( wxVERTICAL ); - - wxString m_ScaleOptionChoices[] = { _("Fit to page"), _("Scale 0.5"), _("Scale 0.7"), _("Approximate scale 1"), _("Accurate scale 1"), _("Scale 1.4"), _("Scale 2"), _("Scale 3"), _("Scale 4") }; - int m_ScaleOptionNChoices = sizeof( m_ScaleOptionChoices ) / sizeof( wxString ); - m_ScaleOption = new wxRadioBox( this, wxID_ANY, _("Approximate Scale:"), wxDefaultPosition, wxDefaultSize, m_ScaleOptionNChoices, m_ScaleOptionChoices, 1, wxRA_SPECIFY_COLS ); - m_ScaleOption->SetSelection( 0 ); - bmiddleLeftSizer->Add( m_ScaleOption, 0, wxALL, 5 ); - - m_FineAdjustXscaleTitle = new wxStaticText( this, wxID_ANY, _("X scale:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_FineAdjustXscaleTitle->Wrap( -1 ); - bmiddleLeftSizer->Add( m_FineAdjustXscaleTitle, 0, wxRIGHT|wxLEFT, 5 ); - - m_FineAdjustXscaleOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_FineAdjustXscaleOpt->SetToolTip( _("Set X scale adjust for exact scale plotting") ); - - bmiddleLeftSizer->Add( m_FineAdjustXscaleOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_FineAdjustYscaleTitle = new wxStaticText( this, wxID_ANY, _("Y scale:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_FineAdjustYscaleTitle->Wrap( -1 ); - bmiddleLeftSizer->Add( m_FineAdjustYscaleTitle, 0, wxRIGHT|wxLEFT, 5 ); - - m_FineAdjustYscaleOpt = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_FineAdjustYscaleOpt->SetToolTip( _("Set Y scale adjust for exact scale plotting") ); - - bmiddleLeftSizer->Add( m_FineAdjustYscaleOpt, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - - bMainSizer->Add( bmiddleLeftSizer, 0, wxEXPAND, 5 ); - - wxBoxSizer* bmiddleRightSizer; - bmiddleRightSizer = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbOptionsSizer; - sbOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options:") ), wxVERTICAL ); - - m_Print_Mirror = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Mirror"), wxDefaultPosition, wxDefaultSize, 0 ); - sbOptionsSizer->Add( m_Print_Mirror, 0, wxALL, 5 ); - - - bmiddleRightSizer->Add( sbOptionsSizer, 0, wxEXPAND|wxALL, 5 ); - - wxString m_ModeColorOptionChoices[] = { _("Color"), _("Black and white") }; - int m_ModeColorOptionNChoices = sizeof( m_ModeColorOptionChoices ) / sizeof( wxString ); - m_ModeColorOption = new wxRadioBox( this, wxID_PRINT_MODE, _("Print Mode:"), wxDefaultPosition, wxDefaultSize, m_ModeColorOptionNChoices, m_ModeColorOptionChoices, 1, wxRA_SPECIFY_COLS ); - m_ModeColorOption->SetSelection( 0 ); - m_ModeColorOption->SetToolTip( _("Choose if you want to print sheets in color, or force the black and white mode.") ); - - bmiddleRightSizer->Add( m_ModeColorOption, 0, wxALL|wxEXPAND, 5 ); - - - bMainSizer->Add( bmiddleRightSizer, 0, wxEXPAND, 5 ); - - wxBoxSizer* b_buttonsSizer; - b_buttonsSizer = new wxBoxSizer( wxVERTICAL ); - - m_buttonOption = new wxButton( this, wxID_PRINT_OPTIONS, _("Page Options"), wxDefaultPosition, wxDefaultSize, 0 ); - b_buttonsSizer->Add( m_buttonOption, 0, wxALL|wxEXPAND, 5 ); - - m_buttonPreview = new wxButton( this, wxID_PREVIEW, _("Preview"), wxDefaultPosition, wxDefaultSize, 0 ); - b_buttonsSizer->Add( m_buttonPreview, 0, wxALL|wxEXPAND, 5 ); - - m_buttonPrint = new wxButton( this, wxID_PRINT_ALL, _("Print"), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonPrint->SetDefault(); - b_buttonsSizer->Add( m_buttonPrint, 0, wxALL|wxEXPAND, 5 ); - - m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); - b_buttonsSizer->Add( m_buttonQuit, 0, wxALL|wxEXPAND, 5 ); - - - bMainSizer->Add( b_buttonsSizer, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - - this->SetSizer( bMainSizer ); - this->Layout(); - bMainSizer->Fit( this ); - - // Connect Events - this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnCloseWindow ) ); - m_ScaleOption->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnScaleSelectionClick ), NULL, this ); - m_buttonOption->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPageSetup ), NULL, this ); - m_buttonPreview->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPrintPreview ), NULL, this ); - m_buttonPrint->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPrintButtonClick ), NULL, this ); - m_buttonQuit->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnButtonCloseClick ), NULL, this ); -} - -DIALOG_PRINT_USING_PRINTER_BASE::~DIALOG_PRINT_USING_PRINTER_BASE() -{ - // Disconnect Events - this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnCloseWindow ) ); - m_ScaleOption->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnScaleSelectionClick ), NULL, this ); - m_buttonOption->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPageSetup ), NULL, this ); - m_buttonPreview->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPrintPreview ), NULL, this ); - m_buttonPrint->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnPrintButtonClick ), NULL, this ); - m_buttonQuit->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_BASE::OnButtonCloseClick ), NULL, this ); - -} diff --git a/gerbview/dialogs/dialog_print_using_printer_base.fbp b/gerbview/dialogs/dialog_print_using_printer_base.fbp deleted file mode 100644 index b3a455e063..0000000000 --- a/gerbview/dialogs/dialog_print_using_printer_base.fbp +++ /dev/null @@ -1,1172 +0,0 @@ - - - - - - C++ - 1 - source_name - 0 - 0 - res - UTF-8 - connect - dialog_print_using_printer_base - 1000 - none - - 1 - DialogPrint_base - - . - - 1 - 1 - 1 - 1 - UI - 1 - 0 - - 0 - wxAUI_MGR_DEFAULT - - - - 1 - 1 - impl_virtual - - - - 0 - wxID_ANY - - -1,-1 - DIALOG_PRINT_USING_PRINTER_BASE - - -1,-1 - wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER - DIALOG_SHIM; dialog_shim.h - Print - - - - - - - - - - - - - - OnCloseWindow - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bMainSizer - wxHORIZONTAL - none - - 5 - wxEXPAND - 1 - - wxID_ANY - Layers: - - sbLayersSizer - wxVERTICAL - 1 - none - - - 5 - wxEXPAND - 1 - - - bleftSizer - wxHORIZONTAL - none - - 5 - wxALL - 1 - - wxID_ANY - Graphic layers: - - m_leftLayersBoxSizer - wxVERTICAL - 1 - protected - - - - - 5 - wxALL - 1 - - wxID_ANY - Graphic layers: - - m_rightLayersBoxSizer - wxVERTICAL - 1 - protected - - - - - - - - - 5 - wxEXPAND - 0 - - - bmiddleLeftSizer - wxVERTICAL - none - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - "Fit to page" "Scale 0.5" "Scale 0.7" "Approximate scale 1" "Accurate scale 1" "Scale 1.4" "Scale 2" "Scale 3" "Scale 4" - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Approximate Scale: - 1 - - 0 - - - 0 - - 1 - m_ScaleOption - 1 - - - protected - 1 - - Resizable - 0 - 1 - - wxRA_SPECIFY_COLS - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - OnScaleSelectionClick - - - - - - - - - - 5 - wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - X scale: - - 0 - - - 0 - - 1 - m_FineAdjustXscaleTitle - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - 0 - - 1 - m_FineAdjustXscaleOpt - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - Set X scale adjust for exact scale plotting - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxRIGHT|wxLEFT - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Y scale: - - 0 - - - 0 - - 1 - m_FineAdjustYscaleTitle - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - - 0 - - 0 - - 0 - - 1 - m_FineAdjustYscaleOpt - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - Set Y scale adjust for exact scale plotting - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxEXPAND - 0 - - - bmiddleRightSizer - wxVERTICAL - none - - 5 - wxEXPAND|wxALL - 0 - - wxID_ANY - Options: - - sbOptionsSizer - wxVERTICAL - 1 - none - - - 5 - wxALL - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Mirror - - 0 - - - 0 - - 1 - m_Print_Mirror - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - "Color" "Black and white" - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_PRINT_MODE - Print Mode: - 1 - - 0 - - - 0 - - 1 - m_ModeColorOption - 1 - - - protected - 1 - - Resizable - 0 - 1 - - wxRA_SPECIFY_COLS - - 0 - Choose if you want to print sheets in color, or force the black and white mode. - - wxFILTER_NONE - wxDefaultValidator - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALIGN_CENTER_VERTICAL - 0 - - - b_buttonsSizer - wxVERTICAL - none - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_PRINT_OPTIONS - Page Options - - 0 - - - 0 - - 1 - m_buttonOption - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnPageSetup - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_PREVIEW - Preview - - 0 - - - 0 - - 1 - m_buttonPreview - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnPrintPreview - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_PRINT_ALL - Print - - 0 - - - 0 - - 1 - m_buttonPrint - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnPrintButtonClick - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - wxALL|wxEXPAND - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_CANCEL - Close - - 0 - - - 0 - - 1 - m_buttonQuit - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - - - - OnButtonCloseClick - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gerbview/dialogs/dialog_print_using_printer_base.h b/gerbview/dialogs/dialog_print_using_printer_base.h deleted file mode 100644 index de12637172..0000000000 --- a/gerbview/dialogs/dialog_print_using_printer_base.h +++ /dev/null @@ -1,76 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Apr 19 2018) -// http://www.wxformbuilder.org/ -// -// PLEASE DO *NOT* EDIT THIS FILE! -/////////////////////////////////////////////////////////////////////////// - -#ifndef __DIALOG_PRINT_USING_PRINTER_BASE_H__ -#define __DIALOG_PRINT_USING_PRINTER_BASE_H__ - -#include -#include -#include -#include "dialog_shim.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////// -/// Class DIALOG_PRINT_USING_PRINTER_BASE -/////////////////////////////////////////////////////////////////////////////// -class DIALOG_PRINT_USING_PRINTER_BASE : public DIALOG_SHIM -{ - private: - - protected: - enum - { - wxID_PRINT_MODE = 1000, - wxID_PRINT_OPTIONS, - wxID_PRINT_ALL - }; - - wxStaticBoxSizer* m_leftLayersBoxSizer; - wxStaticBoxSizer* m_rightLayersBoxSizer; - wxRadioBox* m_ScaleOption; - wxStaticText* m_FineAdjustXscaleTitle; - wxTextCtrl* m_FineAdjustXscaleOpt; - wxStaticText* m_FineAdjustYscaleTitle; - wxTextCtrl* m_FineAdjustYscaleOpt; - wxCheckBox* m_Print_Mirror; - wxRadioBox* m_ModeColorOption; - wxButton* m_buttonOption; - wxButton* m_buttonPreview; - wxButton* m_buttonPrint; - wxButton* m_buttonQuit; - - // Virtual event handlers, overide them in your derived class - virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); } - virtual void OnScaleSelectionClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPageSetup( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPrintPreview( wxCommandEvent& event ) { event.Skip(); } - virtual void OnPrintButtonClick( wxCommandEvent& event ) { event.Skip(); } - virtual void OnButtonCloseClick( wxCommandEvent& event ) { event.Skip(); } - - - public: - - DIALOG_PRINT_USING_PRINTER_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Print"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); - ~DIALOG_PRINT_USING_PRINTER_BASE(); - -}; - -#endif //__DIALOG_PRINT_USING_PRINTER_BASE_H__ diff --git a/gerbview/gerbview_printout.cpp b/gerbview/gerbview_printout.cpp index ed480e3768..33a276f4cc 100644 --- a/gerbview/gerbview_printout.cpp +++ b/gerbview/gerbview_printout.cpp @@ -46,7 +46,7 @@ #include -GERBVIEW_PRINTOUT::GERBVIEW_PRINTOUT( GBR_LAYOUT* aLayout, const PRINT_PARAMETERS& aParams, +GERBVIEW_PRINTOUT::GERBVIEW_PRINTOUT( GBR_LAYOUT* aLayout, const BOARD_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView, const wxSize& aSheetSize, const wxString& aTitle ) : BOARD_PRINTOUT( aParams, aView, aSheetSize, aTitle ) { @@ -57,7 +57,7 @@ GERBVIEW_PRINTOUT::GERBVIEW_PRINTOUT( GBR_LAYOUT* aLayout, const PRINT_PARAMETER bool GERBVIEW_PRINTOUT::OnPrintPage( int aPage ) { // Store the layerset, as it is going to be modified below and the original settings are needed - LSET lset = m_PrintParams.m_PrintMaskLayer; + LSET lset = m_settings.m_layerSet; // The gerber filename of the page to print will be printed to the worksheet. // Find this filename: @@ -70,7 +70,7 @@ bool GERBVIEW_PRINTOUT::OnPrintPage( int aPage ) // because handling negative objects when using only one page is tricky // Enable only one layer to create a printout - m_PrintParams.m_PrintMaskLayer = LSET( layerId ); + m_settings.m_layerSet = LSET( layerId ); GERBER_FILE_IMAGE_LIST& gbrImgList = GERBER_FILE_IMAGE_LIST::GetImagesList(); GERBER_FILE_IMAGE* gbrImage = gbrImgList.GetGbrImage( layerId ); @@ -79,10 +79,10 @@ bool GERBVIEW_PRINTOUT::OnPrintPage( int aPage ) if( gbrImage ) gbr_filename = gbrImage->m_FileName; - DrawPage( gbr_filename, aPage, m_PrintParams.m_PageCount ); + DrawPage( gbr_filename, aPage, m_settings.m_pageCount ); // Restore the original layer set, so the next page can be printed - m_PrintParams.m_PrintMaskLayer = lset; + m_settings.m_layerSet = lset; return true; } @@ -93,13 +93,14 @@ void GERBVIEW_PRINTOUT::setupViewLayers( const std::unique_ptr& aVi { BOARD_PRINTOUT::setupViewLayers( aView, aLayerSet ); - for( LSEQ layerSeq = m_PrintParams.m_PrintMaskLayer.Seq(); layerSeq; ++layerSeq ) + for( LSEQ layerSeq = m_settings.m_layerSet.Seq(); layerSeq; ++layerSeq ) aView->SetLayerVisible( GERBVIEW_LAYER_ID_START + *layerSeq, true ); } void GERBVIEW_PRINTOUT::setupGal( KIGFX::GAL* aGal ) { + BOARD_PRINTOUT::setupGal( aGal ); aGal->SetWorldUnitLength( 10e-9 /* 10 nm */ / 0.0254 /* 1 inch in meters */ ); } diff --git a/gerbview/gerbview_printout.h b/gerbview/gerbview_printout.h index 07a991dfde..aee35d4a26 100644 --- a/gerbview/gerbview_printout.h +++ b/gerbview/gerbview_printout.h @@ -27,7 +27,7 @@ class GBR_LAYOUT; class GERBVIEW_PRINTOUT : public BOARD_PRINTOUT { public: - GERBVIEW_PRINTOUT( GBR_LAYOUT* aLayout, const PRINT_PARAMETERS& aParams, + GERBVIEW_PRINTOUT( GBR_LAYOUT* aLayout, const BOARD_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView, const wxSize& aSheetSize, const wxString& aTitle ); bool OnPrintPage( int aPage ) override; diff --git a/include/board_printout.h b/include/board_printout.h index 89a70eada6..f1714f958b 100644 --- a/include/board_printout.h +++ b/include/board_printout.h @@ -36,6 +36,7 @@ #include #include #include +#include namespace KIGFX { class GAL; @@ -43,59 +44,18 @@ class VIEW; class PAINTER; }; -/** - * Class PRINT_PARAMETERS - * handles the parameters used to print a board drawing. - */ -class PRINT_PARAMETERS +struct BOARD_PRINTOUT_SETTINGS : public PRINTOUT_SETTINGS { -public: - PRINT_PARAMETERS(); + BOARD_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo ); - int m_PenDefaultSize; // The default value pen size to plot/print items - // that have no defined pen size - double m_PrintScale; // general scale when printing - double m_XScaleAdjust; // fine scale adjust for X axis - double m_YScaleAdjust; // fine scale adjust for Y axis - bool m_Print_Sheet_Ref; // Option: print page references - LSET m_PrintMaskLayer; // Layers to print - bool m_PrintMirror; // Option: Print mirrored - bool m_Print_Black_and_White; // Option: Print in B&W or Color - int m_OptionPrintPage; // Option: 0 = a layer per page, 1 = all layers at once - int m_PageCount; // Number of pages to print - bool m_ForceCentered; // Force plot origin to page centre (used in modedit) - int m_Flags; // Can be used to pass some other info - wxPageSetupDialogData* m_PageSetupData; // A wxPageSetupDialogData for page options (margins) + LSET m_layerSet; ///< Layers to print + bool m_mirror; ///< Print mirrored - enum DrillShapeOptT { - NO_DRILL_SHAPE = 0, - SMALL_DRILL_SHAPE = 1, - FULL_DRILL_SHAPE = 2 - }; - - DrillShapeOptT m_DrillShapeOpt; // Options to print pads and via holes - - /** - * Returns true if the drawing border and title block should be printed. - * - * For scale factors greater than one, the border is not printed because it will end up - * scaling off of the page. - */ - bool PrintBorderAndTitleBlock() const { return m_PrintScale <= 1.0 && m_Print_Sheet_Ref; } - - /** - * Returns true if the print should be centered by the board outline instead of the - * paper size. - */ - bool CenterOnBoardOutline() const - { - return !PrintBorderAndTitleBlock() - && ( m_ForceCentered || ( m_PrintScale > 1.0 ) || ( m_PrintScale == 0 ) ); - } + void Load( wxConfigBase* aConfig ) override; + void Save( wxConfigBase* aConfig ) override; }; - /** * Class BOARD_PRINTOUT * is a class derived from wxPrintout to handle the necessary information to control a printer @@ -104,7 +64,7 @@ public: class BOARD_PRINTOUT : public wxPrintout { public: - BOARD_PRINTOUT( const PRINT_PARAMETERS& aParams, const KIGFX::VIEW* aView, + BOARD_PRINTOUT( const BOARD_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView, const wxSize& aSheetSize, const wxString& aTitle ); virtual ~BOARD_PRINTOUT() {} @@ -113,7 +73,7 @@ public: bool HasPage( int aPage ) override { - return aPage <= m_PrintParams.m_PageCount; + return aPage <= m_settings.m_pageCount; } /** @@ -135,7 +95,7 @@ protected: virtual void setupPainter( const std::unique_ptr& aPainter ); ///> Configures GAL object for a printout - virtual void setupGal( KIGFX::GAL* aGal ) {} + virtual void setupGal( KIGFX::GAL* aGal ); ///> Returns bounding box of the printed objects (excluding worksheet frame) virtual EDA_RECT getBoundingBox() = 0; @@ -147,7 +107,7 @@ protected: const KIGFX::VIEW* m_view; ///> Printout parameters - PRINT_PARAMETERS m_PrintParams; + BOARD_PRINTOUT_SETTINGS m_settings; ///> Sheet size expressed in internal units wxSize m_sheetSize; diff --git a/include/printout.h b/include/printout.h new file mode 100644 index 0000000000..7e6072defe --- /dev/null +++ b/include/printout.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2018 CERN + * Author: Maciej Suminski + * + * 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 3 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, see . + */ + +#ifndef PRINTOUT_H +#define PRINTOUT_H + +#include + +class wxConfigBase; + +/** + * Class PRINT_PARAMETERS + * handles the parameters used to print a board drawing. + */ +struct PRINTOUT_SETTINGS +{ + PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo ) + : m_pageInfo( aPageInfo ) + { + // TODO Millimeter2iu is depends on PCBNEW/GERBVIEW #ifdefs, so it cannot be compiled to libcommon + //m_lineWidth = Millimeter2iu( 0.2 ); // A reasonable default value to draw items + // which do not have a specified line width + m_lineWidth = 0.0; + m_scale = 1.0; + m_titleBlock = false; + m_blackWhite = true; + m_pageCount = 0; + } + + virtual void Save( wxConfigBase* aConfig ); + virtual void Load( wxConfigBase* aConfig ); + + int m_lineWidth; ///< The default value pen size to plot/print items + ///< that have no defined pen size + double m_scale; ///< Printing scale + bool m_titleBlock; ///< Print frame and title block + bool m_blackWhite; ///< Print in B&W or Color + int m_pageCount; ///< Number of pages to print + const PAGE_INFO& m_pageInfo; + + /** + * Returns true if the drawing border and title block should be printed. + * + * For scale factors greater than one, the border is not printed because it will end up + * scaling off of the page. + */ + bool PrintBorderAndTitleBlock() const + { + return m_scale <= 1.0 && m_titleBlock; + } +}; + +#endif /* PRINTOUT_H */ diff --git a/include/widgets/unit_binder.h b/include/widgets/unit_binder.h index 9629353c5a..46e7bb80d2 100644 --- a/include/widgets/unit_binder.h +++ b/include/widgets/unit_binder.h @@ -64,7 +64,25 @@ public: * Normally not needed (as the UNIT_BINDER inherits from the parent frame), but can be * used to set to DEGREES for angular controls. */ - virtual void SetUnits( EDA_UNITS_T aUnits, bool aUseMils = false ); + virtual void SetUnits( EDA_UNITS_T aUnits, bool aUseMils = false ); + + /** + * Set the minimal accepted value (in Internal Units). + */ + void SetMin( int aMin ) + { + wxASSERT( aMin < m_max ); + m_min = aMin; + } + + /** + * Set the maximal accepted value (in Internal Units). + */ + void SetMax( int aMax ) + { + wxASSERT( aMax > m_min ); + m_max = aMax; + } /** * Function SetValue diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 3e628e39b1..878e5b2893 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -130,7 +130,6 @@ set( PCBNEW_DIALOGS dialogs/dialog_position_relative.cpp dialogs/dialog_position_relative_base.cpp dialogs/dialog_print_pcbnew.cpp - dialogs/dialog_print_pcbnew_base.cpp dialogs/dialog_select_net_from_list.cpp dialogs/dialog_select_net_from_list_base.cpp dialogs/dialog_set_grid.cpp diff --git a/pcbnew/dialogs/dialog_export_svg.cpp b/pcbnew/dialogs/dialog_export_svg.cpp index 69cfeba7ec..4f70e40f23 100644 --- a/pcbnew/dialogs/dialog_export_svg.cpp +++ b/pcbnew/dialogs/dialog_export_svg.cpp @@ -57,7 +57,7 @@ private: wxString m_outputDirectory; bool m_printMirror; bool m_oneFileOnly; - UNIT_BINDER m_defaultPenWidth; + UNIT_BINDER m_lineWidth; void initDialog(); @@ -91,7 +91,7 @@ private: */ DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG( PCB_BASE_FRAME* aParent, BOARD* aBoard ) : DIALOG_EXPORT_SVG_BASE( aParent ), - m_defaultPenWidth( aParent, m_penWidthLabel, m_penWidthCtrl, m_penWidthUnits, true, + m_lineWidth( aParent, m_penWidthLabel, m_penWidthCtrl, m_penWidthUnits, true, WIDTH_MIN_VALUE, WIDTH_MAX_VALUE) { m_board = aBoard; @@ -115,7 +115,7 @@ DIALOG_EXPORT_SVG::DIALOG_EXPORT_SVG( PCB_BASE_FRAME* aParent, BOARD* aBoard ) : DIALOG_EXPORT_SVG::~DIALOG_EXPORT_SVG() { - g_DrawDefaultLineThickness = m_defaultPenWidth.GetValue(); + g_DrawDefaultLineThickness = m_lineWidth.GetValue(); m_printBW = m_ModeColorOption->GetSelection(); m_oneFileOnly = m_rbFileOpt->GetSelection() == 1; m_outputDirectory = m_outputDirectoryName->GetValue(); @@ -165,7 +165,7 @@ void DIALOG_EXPORT_SVG::initDialog() m_printMirrorOpt->SetValue( m_printMirror ); m_rbFileOpt->SetSelection( m_oneFileOnly ? 1 : 0 ); - m_defaultPenWidth.SetValue( g_DrawDefaultLineThickness ); + m_lineWidth.SetValue( g_DrawDefaultLineThickness ); for( LSEQ seq = m_board->GetEnabledLayers().UIOrder(); seq; ++seq ) { @@ -267,7 +267,7 @@ void DIALOG_EXPORT_SVG::ExportSVGFile( bool aOnlyOneFile ) m_printMirror = m_printMirrorOpt->GetValue(); m_printBW = m_ModeColorOption->GetSelection(); - g_DrawDefaultLineThickness = m_defaultPenWidth.GetValue(); + g_DrawDefaultLineThickness = m_lineWidth.GetValue(); LSET all_selected = getCheckBoxSelectedLayers(); diff --git a/pcbnew/dialogs/dialog_print_pcbnew.cpp b/pcbnew/dialogs/dialog_print_pcbnew.cpp index 4b7712842a..0e524912be 100644 --- a/pcbnew/dialogs/dialog_print_pcbnew.cpp +++ b/pcbnew/dialogs/dialog_print_pcbnew.cpp @@ -31,217 +31,102 @@ #include #include #include -#include #include #include #include -#include -#include -#include #include #include -#include - -#define PEN_WIDTH_MAX_VALUE ( KiROUND( 5 * IU_PER_MM ) ) -#define PEN_WIDTH_MIN_VALUE ( KiROUND( 0.005 * IU_PER_MM ) ) - +#include +#include extern int g_DrawDefaultLineThickness; -// Define min and max reasonable values for print scale -#define MIN_SCALE 0.01 -#define MAX_SCALE 100.0 - -// static print data and page setup data, to remember settings during the session -static wxPrintData* s_PrintData; -static wxPageSetupDialogData* s_pageSetupData = (wxPageSetupDialogData*) NULL; - -static PRINT_PARAMETERS s_Parameters; - - -/** - * Dialog to print schematic. Class derived from DIALOG_PRINT_PCBNEW_BASE - * created by wxFormBuilder - */ -class DIALOG_PRINT_PCBNEW : public DIALOG_PRINT_PCBNEW_BASE +class DIALOG_PRINT_PCBNEW : public DIALOG_PRINT_GENERIC { public: - DIALOG_PRINT_PCBNEW( PCB_BASE_EDIT_FRAME* parent ); - ~DIALOG_PRINT_PCBNEW() override; - - /** - * Set 'print border and title block' to a requested value and hides the - * corresponding checkbox. - */ - void ForcePrintBorder( bool aValue ) - { - m_Print_Sheet_Ref->SetValue( aValue ); - m_Print_Sheet_Ref->Hide(); - } + DIALOG_PRINT_PCBNEW( PCB_BASE_EDIT_FRAME* aParent, PCBNEW_PRINTOUT_SETTINGS* aSettings ); + ~DIALOG_PRINT_PCBNEW() {} private: - PCB_BASE_EDIT_FRAME* m_parent; - wxConfigBase* m_config; - // the list of existing board layers in wxCheckListBox, with the board layers id: - std::pair m_layers[PCB_LAYER_ID_COUNT]; - static bool m_ExcludeEdgeLayer; - wxFloatingPointValidator m_scaleValidator; - - UNIT_BINDER m_defaultPenWidth; + PCBNEW_PRINTOUT_SETTINGS* settings() const + { + wxASSERT( dynamic_cast( m_settings ) ); + return static_cast( m_settings ); + } bool TransferDataToWindow() override; - void OnSelectAllClick( wxCommandEvent& event ) override; - void OnDeselectAllClick( wxCommandEvent& event ) override; - void OnSetCustomScale( wxCommandEvent& event ) override; - void OnPageSetup( wxCommandEvent& event ) override; - void OnPrintPreview( wxCommandEvent& event ) override; - void OnPrintButtonClick( wxCommandEvent& event ) override; + void createExtraOptions(); + void createLeftPanel(); + + void onSelectAllClick( wxCommandEvent& event ); + void onDeselectAllClick( wxCommandEvent& event ); ///> (Un)checks all items in a checklist box - void setListBoxValue( wxCheckListBox* aList, bool aValue ) - { - for( int i = 0; i < aList->GetCount(); ++i ) - aList->Check( i, aValue ); - } + void setListBoxValue( wxCheckListBox* aList, bool aValue ); - void SetPrintParameters(); - int SetLayerSetFromListSelection(); + ///> Check whether a layer is enabled in a listbox + bool isLayerEnabled( unsigned int aLayer ) const; - PCBNEW_PRINTOUT* createPrintout( const wxString& aTitle ) + ///> Enable/disable layer in a listbox + void enableLayer( unsigned int aLayer, bool aValue ); + + ///> Update layerset basing on the selected layers + int setLayerSetFromList(); + + void saveSettings() override; + + wxPrintout* createPrintout( const wxString& aTitle ) override { - return new PCBNEW_PRINTOUT( m_parent->GetBoard(), s_Parameters, + return new PCBNEW_PRINTOUT( m_parent->GetBoard(), *settings(), m_parent->GetGalCanvas()->GetView(), m_parent->GetPageSettings().GetSizeIU(), aTitle ); } - /** - * Select a corresponing scale radio button and update custom scale value if needed. - * @param aValue is the scale value to be selected (0 stands for fit-to-page). - */ - void setScaleValue( double aValue ) const - { - wxASSERT( aValue >= 0.0 ); + PCB_BASE_EDIT_FRAME* m_parent; - if( aValue == 0.0 ) - { - m_scaleFit->SetValue( true ); - } - else if( aValue == 1.0 ) - { - m_scale1->SetValue( true ); - } - else - { - if( aValue > MAX_SCALE ) - { - DisplayInfoMessage( NULL, - _( "Warning: Scale option set to a very large value" ) ); - } + // List of existing board layers in wxCheckListBox, with the board layers id: + std::pair m_layers[PCB_LAYER_ID_COUNT]; - if( aValue < MIN_SCALE ) - { - DisplayInfoMessage( NULL, - _( "Warning: Scale option set to a very small value" ) ); - } - - m_scaleCustom->SetValue( true ); - m_scaleCustomText->SetValue( wxString::Format( wxT( "%f" ), aValue ) ); - } - } - - /** - * Return scale value selected in the dialog. - */ - double getScaleValue() const - { - if( m_scale1->GetValue() ) - return 1.0; - - if( m_scaleFit->GetValue() ) - return 0.0; - - if( m_scaleCustom->GetValue() ) - { - double scale; - - wxCHECK( m_scaleCustomText->GetValue().ToDouble( &scale ), 1.0 ); - return scale; - } - - wxCHECK( false, 1.0 ); - } + // Extra widgets + wxCheckListBox* m_listTechLayers; + wxCheckListBox* m_listCopperLayers; + wxButton* m_buttonSelectAll; + wxButton* m_buttonDeselectAll; + wxCheckBox* m_checkboxNoEdge; + wxCheckBox* m_checkboxMirror; + wxChoice* m_drillMarksChoice; + wxRadioBox* m_boxPagination; }; -bool DIALOG_PRINT_PCBNEW::m_ExcludeEdgeLayer; - - -DIALOG_PRINT_PCBNEW::DIALOG_PRINT_PCBNEW( PCB_BASE_EDIT_FRAME* parent ) : - DIALOG_PRINT_PCBNEW_BASE( parent ), - m_parent( parent ), - m_defaultPenWidth( parent, m_penWidthLabel, m_penWidthCtrl, m_penWidthUnits, true, - PEN_WIDTH_MIN_VALUE, PEN_WIDTH_MAX_VALUE ) +DIALOG_PRINT_PCBNEW::DIALOG_PRINT_PCBNEW( PCB_BASE_EDIT_FRAME* aParent, PCBNEW_PRINTOUT_SETTINGS* aSettings ) : + DIALOG_PRINT_GENERIC( aParent, aSettings ), m_parent( aParent ) { m_config = Kiface().KifaceSettings(); memset( m_layers, 0, sizeof( m_layers ) ); - m_scaleValidator.SetRange( 1e-3, 1e3 ); - m_scaleCustomText->SetValidator( m_scaleValidator ); + // Line width settings range + m_lineWidth.SetMax( KiROUND( 5 * IU_PER_MM ) ); + m_lineWidth.SetMin( KiROUND( 0.005 * IU_PER_MM ) ); - // We use a sdbSizer to get platform-dependent ordering of the action buttons, but - // that requires us to correct the button labels here. - m_sdbSizer1OK->SetLabel( _( "Print" ) ); - m_sdbSizer1Apply->SetLabel( _( "Print Preview" ) ); - m_sdbSizer1Cancel->SetLabel( _( "Close" ) ); - m_sdbSizer1->Layout(); - - m_sdbSizer1OK->SetDefault(); - -#if defined(__WXMAC__) or defined(__WXGTK__) - // Preview does not work well on GTK or Mac, - // but these platforms provide native print preview - m_sdbSizer1Apply->Hide(); -#endif - - FinishDialogSettings(); -} - - -DIALOG_PRINT_PCBNEW::~DIALOG_PRINT_PCBNEW() -{ - SetPrintParameters(); - - if( m_config ) - { - m_config->Write( OPTKEY_PRINT_SCALE, getScaleValue() ); - m_config->Write( OPTKEY_PRINT_PAGE_FRAME, s_Parameters.m_Print_Sheet_Ref); - m_config->Write( OPTKEY_PRINT_MONOCHROME_MODE, s_Parameters.m_Print_Black_and_White); - m_config->Write( OPTKEY_PRINT_PAGE_PER_LAYER, s_Parameters.m_OptionPrintPage ); - m_config->Write( OPTKEY_PRINT_PADS_DRILL, (long) s_Parameters.m_DrillShapeOpt ); - - for( unsigned layer = 0; layer < DIM(m_layers); ++layer ) - { - if( m_layers[layer].first ) - { - wxString key = wxString::Format( OPTKEY_LAYERBASE, layer ); - bool value = m_layers[layer].first->IsChecked( m_layers[layer].second ); - m_config->Write( key, value ); - } - } - } + createExtraOptions(); + createLeftPanel(); } bool DIALOG_PRINT_PCBNEW::TransferDataToWindow() { - wxString msg; - BOARD* board = m_parent->GetBoard(); + if( !DIALOG_PRINT_GENERIC::TransferDataToWindow() ) + return false; - s_Parameters.m_PageSetupData = s_pageSetupData; + if( m_config ) + settings()->Load( m_config ); - // Create layer list. + BOARD* board = m_parent->GetBoard(); + + // Create layer list for( LSEQ seq = board->GetEnabledLayers().UIOrder(); seq; ++seq ) { PCB_LAYER_ID layer = *seq; @@ -249,275 +134,232 @@ bool DIALOG_PRINT_PCBNEW::TransferDataToWindow() if( IsCopperLayer( layer ) ) { - checkIndex = m_CopperLayersList->Append( board->GetLayerName( layer ) ); - m_layers[layer] = std::make_pair( m_CopperLayersList, checkIndex ); + checkIndex = m_listCopperLayers->Append( board->GetLayerName( layer ) ); + m_layers[layer] = std::make_pair( m_listCopperLayers, checkIndex ); } else { - checkIndex = m_TechnicalLayersList->Append( board->GetLayerName( layer ) ); - m_layers[layer] = std::make_pair( m_TechnicalLayersList, checkIndex ); + checkIndex = m_listTechLayers->Append( board->GetLayerName( layer ) ); + m_layers[layer] = std::make_pair( m_listTechLayers, checkIndex ); } - if( m_config ) - { - wxString layerKey; - layerKey.Printf( OPTKEY_LAYERBASE, layer ); - bool option; - - if( m_config->Read( layerKey, &option ) ) - m_layers[layer].first->Check( checkIndex, option ); - } + m_layers[layer].first->Check( checkIndex, settings()->m_layerSet.test( layer ) ); } - // Option for excluding contents of "Edges Pcb" layer - m_Exclude_Edges_Pcb->Show( true ); - - // Read the scale adjust option - double scale = 1.0; - - if( m_config ) - { - m_config->Read( OPTKEY_PRINT_SCALE, &scale ); - m_config->Read( OPTKEY_PRINT_PAGE_FRAME, &s_Parameters.m_Print_Sheet_Ref, 1); - m_config->Read( OPTKEY_PRINT_MONOCHROME_MODE, &s_Parameters.m_Print_Black_and_White, 1); - m_config->Read( OPTKEY_PRINT_PAGE_PER_LAYER, &s_Parameters.m_OptionPrintPage, 0); - int tmp; - m_config->Read( OPTKEY_PRINT_PADS_DRILL, &tmp, PRINT_PARAMETERS::SMALL_DRILL_SHAPE ); - s_Parameters.m_DrillShapeOpt = (PRINT_PARAMETERS::DrillShapeOptT) tmp; - } - - setScaleValue( scale ); - s_Parameters.m_PrintScale = getScaleValue(); - m_Print_Mirror->SetValue(s_Parameters.m_PrintMirror); - m_Exclude_Edges_Pcb->SetValue(m_ExcludeEdgeLayer); - m_Print_Sheet_Ref->SetValue( s_Parameters.m_Print_Sheet_Ref ); + m_checkboxMirror->SetValue( settings()->m_mirror ); + m_checkboxNoEdge->SetValue( settings()->m_noEdgeLayer ); + m_titleBlock->SetValue( settings()->m_titleBlock ); // Options to plot pads and vias holes - m_drillMarksChoice->SetSelection( s_Parameters.m_DrillShapeOpt ); + m_drillMarksChoice->SetSelection( settings()->m_drillMarks ); - m_outputMode->SetSelection( s_Parameters.m_Print_Black_and_White ? 1 : 0 ); + // Print all layers one one page or separately + m_boxPagination->SetSelection( settings()->m_pagination ); - m_PagesOption->SetSelection( s_Parameters.m_OptionPrintPage ); - s_Parameters.m_PenDefaultSize = g_DrawDefaultLineThickness; - m_defaultPenWidth.SetValue( s_Parameters.m_PenDefaultSize ); + // Default line width + settings()->m_lineWidth = g_DrawDefaultLineThickness; + m_lineWidth.SetValue( settings()->m_lineWidth ); - // Update the layout when layers are added + // Update the dialog layout when layers are added GetSizer()->Fit( this ); return true; } -int DIALOG_PRINT_PCBNEW::SetLayerSetFromListSelection() +void DIALOG_PRINT_PCBNEW::createExtraOptions() { - int page_count = 0; + wxGridBagSizer* optionsSizer = getOptionsSizer(); + wxStaticBox* box = getOptionsBox(); + int rows = optionsSizer->GetEffectiveRowsCount(); + int cols = optionsSizer->GetEffectiveColsCount(); - s_Parameters.m_PrintMaskLayer = LSET(); + // Drill marks option + auto drillMarksLabel = new wxStaticText( box, wxID_ANY, _( "Drill marks:" ) ); + std::vector drillMarkChoices = + { _( "No drill mark" ), _( "Small mark" ), _( "Real drill" ) }; + m_drillMarksChoice = new wxChoice( box, wxID_ANY, wxDefaultPosition, + wxDefaultSize, drillMarkChoices.size(), drillMarkChoices.data(), 0 ); + m_drillMarksChoice->SetSelection( 0 ); - for( unsigned layer = 0; layer < DIM(m_layers); ++layer ) + // Print mirrored + m_checkboxMirror = new wxCheckBox( box, wxID_ANY, _( "Print mirrored" ) ); + + // Pagination + std::vector pagesOption = { _( "One page per layer" ), _( "All layers on single page" ) }; + m_boxPagination = new wxRadioBox( box, wxID_ANY, _( "Pagination" ), wxDefaultPosition, + wxDefaultSize, pagesOption.size(), pagesOption.data(), 1, wxRA_SPECIFY_COLS ); + m_boxPagination->SetSelection( 0 ); + + // Sizer layout + optionsSizer->Add( drillMarksLabel, wxGBPosition( rows, 0 ), wxGBSpan( 1, 1 ), + wxBOTTOM | wxRIGHT | wxLEFT | wxALIGN_CENTER_VERTICAL, 5 ); + optionsSizer->Add( m_drillMarksChoice, wxGBPosition( rows, 1 ), wxGBSpan( 1, cols - 1 ), + wxBOTTOM | wxRIGHT | wxLEFT, 5 ); + optionsSizer->Add( m_checkboxMirror, wxGBPosition( rows + 1, 0 ), wxGBSpan( 1, cols ), + wxBOTTOM | wxRIGHT | wxLEFT, 5 ); + optionsSizer->Add( m_boxPagination, wxGBPosition( rows + 2, 0 ), wxGBSpan( 1, cols ), wxALL | wxEXPAND, 5 ); +} + + +void DIALOG_PRINT_PCBNEW::createLeftPanel() +{ + wxStaticBoxSizer* sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, + wxID_ANY, _( "Included Layers" ) ), wxVERTICAL ); + + // Copper layer list + auto copperLabel = new wxStaticText( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Copper layers:" ) ); + m_listCopperLayers = new wxCheckListBox( sbLayersSizer->GetStaticBox(), wxID_ANY ); + + wxBoxSizer* sizerLeft = new wxBoxSizer( wxVERTICAL ); + sizerLeft->Add( copperLabel, 0, wxRIGHT | wxLEFT, 5 ); + sizerLeft->Add( m_listCopperLayers, 1, wxEXPAND | wxBOTTOM | wxRIGHT | wxLEFT, 5 ); + + + // Technical layer list + auto technicalLabel = new wxStaticText( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Technical layers:" ) ); + m_listTechLayers = new wxCheckListBox( sbLayersSizer->GetStaticBox(), wxID_ANY ); + + wxBoxSizer* sizerRight = new wxBoxSizer( wxVERTICAL ); + sizerRight->Add( technicalLabel, 0, wxRIGHT | wxLEFT, 5 ); + sizerRight->Add( m_listTechLayers, 1, wxEXPAND | wxBOTTOM | wxRIGHT | wxLEFT, 5 ); + + + // Layer list layout + wxBoxSizer* bLayerListsSizer = new wxBoxSizer( wxHORIZONTAL ); + bLayerListsSizer->Add( sizerLeft, 1, wxEXPAND, 5 ); + bLayerListsSizer->Add( sizerRight, 1, wxEXPAND, 5 ); + + + // Select/Unselect all buttons + m_buttonSelectAll = new wxButton( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Select all" ) ); + m_buttonDeselectAll = new wxButton( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Deselect all" ) ); + + m_buttonSelectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler( DIALOG_PRINT_PCBNEW::onSelectAllClick ), NULL, this ); + m_buttonDeselectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEventHandler( DIALOG_PRINT_PCBNEW::onDeselectAllClick ), NULL, this ); + + wxBoxSizer* buttonSizer = new wxBoxSizer( wxHORIZONTAL ); + buttonSizer->Add( m_buttonSelectAll, 1, wxALL, 5 ); + buttonSizer->Add( m_buttonDeselectAll, 1, wxALL, 5 ); + + + // Exclude Edge.Pcb layer checkbox + m_checkboxNoEdge = new wxCheckBox( sbLayersSizer->GetStaticBox(), wxID_ANY, _( "Exclude PCB edge layer" ) ); + m_checkboxNoEdge->SetToolTip( _("Exclude contents of Edges_Pcb layer from all other layers") ); + + // Static box sizer layout + sbLayersSizer->Add( bLayerListsSizer, 1, wxALL | wxEXPAND, 5 ); + sbLayersSizer->Add( buttonSizer, 0, wxALL | wxEXPAND, 5 ); + sbLayersSizer->Add( m_checkboxNoEdge, 0, wxALL | wxEXPAND, 5 ); + + getMainSizer()->Insert( 0, sbLayersSizer, 1, wxEXPAND ); +} + + +void DIALOG_PRINT_PCBNEW::onSelectAllClick( wxCommandEvent& event ) +{ + setListBoxValue( m_listCopperLayers, true ); + setListBoxValue( m_listTechLayers, true ); +} + + +void DIALOG_PRINT_PCBNEW::onDeselectAllClick( wxCommandEvent& event ) +{ + setListBoxValue( m_listCopperLayers, false ); + setListBoxValue( m_listTechLayers, false ); +} + + +void DIALOG_PRINT_PCBNEW::setListBoxValue( wxCheckListBox* aList, bool aValue ) +{ + for( unsigned int i = 0; i < aList->GetCount(); ++i ) + aList->Check( i, aValue ); +} + + +bool DIALOG_PRINT_PCBNEW::isLayerEnabled( unsigned int aLayer ) const +{ + wxCHECK( aLayer < DIM( m_layers ), false ); + const auto& layerInfo = m_layers[aLayer]; + + if( layerInfo.first ) + return layerInfo.first->IsChecked( layerInfo.second ); + + return false; +} + + +void DIALOG_PRINT_PCBNEW::enableLayer( unsigned int aLayer, bool aValue ) +{ + wxCHECK( aLayer < DIM( m_layers ), /* void */ ); + const auto& layerInfo = m_layers[aLayer]; + layerInfo.first->Check( layerInfo.second, aValue ); +} + + +int DIALOG_PRINT_PCBNEW::setLayerSetFromList() +{ + settings()->m_layerSet = LSET(); + int& pageCount = settings()->m_pageCount; + pageCount = 0; + + for( unsigned int layer = 0; layer < DIM( m_layers ); ++layer ) { - if( m_layers[layer].first && m_layers[layer].first->IsChecked( m_layers[layer].second ) ) + if( isLayerEnabled( layer ) ) { - page_count++; - s_Parameters.m_PrintMaskLayer.set( layer ); + ++pageCount; + settings()->m_layerSet.set( layer ); } } // In Pcbnew force the EDGE layer to be printed or not with the other layers - m_ExcludeEdgeLayer = m_Exclude_Edges_Pcb->IsChecked(); - s_Parameters.m_Flags = m_ExcludeEdgeLayer ? 0 : 1; + settings()->m_noEdgeLayer = m_checkboxNoEdge->IsChecked(); - if( m_PagesOption->GetSelection() != 0 ) - page_count = 1; + // All layers on one page (only if there is at least one layer selected) + if( m_boxPagination->GetSelection() != 0 && pageCount > 0 ) + pageCount = 1; - s_Parameters.m_PageCount = page_count; - - return page_count; + return pageCount; } -void DIALOG_PRINT_PCBNEW::SetPrintParameters() +void DIALOG_PRINT_PCBNEW::saveSettings() { - PCB_PLOT_PARAMS plot_opts = m_parent->GetPlotSettings(); + setLayerSetFromList(); - s_Parameters.m_PrintMirror = m_Print_Mirror->GetValue(); - s_Parameters.m_Print_Sheet_Ref = m_Print_Sheet_Ref->GetValue(); - s_Parameters.m_Print_Black_and_White = m_outputMode->GetSelection() != 0; + settings()->m_drillMarks = + (PCBNEW_PRINTOUT_SETTINGS::DRILL_MARK_SHAPE_T) m_drillMarksChoice->GetSelection(); - s_Parameters.m_DrillShapeOpt = - (PRINT_PARAMETERS::DrillShapeOptT) m_drillMarksChoice->GetSelection(); + settings()->m_pagination = m_boxPagination->GetSelection() == 0 + ? PCBNEW_PRINTOUT_SETTINGS::LAYER_PER_PAGE : PCBNEW_PRINTOUT_SETTINGS::ALL_LAYERS; - s_Parameters.m_OptionPrintPage = m_PagesOption->GetSelection() != 0; + settings()->m_mirror = m_checkboxMirror->GetValue(); - SetLayerSetFromListSelection(); - - s_Parameters.m_PrintScale = getScaleValue(); - plot_opts.SetScale( s_Parameters.m_PrintScale ); - - m_parent->SetPlotSettings( plot_opts ); - - s_Parameters.m_PenDefaultSize = m_defaultPenWidth.GetValue(); - g_DrawDefaultLineThickness = s_Parameters.m_PenDefaultSize; -} - - -void DIALOG_PRINT_PCBNEW::OnSelectAllClick( wxCommandEvent& event ) -{ - setListBoxValue( m_CopperLayersList, true ); - setListBoxValue( m_TechnicalLayersList, true ); -} - - -void DIALOG_PRINT_PCBNEW::OnDeselectAllClick( wxCommandEvent& event ) -{ - setListBoxValue( m_CopperLayersList, false ); - setListBoxValue( m_TechnicalLayersList, false ); -} - - -void DIALOG_PRINT_PCBNEW::OnSetCustomScale( wxCommandEvent& event ) -{ - // Select 'custom scale' radio button when user types in a value in the - // custom scale text box - m_scaleCustom->SetValue( true ); -} - - -void DIALOG_PRINT_PCBNEW::OnPageSetup( wxCommandEvent& event ) -{ - wxPageSetupDialog pageSetupDialog( this, s_pageSetupData ); - pageSetupDialog.ShowModal(); - - (*s_PrintData) = pageSetupDialog.GetPageSetupDialogData().GetPrintData(); - (*s_pageSetupData) = pageSetupDialog.GetPageSetupDialogData(); -} - - -void DIALOG_PRINT_PCBNEW::OnPrintPreview( wxCommandEvent& event ) -{ - SetPrintParameters(); - - // If no layer selected, we have no plot. prompt user if it happens - // because he could think there is a bug in Pcbnew: - if( s_Parameters.m_PrintMaskLayer == 0 ) - { - DisplayError( this, _( "No layer selected" ) ); - return; - } - - // Pass two printout objects: for preview, and possible printing. - wxString title = _( "Print Preview" ); - wxPrintPreview* preview = - new wxPrintPreview( createPrintout( title ), createPrintout( title ), s_PrintData ); - - preview->SetZoom( 100 ); - - wxPreviewFrame* frame = new wxPreviewFrame( preview, this, title, m_parent->GetPosition(), - m_parent->GetSize() ); - frame->SetMinSize( wxSize( 550, 350 ) ); - frame->Center(); - - // 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_PCBNEW::OnPrintButtonClick( wxCommandEvent& event ) -{ - SetPrintParameters(); - - // If no layer selected, we have no plot. prompt user if it happens - // because he could think there is a bug in Pcbnew: - if( s_Parameters.m_PrintMaskLayer == 0 ) - { - DisplayError( this, _( "No layer selected" ) ); - return; - } - - wxPrintDialogData printDialogData( *s_PrintData ); - printDialogData.SetMaxPage( s_Parameters.m_PageCount ); - - wxPrinter printer( &printDialogData ); - auto printout = std::unique_ptr( createPrintout( _( "Print" ) ) ); - - // Disable 'Print' button to prevent issuing another print - // command before the previous one is finished (causes problems on Windows) - ENABLER printBtnDisable( *m_sdbSizer1OK, false ); - - if( !printer.Print( this, printout.get(), true ) ) - { - if( wxPrinter::GetLastError() == wxPRINTER_ERROR ) - DisplayError( this, _( "There was a problem printing." ) ); - } - else - { - *s_PrintData = printer.GetPrintDialogData().GetPrintData(); - } -} - - -void PCB_BASE_EDIT_FRAME::preparePrintout() -{ - // Selection affects the original item visibility - GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); - - 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() ); - - if( pageInfo.IsCustom() ) - { - if( pageInfo.IsPortrait() ) - s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ), - Mils2mm( pageInfo.GetHeightMils() ) ) ); - else - s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ), - Mils2mm( pageInfo.GetWidthMils() ) ) ); - } - - *s_PrintData = s_pageSetupData->GetPrintData(); + DIALOG_PRINT_GENERIC::saveSettings(); + g_DrawDefaultLineThickness = settings()->m_lineWidth; } void PCB_EDIT_FRAME::ToPrinter( wxCommandEvent& event ) { - preparePrintout(); - DIALOG_PRINT_PCBNEW dlg( this ); + // Selection affects the original item visibility + GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); + + PCBNEW_PRINTOUT_SETTINGS settings( GetPageSettings() ); + DIALOG_PRINT_PCBNEW dlg( this, &settings ); dlg.ShowModal(); } void FOOTPRINT_EDIT_FRAME::ToPrinter( wxCommandEvent& event ) { - preparePrintout(); - DIALOG_PRINT_PCBNEW dlg( this ); + // Selection affects the original item visibility + GetToolManager()->RunAction( PCB_ACTIONS::selectionClear, true ); + + PCBNEW_PRINTOUT_SETTINGS settings( GetPageSettings() ); + DIALOG_PRINT_PCBNEW dlg( this, &settings ); dlg.ForcePrintBorder( false ); dlg.ShowModal(); } diff --git a/pcbnew/dialogs/dialog_print_pcbnew_base.cpp b/pcbnew/dialogs/dialog_print_pcbnew_base.cpp deleted file mode 100644 index 385c4ffc4e..0000000000 --- a/pcbnew/dialogs/dialog_print_pcbnew_base.cpp +++ /dev/null @@ -1,228 +0,0 @@ -/////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Oct 17 2016) -// http://www.wxformbuilder.org/ -// -// PLEASE DO "NOT" EDIT THIS FILE! -/////////////////////////////////////////////////////////////////////////// - -#include "dialog_print_pcbnew_base.h" - -/////////////////////////////////////////////////////////////////////////// - -DIALOG_PRINT_PCBNEW_BASE::DIALOG_PRINT_PCBNEW_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style ) -{ - this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); - - wxBoxSizer* bMainSizer; - bMainSizer = new wxBoxSizer( wxVERTICAL ); - - wxBoxSizer* bUpperSizer; - bUpperSizer = new wxBoxSizer( wxHORIZONTAL ); - - wxStaticBoxSizer* sbLayersSizer; - sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Included Layers") ), wxVERTICAL ); - - wxBoxSizer* bLayerListsSizer; - bLayerListsSizer = new wxBoxSizer( wxHORIZONTAL ); - - wxBoxSizer* bSizer6; - bSizer6 = new wxBoxSizer( wxVERTICAL ); - - m_staticText4 = new wxStaticText( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Copper layers:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText4->Wrap( -1 ); - bSizer6->Add( m_staticText4, 0, wxRIGHT|wxLEFT, 5 ); - - wxArrayString m_CopperLayersListChoices; - m_CopperLayersList = new wxCheckListBox( sbLayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_CopperLayersListChoices, 0 ); - bSizer6->Add( m_CopperLayersList, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bLayerListsSizer->Add( bSizer6, 1, wxEXPAND, 5 ); - - wxBoxSizer* bSizer7; - bSizer7 = new wxBoxSizer( wxVERTICAL ); - - m_staticText5 = new wxStaticText( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Technical layers:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_staticText5->Wrap( -1 ); - bSizer7->Add( m_staticText5, 0, wxRIGHT|wxLEFT, 5 ); - - wxArrayString m_TechnicalLayersListChoices; - m_TechnicalLayersList = new wxCheckListBox( sbLayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TechnicalLayersListChoices, 0 ); - bSizer7->Add( m_TechnicalLayersList, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - bLayerListsSizer->Add( bSizer7, 1, wxEXPAND, 5 ); - - - sbLayersSizer->Add( bLayerListsSizer, 1, wxALL|wxEXPAND, 5 ); - - wxBoxSizer* bSizer9; - bSizer9 = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonSelectAll = new wxButton( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Select all"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer9->Add( m_buttonSelectAll, 1, wxALL, 5 ); - - m_buttonDeselectAll = new wxButton( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Deselect all"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer9->Add( m_buttonDeselectAll, 1, wxALL, 5 ); - - - sbLayersSizer->Add( bSizer9, 0, wxEXPAND, 5 ); - - m_Exclude_Edges_Pcb = new wxCheckBox( sbLayersSizer->GetStaticBox(), wxID_ANY, _("Exclude PCB edge layer"), wxDefaultPosition, wxDefaultSize, 0 ); - m_Exclude_Edges_Pcb->SetToolTip( _("Exclude contents of Edges_Pcb layer from all other layers") ); - - sbLayersSizer->Add( m_Exclude_Edges_Pcb, 0, wxALL|wxEXPAND, 5 ); - - - bUpperSizer->Add( sbLayersSizer, 1, wxALL|wxEXPAND, 5 ); - - wxBoxSizer* bOptionsSizer; - bOptionsSizer = new wxBoxSizer( wxVERTICAL ); - - wxStaticBoxSizer* sbOptionsSizer; - sbOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options") ), wxVERTICAL ); - - wxGridBagSizer* gbSizer1; - gbSizer1 = new wxGridBagSizer( 2, 0 ); - gbSizer1->SetFlexibleDirection( wxBOTH ); - gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - - m_penWidthLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Default line width:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_penWidthLabel->Wrap( -1 ); - m_penWidthLabel->SetToolTip( _("Pen size used to draw items that have no pen size specified.\nUsed mainly to draw items in sketch mode.") ); - - gbSizer1->Add( m_penWidthLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 5 ); - - m_penWidthCtrl = new wxTextCtrl( sbOptionsSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - gbSizer1->Add( m_penWidthCtrl, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_penWidthUnits = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 ); - m_penWidthUnits->Wrap( -1 ); - gbSizer1->Add( m_penWidthUnits, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); - - m_drillMarksLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Drill marks:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_drillMarksLabel->Wrap( -1 ); - gbSizer1->Add( m_drillMarksLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); - - wxString m_drillMarksChoiceChoices[] = { _("No drill mark"), _("Small mark"), _("Real drill") }; - int m_drillMarksChoiceNChoices = sizeof( m_drillMarksChoiceChoices ) / sizeof( wxString ); - m_drillMarksChoice = new wxChoice( sbOptionsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_drillMarksChoiceNChoices, m_drillMarksChoiceChoices, 0 ); - m_drillMarksChoice->SetSelection( 0 ); - gbSizer1->Add( m_drillMarksChoice, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_outputModeLabel = new wxStaticText( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Output mode:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_outputModeLabel->Wrap( -1 ); - gbSizer1->Add( m_outputModeLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT|wxRIGHT, 5 ); - - wxString m_outputModeChoices[] = { _("Color"), _("Black and white") }; - int m_outputModeNChoices = sizeof( m_outputModeChoices ) / sizeof( wxString ); - m_outputMode = new wxChoice( sbOptionsSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_outputModeNChoices, m_outputModeChoices, 0 ); - m_outputMode->SetSelection( 0 ); - gbSizer1->Add( m_outputMode, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - m_Print_Sheet_Ref = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_FRAME_SEL, _("Print border and title block"), wxDefaultPosition, wxDefaultSize, 0 ); - m_Print_Sheet_Ref->SetValue(true); - m_Print_Sheet_Ref->SetToolTip( _("Print Frame references.") ); - - gbSizer1->Add( m_Print_Sheet_Ref, wxGBPosition( 3, 0 ), wxGBSpan( 1, 3 ), wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - m_Print_Mirror = new wxCheckBox( sbOptionsSizer->GetStaticBox(), wxID_ANY, _("Print mirrored"), wxDefaultPosition, wxDefaultSize, 0 ); - gbSizer1->Add( m_Print_Mirror, wxGBPosition( 4, 0 ), wxGBSpan( 1, 3 ), wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - - - gbSizer1->AddGrowableCol( 1 ); - - sbOptionsSizer->Add( gbSizer1, 1, wxEXPAND, 5 ); - - - bOptionsSizer->Add( sbOptionsSizer, 1, wxEXPAND|wxALL, 5 ); - - wxString m_PagesOptionChoices[] = { _("One page per layer"), _("All layers on single page") }; - int m_PagesOptionNChoices = sizeof( m_PagesOptionChoices ) / sizeof( wxString ); - m_PagesOption = new wxRadioBox( this, wxID_PAGE_MODE, _("Pagination"), wxDefaultPosition, wxDefaultSize, m_PagesOptionNChoices, m_PagesOptionChoices, 1, wxRA_SPECIFY_COLS ); - m_PagesOption->SetSelection( 0 ); - bOptionsSizer->Add( m_PagesOption, 0, wxALL|wxEXPAND|wxLEFT|wxRIGHT, 5 ); - - wxStaticBoxSizer* bScaleSizer; - bScaleSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Scale") ), wxVERTICAL ); - - m_scale1 = new wxRadioButton( bScaleSizer->GetStaticBox(), wxID_ANY, _("1:1"), wxDefaultPosition, wxDefaultSize, 0 ); - bScaleSizer->Add( m_scale1, 0, 0, 5 ); - - m_scaleFit = new wxRadioButton( bScaleSizer->GetStaticBox(), wxID_ANY, _("Fit to page"), wxDefaultPosition, wxDefaultSize, 0 ); - bScaleSizer->Add( m_scaleFit, 0, wxTOP, 5 ); - - wxBoxSizer* bSizer10; - bSizer10 = new wxBoxSizer( wxHORIZONTAL ); - - m_scaleCustom = new wxRadioButton( bScaleSizer->GetStaticBox(), wxID_ANY, _("Custom:"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer10->Add( m_scaleCustom, 0, wxTOP, 5 ); - - m_scaleCustomText = new wxTextCtrl( bScaleSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_scaleCustomText->SetToolTip( _("Set X scale adjust for exact scale plotting") ); - - bSizer10->Add( m_scaleCustomText, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); - - - bScaleSizer->Add( bSizer10, 1, wxEXPAND, 5 ); - - - bOptionsSizer->Add( bScaleSizer, 0, wxALL|wxEXPAND, 5 ); - - - bUpperSizer->Add( bOptionsSizer, 0, wxEXPAND, 5 ); - - - bMainSizer->Add( bUpperSizer, 1, wxEXPAND|wxALL, 5 ); - - m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); - bMainSizer->Add( m_staticline1, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 ); - - wxBoxSizer* bButtonsSizer; - bButtonsSizer = new wxBoxSizer( wxHORIZONTAL ); - - m_buttonOption = new wxButton( this, wxID_PRINT_OPTIONS, _("Page Setup..."), wxDefaultPosition, wxDefaultSize, 0 ); - m_buttonOption->SetMinSize( wxSize( 120,-1 ) ); - - bButtonsSizer->Add( m_buttonOption, 0, wxALL|wxEXPAND, 5 ); - - m_sdbSizer1 = new wxStdDialogButtonSizer(); - m_sdbSizer1OK = new wxButton( this, wxID_OK ); - m_sdbSizer1->AddButton( m_sdbSizer1OK ); - m_sdbSizer1Apply = new wxButton( this, wxID_APPLY ); - m_sdbSizer1->AddButton( m_sdbSizer1Apply ); - m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); - m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); - m_sdbSizer1->Realize(); - - bButtonsSizer->Add( m_sdbSizer1, 1, wxALL|wxEXPAND, 5 ); - - - bMainSizer->Add( bButtonsSizer, 0, wxEXPAND|wxLEFT, 10 ); - - - this->SetSizer( bMainSizer ); - this->Layout(); - - this->Centre( wxBOTH ); - - // Connect Events - m_buttonSelectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnSelectAllClick ), NULL, this ); - m_buttonDeselectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnDeselectAllClick ), NULL, this ); - m_scaleCustomText->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnSetCustomScale ), NULL, this ); - m_buttonOption->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnPageSetup ), NULL, this ); - m_sdbSizer1Apply->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnPrintPreview ), NULL, this ); - m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnPrintButtonClick ), NULL, this ); -} - -DIALOG_PRINT_PCBNEW_BASE::~DIALOG_PRINT_PCBNEW_BASE() -{ - // Disconnect Events - m_buttonSelectAll->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnSelectAllClick ), NULL, this ); - m_buttonDeselectAll->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnDeselectAllClick ), NULL, this ); - m_scaleCustomText->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnSetCustomScale ), NULL, this ); - m_buttonOption->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnPageSetup ), NULL, this ); - m_sdbSizer1Apply->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnPrintPreview ), NULL, this ); - m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_PCBNEW_BASE::OnPrintButtonClick ), NULL, this ); - -} diff --git a/pcbnew/pcb_base_edit_frame.h b/pcbnew/pcb_base_edit_frame.h index bb0a2724b7..b3de5c28ce 100644 --- a/pcbnew/pcb_base_edit_frame.h +++ b/pcbnew/pcb_base_edit_frame.h @@ -211,11 +211,6 @@ protected: virtual void duplicateItems( bool aIncrement ) = 0; void unitsChangeRefresh() override; - - /** - * Set up printing system. - */ - virtual void preparePrintout(); }; #endif diff --git a/pcbnew/pcbnew_printout.cpp b/pcbnew/pcbnew_printout.cpp index 53aea3084b..8eaa5b6f8d 100644 --- a/pcbnew/pcbnew_printout.cpp +++ b/pcbnew/pcbnew_printout.cpp @@ -30,10 +30,36 @@ #include #include +#include -PCBNEW_PRINTOUT::PCBNEW_PRINTOUT( BOARD* aBoard, const PRINT_PARAMETERS& aParams, +PCBNEW_PRINTOUT_SETTINGS::PCBNEW_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo ) + : BOARD_PRINTOUT_SETTINGS( aPageInfo ) +{ + m_drillMarks = SMALL_DRILL_SHAPE; + m_pagination = ALL_LAYERS; + m_noEdgeLayer = false; +} + + +void PCBNEW_PRINTOUT_SETTINGS::Load( wxConfigBase* aConfig ) +{ + BOARD_PRINTOUT_SETTINGS::Load( aConfig ); + aConfig->Read( OPTKEY_PRINT_PADS_DRILL, (int*) &m_drillMarks, FULL_DRILL_SHAPE ); + aConfig->Read( OPTKEY_PRINT_PAGE_PER_LAYER, (int*) &m_pagination, ALL_LAYERS ); +} + + +void PCBNEW_PRINTOUT_SETTINGS::Save( wxConfigBase* aConfig ) +{ + BOARD_PRINTOUT_SETTINGS::Save( aConfig ); + aConfig->Write( OPTKEY_PRINT_PADS_DRILL, (int) m_drillMarks ); + aConfig->Write( OPTKEY_PRINT_PAGE_PER_LAYER, (int) m_pagination ); +} + + +PCBNEW_PRINTOUT::PCBNEW_PRINTOUT( BOARD* aBoard, const PCBNEW_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView, const wxSize& aSheetSize, const wxString& aTitle ) : - BOARD_PRINTOUT( aParams, aView, aSheetSize, aTitle ) + BOARD_PRINTOUT( aParams, aView, aSheetSize, aTitle ), m_pcbnewSettings( aParams ) { m_board = aBoard; } @@ -42,13 +68,13 @@ PCBNEW_PRINTOUT::PCBNEW_PRINTOUT( BOARD* aBoard, const PRINT_PARAMETERS& aParams bool PCBNEW_PRINTOUT::OnPrintPage( int aPage ) { // Store the layerset, as it is going to be modified below and the original settings are needed - LSET lset = m_PrintParams.m_PrintMaskLayer; + LSET lset = m_settings.m_layerSet; int pageCount = lset.count(); wxString layer; PCB_LAYER_ID extractLayer; // compute layer mask from page number if we want one page per layer - if( m_PrintParams.m_OptionPrintPage == 0 ) // One page per layer + if( m_pcbnewSettings.m_pagination == 0 ) // One page per layer { // This sequence is TBD, call a different // sequencer if needed, such as Seq(). Could not find documentation on @@ -57,13 +83,13 @@ bool PCBNEW_PRINTOUT::OnPrintPage( int aPage ) // aPage starts at 1, not 0 if( unsigned( aPage - 1 ) < seq.size() ) - m_PrintParams.m_PrintMaskLayer = LSET( seq[aPage - 1] ); + m_settings.m_layerSet = LSET( seq[aPage - 1] ); } - if( !m_PrintParams.m_PrintMaskLayer.any() ) + if( !m_settings.m_layerSet.any() ) return false; - extractLayer = m_PrintParams.m_PrintMaskLayer.ExtractLayer(); + extractLayer = m_settings.m_layerSet.ExtractLayer(); if( extractLayer == UNDEFINED_LAYER ) layer = _( "Multiple Layers" ); @@ -71,13 +97,13 @@ bool PCBNEW_PRINTOUT::OnPrintPage( int aPage ) layer = LSET::Name( extractLayer ); // In Pcbnew we can want the layer EDGE always printed - if( m_PrintParams.m_Flags == 1 ) - m_PrintParams.m_PrintMaskLayer.set( Edge_Cuts ); + if( !m_pcbnewSettings.m_noEdgeLayer ) + m_settings.m_layerSet.set( Edge_Cuts ); DrawPage( layer, aPage, pageCount ); // Restore the original layer set, so the next page can be printed - m_PrintParams.m_PrintMaskLayer = lset; + m_settings.m_layerSet = lset; return true; } @@ -88,7 +114,7 @@ void PCBNEW_PRINTOUT::setupViewLayers( const std::unique_ptr& aView { BOARD_PRINTOUT::setupViewLayers( aView, aLayerSet ); - for( LSEQ layerSeq = m_PrintParams.m_PrintMaskLayer.Seq(); layerSeq; ++layerSeq ) + for( LSEQ layerSeq = m_settings.m_layerSet.Seq(); layerSeq; ++layerSeq ) aView->SetLayerVisible( PCBNEW_LAYER_ID_START + *layerSeq, true ); // Enable pad layers corresponding to the selected copper layers @@ -107,7 +133,7 @@ void PCBNEW_PRINTOUT::setupViewLayers( const std::unique_ptr& aView aView->SetLayerVisible( item, true ); } - if( m_PrintParams.m_DrillShapeOpt != PRINT_PARAMETERS::NO_DRILL_SHAPE ) + if( m_pcbnewSettings.m_drillMarks != PCBNEW_PRINTOUT_SETTINGS::NO_DRILL_SHAPE ) { // Enable hole layers to draw drill marks for( auto holeLayer : { LAYER_PADS_PLATEDHOLES, @@ -138,17 +164,17 @@ void PCBNEW_PRINTOUT::setupPainter( const std::unique_ptr& aPain auto painter = static_cast( aPainter.get() ); - switch( m_PrintParams.m_DrillShapeOpt ) + switch( m_pcbnewSettings.m_drillMarks ) { - case PRINT_PARAMETERS::NO_DRILL_SHAPE: + case PCBNEW_PRINTOUT_SETTINGS::NO_DRILL_SHAPE: painter->SetDrillMarks( false, 0 ); break; - case PRINT_PARAMETERS::SMALL_DRILL_SHAPE: + case PCBNEW_PRINTOUT_SETTINGS::SMALL_DRILL_SHAPE: painter->SetDrillMarks( false, Millimeter2iu( 0.3 ) ); break; - case PRINT_PARAMETERS::FULL_DRILL_SHAPE: + case PCBNEW_PRINTOUT_SETTINGS::FULL_DRILL_SHAPE: painter->SetDrillMarks( true ); break; } @@ -161,6 +187,7 @@ void PCBNEW_PRINTOUT::setupPainter( const std::unique_ptr& aPain void PCBNEW_PRINTOUT::setupGal( KIGFX::GAL* aGal ) { + BOARD_PRINTOUT::setupGal( aGal ); aGal->SetWorldUnitLength( 1e-9 /* 1 nm */ / 0.0254 /* 1 inch in meters */ ); } diff --git a/pcbnew/pcbnew_printout.h b/pcbnew/pcbnew_printout.h index 3a3f050be5..f7bc563bf6 100644 --- a/pcbnew/pcbnew_printout.h +++ b/pcbnew/pcbnew_printout.h @@ -25,10 +25,32 @@ class BOARD; +struct PCBNEW_PRINTOUT_SETTINGS : BOARD_PRINTOUT_SETTINGS +{ + PCBNEW_PRINTOUT_SETTINGS( const PAGE_INFO& aPageInfo ); + + enum DRILL_MARK_SHAPE_T { + NO_DRILL_SHAPE, + SMALL_DRILL_SHAPE, + FULL_DRILL_SHAPE + } m_drillMarks; ///< Drill marks shape + + enum PAGINATION_T { + LAYER_PER_PAGE, + ALL_LAYERS + } m_pagination; ///< Pagination + + bool m_noEdgeLayer; ///< Disable board outline on each page + + void Load( wxConfigBase* aConfig ) override; + void Save( wxConfigBase* aConfig ) override; +}; + + class PCBNEW_PRINTOUT : public BOARD_PRINTOUT { public: - PCBNEW_PRINTOUT( BOARD* aBoard, const PRINT_PARAMETERS& aParams, + PCBNEW_PRINTOUT( BOARD* aBoard, const PCBNEW_PRINTOUT_SETTINGS& aParams, const KIGFX::VIEW* aView, const wxSize& aSheetSize, const wxString& aTitle ); bool OnPrintPage( int aPage ) override; @@ -46,6 +68,8 @@ protected: private: BOARD* m_board; + + PCBNEW_PRINTOUT_SETTINGS m_pcbnewSettings; }; diff --git a/pcbnew/pcbplot.h b/pcbnew/pcbplot.h index 8f796ea09e..08f1d5e5c7 100644 --- a/pcbnew/pcbplot.h +++ b/pcbnew/pcbplot.h @@ -36,6 +36,7 @@ class PLOTTER; class TEXTE_PCB; +class D_PAD; class DRAWSEGMENT; class DIMENSION; class MODULE; @@ -50,10 +51,7 @@ class REPORTER; /// \ingroup config #define OPTKEY_LAYERBASE wxT( "PlotLayer_%d" ) -#define OPTKEY_PRINT_X_FINESCALE_ADJ wxT( "PrintXFineScaleAdj" ) -#define OPTKEY_PRINT_Y_FINESCALE_ADJ wxT( "PrintYFineScaleAdj" ) #define OPTKEY_PRINT_SCALE wxT( "PrintScale" ) -#define OPTKEY_PRINT_MODULE_SCALE wxT( "PrintModuleScale" ) #define OPTKEY_PRINT_PAGE_FRAME wxT( "PrintPageFrame" ) #define OPTKEY_PRINT_MONOCHROME_MODE wxT( "PrintMonochrome" ) #define OPTKEY_PRINT_PAGE_PER_LAYER wxT( "PrintSinglePage" )