From 5c4c584b93958f6b0bb02f0bcb010dd2824de89b Mon Sep 17 00:00:00 2001 From: charras Date: Sat, 17 Jan 2009 17:32:20 +0000 Subject: [PATCH] Cleaning code in print dialogs. --- CHANGELOG.txt | 8 + eeschema/CMakeLists.txt | 5 +- eeschema/dialog_SVG_print_base.cpp | 2 +- eeschema/dialog_print_using_printer.cpp | 477 +++++ eeschema/dialog_print_using_printer_base.cpp | 98 + eeschema/dialog_print_using_printer_base.fbp | 591 ++++++ eeschema/dialog_print_using_printer_base.h | 71 + eeschema/makefile.include | 3 +- gerbview/CMakeLists.txt | 3 +- gerbview/gerberframe.cpp | 7 +- gerbview/gerbview_config.cpp | 2 - gerbview/gerbview_config.h | 2 - gerbview/makefile.include | 10 +- internat/fr/kicad.mo | Bin 172009 -> 173069 bytes internat/fr/kicad.po | 211 ++- pcbnew/CMakeLists.txt | 5 +- pcbnew/dialog_SVG_print.cpp | 3 +- pcbnew/dialog_SVG_print_base.cpp | 2 +- pcbnew/dialog_SVG_print_base.fbp | 2 +- .../dialog_print_using_printer.cpp | 417 ++-- pcbnew/dialog_print_using_printer_base.cpp | 156 ++ pcbnew/dialog_print_using_printer_base.fbp | 1025 ++++++++++ pcbnew/dialog_print_using_printer_base.h | 81 + pcbnew/makefile.include | 6 +- .../zones_convert_brd_items_to_polygons.cpp | 18 +- share/dialog_print.cpp | 352 ---- share/dialog_print.h | 165 -- share/dialog_print.pjd | 1681 ----------------- 28 files changed, 2833 insertions(+), 2570 deletions(-) create mode 100644 eeschema/dialog_print_using_printer.cpp create mode 100644 eeschema/dialog_print_using_printer_base.cpp create mode 100644 eeschema/dialog_print_using_printer_base.fbp create mode 100644 eeschema/dialog_print_using_printer_base.h rename share/wxprint.cpp => pcbnew/dialog_print_using_printer.cpp (67%) create mode 100644 pcbnew/dialog_print_using_printer_base.cpp create mode 100644 pcbnew/dialog_print_using_printer_base.fbp create mode 100644 pcbnew/dialog_print_using_printer_base.h delete mode 100644 share/dialog_print.cpp delete mode 100644 share/dialog_print.h delete mode 100644 share/dialog_print.pjd diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 98dc956174..d25fc7e16f 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -5,6 +5,14 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2009-Jan-17 UPDATE Jean-Pierre Charras +================================================================================ +++All: + Cleaned code in print dialogs. + They are now specific to eeschema and pcbnew. + Gerbview uses pcbnew dialog. + The code is now a lot more easy to understand. + 2009-Jan-15 UPDATE Jean-Pierre Charras ================================================================================ diff --git a/eeschema/CMakeLists.txt b/eeschema/CMakeLists.txt index 6bee1013be..6bbb945114 100644 --- a/eeschema/CMakeLists.txt +++ b/eeschema/CMakeLists.txt @@ -50,6 +50,8 @@ set(EESCHEMA_SRCS dialog_erc.cpp # dialog_find.cpp dialog_options.cpp + dialog_print_using_printer_base.cpp + dialog_print_using_printer.cpp dialog_SVG_print.cpp dialog_SVG_print_base.cpp edit_component_in_lib.cpp @@ -110,8 +112,7 @@ set(EESCHEMA_SRCS viewlibs.cpp) set(EESCHEMA_EXTRA_SRCS - ../share/setpage.cpp - ../share/wxprint.cpp) + ../share/setpage.cpp) if(WIN32) if(MINGW) diff --git a/eeschema/dialog_SVG_print_base.cpp b/eeschema/dialog_SVG_print_base.cpp index 6b74b1a95c..296aa7bd04 100644 --- a/eeschema/dialog_SVG_print_base.cpp +++ b/eeschema/dialog_SVG_print_base.cpp @@ -50,7 +50,7 @@ DIALOG_SVG_PRINT_base::DIALOG_SVG_PRINT_base( wxWindow* parent, wxWindowID id, c wxBoxSizer* bButtonsSizer; bButtonsSizer = new wxBoxSizer( wxVERTICAL ); - m_buttonPlotCurrent = new wxButton( this, wxID_PRINT_CURRENT, _("PrintCurrent"), wxDefaultPosition, wxDefaultSize, 0 ); + m_buttonPlotCurrent = new wxButton( this, wxID_PRINT_CURRENT, _("Print Current"), wxDefaultPosition, wxDefaultSize, 0 ); bButtonsSizer->Add( m_buttonPlotCurrent, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_buttonPlotAll = new wxButton( this, wxID_PRINT_ALL, _("Print All"), wxDefaultPosition, wxDefaultSize, 0 ); diff --git a/eeschema/dialog_print_using_printer.cpp b/eeschema/dialog_print_using_printer.cpp new file mode 100644 index 0000000000..8886e3ac38 --- /dev/null +++ b/eeschema/dialog_print_using_printer.cpp @@ -0,0 +1,477 @@ +/****************************************/ +/* File: dialog_print_using_printer.cpp */ +/****************************************/ + +// Set this to 1 if you want to test PostScript printing under MSW. +#define wxTEST_POSTSCRIPT_IN_MSW 1 +#include "fctsys.h" + +#include "common.h" + +#include "program.h" +#include "general.h" + +#include "dialog_print_using_printer_base.h" + + +#define DEFAULT_ORIENTATION_PAPER wxLANDSCAPE // other option is wxPORTRAIT +#define WIDTH_MAX_VALUE 100 +#define WIDTH_MIN_VALUE 1 + +#define PRINTMODECOLOR_KEY wxT("PrintModeColor") + +// static print data and page setup data, to remember settings during the session +static wxPrintData* g_PrintData; + +// Variables locales +static int s_OptionPrintPage = 0; +static int s_Print_Black_and_White = true; +static bool s_Print_Frame_Ref = true; + + +/* 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: + WinEDA_DrawFrame* m_Parent; + wxConfig* m_Config; + +public: + DIALOG_PRINT_USING_PRINTER( WinEDA_DrawFrame* parent ); + ~DIALOG_PRINT_USING_PRINTER() {}; + +private: + void OnCloseWindow( wxCloseEvent& event ); + void OnInitDialog( wxInitDialogEvent& event ); + void OnPrintSetup( wxCommandEvent& event ); + void OnPrintPreview( wxCommandEvent& event ); + void OnPrintButtonClick( wxCommandEvent& event ); + void OnButtonCancelClick( wxCommandEvent& event ){ Close(); } + void SetPenWidth(); +}; + +/***************************/ +/* Gestion de l'impression */ +/***************************/ + +class EDA_Printout : public wxPrintout +{ +public: + bool m_Print_Sheet_Ref; + +public: + WinEDA_DrawFrame* m_Parent; + DIALOG_PRINT_USING_PRINTER* m_PrintFrame; + + EDA_Printout( DIALOG_PRINT_USING_PRINTER* aPrint_frame, + WinEDA_DrawFrame* aParent, + const wxString& aTitle, + bool aPrint_ref ) : + wxPrintout( aTitle ) + { + m_PrintFrame = aPrint_frame; + m_Parent = aParent; + m_Print_Sheet_Ref = aPrint_ref; + } + + + bool OnPrintPage( int page ); + bool HasPage( int page ); + bool OnBeginDocument( int startPage, int endPage ); + void GetPageInfo( int* minPage, int* maxPage, int* selPageFrom, int* selPageTo ); + + void DrawPage(); +}; + +/*******************************************************/ +void WinEDA_DrawFrame::ToPrinter( wxCommandEvent& event ) +/*******************************************************/ + +/* Virtual function + * Calls the print dialog for Eeschema + */ +{ + if( g_PrintData == NULL ) // First call. creates print handlers + { + g_PrintData = new wxPrintData(); + + if( !g_PrintData->Ok() ) + { + DisplayError( this, _( "Error Init Printer info" ) ); + } + g_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGHT; + g_PrintData->SetOrientation( DEFAULT_ORIENTATION_PAPER ); + } + + DIALOG_PRINT_USING_PRINTER* frame = new DIALOG_PRINT_USING_PRINTER( this ); + + frame->ShowModal(); frame->Destroy(); +} + + +/*************************************************************************************/ +DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER( WinEDA_DrawFrame* parent ) : + DIALOG_PRINT_USING_PRINTER_base( parent ) +/*************************************************************************************/ +{ + m_Parent = parent; + m_Config = wxGetApp().m_EDA_Config; +} + + +/************************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnInitDialog( wxInitDialogEvent& event ) +/************************************************************************/ +{ + SetFont(*g_DialogFont); + SetFocus(); + + if( m_Config ) + { + m_Config->Read( OPTKEY_PLOT_LINEWIDTH_VALUE, &g_PlotLine_Width ); + m_Config->Read( PRINTMODECOLOR_KEY, &s_Print_Black_and_White ); + } + + AddUnitSymbol(* m_TextPenWidth, g_UnitMetric ); + m_DialogPenWidth->SetValue( + ReturnStringFromValue(g_UnitMetric, g_PlotLine_Width, m_Parent->m_InternalUnits ) ); + m_Print_Sheet_Ref->SetValue( s_Print_Frame_Ref ); + + m_ModeColorOption->SetSelection( s_Print_Black_and_White ? 1 : 0); + m_Print_Sheet_Ref->SetValue(s_Print_Frame_Ref); + + if (GetSizer()) + { + GetSizer()->SetSizeHints(this); + } +} + + +/*********************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnCloseWindow( wxCloseEvent& event ) +/*********************************************************************/ +{ + s_Print_Black_and_White = m_ModeColorOption->GetSelection(); + s_Print_Frame_Ref = m_Print_Sheet_Ref->GetValue(); + SetPenWidth(); + + if( m_Config ) + { + m_Config->Write( OPTKEY_PLOT_LINEWIDTH_VALUE, g_PlotLine_Width ); + m_Config->Write( PRINTMODECOLOR_KEY, s_Print_Black_and_White ); + } + + EndModal( 0 ); +} + + +/****************************************/ +void DIALOG_PRINT_USING_PRINTER::SetPenWidth() +/****************************************/ + +/* Get the new pen width value, and verify min et max value + * NOTE: g_PlotLine_Width is in internal units + */ +{ + g_PlotLine_Width = ReturnValueFromTextCtrl( *m_DialogPenWidth, m_Parent->m_InternalUnits ); + + if( g_PlotLine_Width > WIDTH_MAX_VALUE ) + { + g_PlotLine_Width = WIDTH_MAX_VALUE; + } + + if( g_PlotLine_Width < WIDTH_MIN_VALUE ) + { + g_PlotLine_Width = WIDTH_MIN_VALUE; + } + + m_DialogPenWidth->SetValue( + ReturnStringFromValue(g_UnitMetric, g_PlotLine_Width, m_Parent->m_InternalUnits ) ); +} + + +/**********************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnPrintSetup( wxCommandEvent& event ) +/**********************************************************/ + +/* Open a dialog box for printer setup (printer options, page size ...) + */ +{ + wxPrintDialogData printDialogData( *g_PrintData ); + + if( printDialogData.Ok() ) + { + wxPrintDialog printerDialog( this, &printDialogData ); + + printerDialog.ShowModal(); + + *g_PrintData = printerDialog.GetPrintDialogData().GetPrintData(); + } + else + DisplayError( this, _( "Printer Problem!" ) ); +} + + +/***********************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event ) +/***********************************************************************/ + +/* Open and display a previewer frame for printing + */ +{ + wxSize WSize; + wxPoint WPos; + bool print_ref = m_Print_Sheet_Ref->GetValue(); + + s_Print_Black_and_White = m_ModeColorOption->GetSelection(); + SetPenWidth(); + + s_OptionPrintPage = m_PagesOption->GetSelection(); + + // Pass two printout objects: for preview, and possible printing. + wxString title = _("Preview"); + wxPrintPreview* preview = + new wxPrintPreview( new EDA_Printout( this, m_Parent, title, print_ref ), + new EDA_Printout( this, m_Parent, title, print_ref ), g_PrintData ); + + if( preview == NULL ) + { + DisplayError( this, wxT( "OnPrintPreview() problem" ) ); + return; + } + + WPos = m_Parent->GetPosition( ); + WSize = m_Parent->GetSize(); + + wxPreviewFrame* frame = new wxPreviewFrame( preview, this, + title, WPos, WSize ); + + frame->Initialize(); + frame->Show( true ); +} + + +/**************************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event ) +/**************************************************************************/ +{ + bool print_ref = m_Print_Sheet_Ref->GetValue(); + + s_Print_Black_and_White = m_ModeColorOption->GetSelection(); + + s_OptionPrintPage = 0; + if( m_PagesOption ) + s_OptionPrintPage = m_PagesOption->GetSelection(); + + SetPenWidth(); + + wxPrintDialogData printDialogData( *g_PrintData ); + + wxPrinter printer( &printDialogData ); + + wxString title = _("Preview"); + EDA_Printout printout( this, m_Parent, title, print_ref ); + +#ifndef __WINDOWS__ + wxDC* dc = printout.GetDC(); + ( (wxPostScriptDC*) dc )->SetResolution( 600 ); // Postscript DC resolution is 600 ppi +#endif + + if( !printer.Print( this, &printout, true ) ) + { + if( wxPrinter::GetLastError() == wxPRINTER_ERROR ) + DisplayError( this, _( "There was a problem printing" ) ); + return; + } + else + { + *g_PrintData = printer.GetPrintDialogData().GetPrintData(); + } +} + + +/***************************************/ +bool EDA_Printout::OnPrintPage( int page ) +/***************************************/ +{ + wxString msg; + + msg.Printf( _( "Print page %d" ), page ); + m_Parent->Affiche_Message( msg ); + + WinEDA_SchematicFrame* schframe = (WinEDA_SchematicFrame*) m_Parent; + SCH_SCREEN* screen = schframe->GetScreen(); + SCH_SCREEN* oldscreen = screen; + DrawSheetPath* oldsheetpath = schframe->GetSheet(); + + + DrawSheetPath list; + if( s_OptionPrintPage == 1 ) + { + /* Print all pages, so when called, the page is not the current page. + * We must select it and setup references and others parameters + * because in complex hierarchies a SCH_SCREEN (a schematic drawings) + * is shared between many sheets + */ + EDA_SheetList SheetList( NULL ); + DrawSheetPath* sheetpath = SheetList.GetSheet( page - 1 ); + if( list.BuildSheetPathInfoFromSheetPathValue( sheetpath->Path() ) ) + { + schframe->m_CurrentSheet = &list; + schframe->m_CurrentSheet->UpdateAllScreenReferences(); + schframe->SetSheetNumberAndCount(); + screen = schframe->m_CurrentSheet->LastScreen(); + } + else + screen = NULL; + } + + if( screen == NULL ) + return false; + ActiveScreen = screen; + DrawPage(); + ActiveScreen = oldscreen; + schframe->m_CurrentSheet = oldsheetpath; + schframe->m_CurrentSheet->UpdateAllScreenReferences(); + schframe->SetSheetNumberAndCount(); + + return true; +} + + +/*********************************************************/ +void EDA_Printout::GetPageInfo( int* minPage, int* maxPage, + int* selPageFrom, int* selPageTo ) +/*********************************************************/ +{ + int ii = 1; + + *minPage = 1; + *selPageFrom = 1; + + if( s_OptionPrintPage == 1 ) + { + ii = g_RootSheet->CountSheets(); + } + + *maxPage = ii; + *selPageTo = ii; +} + + +/**************************************/ +bool EDA_Printout::HasPage( int pageNum ) +/**************************************/ +{ + int pageCount; + + pageCount = g_RootSheet->CountSheets(); + if( pageCount >= pageNum ) + return true; + + return false; +} + + +/*************************************************************/ +bool EDA_Printout::OnBeginDocument( int startPage, int endPage ) +/*************************************************************/ +{ + if( !wxPrintout::OnBeginDocument( startPage, endPage ) ) + return false; + + return true; +} + + +/********************************/ +void EDA_Printout::DrawPage() +/********************************/ + +/* + * This is the real print function: print the active screen + */ +{ + int tmpzoom; + wxPoint tmp_startvisu; + wxSize PageSize_in_mm; + wxSize SheetSize; // Page size in internal units + wxSize PlotAreaSize; // plot area size in pixels + double scaleX, scaleY, scale; + wxPoint old_org; + wxPoint DrawOffset; // Offset de trace + int DrawZoom = 1; + wxDC* dc = GetDC(); + + wxBusyCursor dummy; + + GetPageSizeMM( &PageSize_in_mm.x, &PageSize_in_mm.y ); + + /* Save old draw scale and draw offset */ + tmp_startvisu = ActiveScreen->m_StartVisu; + tmpzoom = ActiveScreen->GetZoom(); + old_org = ActiveScreen->m_DrawOrg; + /* Change draw scale and offset to draw the whole page */ + ActiveScreen->SetZoom( DrawZoom ); + ActiveScreen->m_DrawOrg.x = ActiveScreen->m_DrawOrg.y = 0; + ActiveScreen->m_StartVisu.x = ActiveScreen->m_StartVisu.y = 0; + + SheetSize = ActiveScreen->m_CurrentSheetDesc->m_Size; // size in 1/1000 inch + SheetSize.x *= m_Parent->m_InternalUnits / 1000; + SheetSize.y *= m_Parent->m_InternalUnits / 1000; // size in pixels + + // Get the size of the DC in pixels + dc->GetSize( &PlotAreaSize.x, &PlotAreaSize.y ); + + // Calculate a suitable scaling factor + scaleX = (double) SheetSize.x / PlotAreaSize.x; + scaleY = (double) SheetSize.y / PlotAreaSize.y; + scale = wxMax( scaleX, scaleY ); // Use x or y scaling factor, whichever fits on the DC + + // ajust the real draw scale + dc->SetUserScale( DrawZoom / scale, DrawZoom / scale ); + + ActiveScreen->m_DrawOrg = DrawOffset; + + GRResetPenAndBrush( dc ); + if( s_Print_Black_and_White ) + GRForceBlackPen( true ); + + + /* set Pen min width */ + double ftmp, xdcscale, ydcscale; + + // g_PlotLine_Width is in internal units ( 1/1000 inch), and must be converted in pixels + ftmp = (float) g_PlotLine_Width * 25.4 / EESCHEMA_INTERNAL_UNIT; // ftmp est en mm + ftmp *= (float) PlotAreaSize.x / PageSize_in_mm.x; /* ftmp is in pixels */ + + /* because the pen size will be scaled by the dc scale, we modify the size + * in order to keep the requested value */ + dc->GetUserScale( &xdcscale, &ydcscale ); + ftmp /= xdcscale; + SetPenMinWidth( (int) round( ftmp ) ); + + WinEDA_DrawPanel* panel = m_Parent->DrawPanel; + EDA_Rect tmp = panel->m_ClipBox; + + panel->m_ClipBox.SetOrigin( wxPoint( 0, 0 ) ); + panel->m_ClipBox.SetSize( wxSize( 0x7FFFFF0, 0x7FFFFF0 ) ); + + g_IsPrinting = true; + int bg_color = g_DrawBgColor; + + panel->PrintPage( dc, m_Print_Sheet_Ref, 0xFFFFFFFF, false ); + + g_DrawBgColor = bg_color; + g_IsPrinting = false; + panel->m_ClipBox = tmp; + + SetPenMinWidth( 1 ); + GRForceBlackPen( false ); + + ActiveScreen->m_StartVisu = tmp_startvisu; + ActiveScreen->m_DrawOrg = old_org; + ActiveScreen->SetZoom( tmpzoom ); +} diff --git a/eeschema/dialog_print_using_printer_base.cpp b/eeschema/dialog_print_using_printer_base.cpp new file mode 100644 index 0000000000..94907e0bfd --- /dev/null +++ b/eeschema/dialog_print_using_printer_base.cpp @@ -0,0 +1,98 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// 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 ) : wxDialog( parent, id, title, pos, size, style ) +{ + this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize ); + + wxBoxSizer* bMainSizer; + bMainSizer = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* bleftSizer; + bleftSizer = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbOptionsSizer; + sbOptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Options:") ), wxVERTICAL ); + + m_TextPenWidth = new wxStaticText( this, wxID_ANY, _("Pen Width Mini"), wxDefaultPosition, wxDefaultSize, 0 ); + m_TextPenWidth->Wrap( -1 ); + sbOptionsSizer->Add( m_TextPenWidth, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_DialogPenWidth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_DialogPenWidth->SetToolTip( _("Selection of the minimum pen thickness used to draw items.") ); + m_DialogPenWidth->SetMinSize( wxSize( 200,-1 ) ); + + sbOptionsSizer->Add( m_DialogPenWidth, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_Print_Sheet_Ref = new wxCheckBox( this, wxID_FRAME_SEL, _("Print frame ref"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Print_Sheet_Ref->SetValue(true); + + m_Print_Sheet_Ref->SetToolTip( _("Print (or not) the Frame references.") ); + + sbOptionsSizer->Add( m_Print_Sheet_Ref, 0, wxALL, 5 ); + + bleftSizer->Add( sbOptionsSizer, 1, 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( 1 ); + m_ModeColorOption->SetToolTip( _("Choose if you wand to draw the sheet like it appears on screen,\nor in black and white mode, better to print it when using black and white printers") ); + + bleftSizer->Add( m_ModeColorOption, 0, wxALL|wxEXPAND, 5 ); + + wxString m_PagesOptionChoices[] = { _("Current"), _("All") }; + int m_PagesOptionNChoices = sizeof( m_PagesOptionChoices ) / sizeof( wxString ); + m_PagesOption = new wxRadioBox( this, wxID_PAGE_MODE, _("Page Print"), wxDefaultPosition, wxDefaultSize, m_PagesOptionNChoices, m_PagesOptionChoices, 1, wxRA_SPECIFY_COLS ); + m_PagesOption->SetSelection( 0 ); + bleftSizer->Add( m_PagesOption, 0, wxALL|wxEXPAND, 5 ); + + bMainSizer->Add( bleftSizer, 1, wxEXPAND, 5 ); + + wxBoxSizer* bbuttonsSizer; + bbuttonsSizer = new wxBoxSizer( wxVERTICAL ); + + m_buttonOption = new wxButton( this, wxID_PRINT_OPTIONS, _("Page Options"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonOption, 0, wxALL, 5 ); + + m_buttonPreview = new wxButton( this, wxID_PREVIEW, _("Preview"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonPreview, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonPrint = new wxButton( this, wxID_PRINT_ALL, _("Print"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonPrint, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonQuit, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + bMainSizer->Add( bbuttonsSizer, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + this->SetSizer( bMainSizer ); + this->Layout(); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnCloseWindow ) ); + this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnInitDialog ) ); + m_buttonOption->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnPrintSetup ), 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::OnButtonCancelClick ), 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 ) ); + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnInitDialog ) ); + m_buttonOption->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnPrintSetup ), 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::OnButtonCancelClick ), NULL, this ); +} diff --git a/eeschema/dialog_print_using_printer_base.fbp b/eeschema/dialog_print_using_printer_base.fbp new file mode 100644 index 0000000000..d275e041c1 --- /dev/null +++ b/eeschema/dialog_print_using_printer_base.fbp @@ -0,0 +1,591 @@ + + + + + + C++ + 1 + UTF-8 + connect + dialog_print_using_printer_base + 1000 + none + 1 + DialogSVGPrint_base + + . + + 1 + 1 + 0 + + + + + 1 + + + + 0 + wxID_ANY + + -1,-1 + DIALOG_PRINT_USING_PRINTER_base + + 336,268 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + + Print + + + + + + + + OnCloseWindow + + + + + + OnInitDialog + + + + + + + + + + + + + + + + + + + + + + + bMainSizer + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + bleftSizer + wxVERTICAL + none + + 5 + wxEXPAND|wxALL + 1 + + wxID_ANY + Options: + + sbOptionsSizer + wxVERTICAL + none + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Pen Width Mini + + + m_TextPenWidth + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_ANY + + 0 + 200,-1 + m_DialogPenWidth + protected + + + + + Selection of the minimum pen thickness used to draw items. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 1 + + 1 + + + 0 + wxID_FRAME_SEL + Print frame ref + + + m_Print_Sheet_Ref + protected + + + + + Print (or not) the Frame references. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Color" "Black and white" + + 1 + + + 0 + wxID_PRINT_MODE + Print Mode + 1 + + + m_ModeColorOption + protected + + 1 + + wxRA_SPECIFY_COLS + + Choose if you wand to draw the sheet like it appears on screen, or in black and white mode, better to print it when using black and white printers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Current" "All" + + 1 + + + 0 + wxID_PAGE_MODE + Page Print + 1 + + + m_PagesOption + protected + + 0 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bbuttonsSizer + wxVERTICAL + none + + 5 + wxALL + 0 + + + + 0 + 1 + + + 0 + wxID_PRINT_OPTIONS + Page Options + + + m_buttonOption + protected + + + + + + + + + OnPrintSetup + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_PREVIEW + Preview + + + m_buttonPreview + protected + + + + + + + + + OnPrintPreview + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_PRINT_ALL + Print + + + m_buttonPrint + protected + + + + + + + + + OnPrintButtonClick + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_CANCEL + Close + + + m_buttonQuit + protected + + + + + + + + + OnButtonCancelClick + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/eeschema/dialog_print_using_printer_base.h b/eeschema/dialog_print_using_printer_base.h new file mode 100644 index 0000000000..5c0267ffd5 --- /dev/null +++ b/eeschema/dialog_print_using_printer_base.h @@ -0,0 +1,71 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __dialog_print_using_printer_base__ +#define __dialog_print_using_printer_base__ + +#include + +#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 wxDialog +{ + private: + + protected: + enum + { + wxID_FRAME_SEL = 1000, + wxID_PRINT_MODE, + wxID_PAGE_MODE, + wxID_PRINT_OPTIONS, + wxID_PRINT_ALL, + }; + + wxStaticText* m_TextPenWidth; + wxTextCtrl* m_DialogPenWidth; + wxCheckBox* m_Print_Sheet_Ref; + wxRadioBox* m_ModeColorOption; + wxRadioBox* m_PagesOption; + 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 OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); } + virtual void OnPrintSetup( wxCommandEvent& event ){ event.Skip(); } + virtual void OnPrintPreview( wxCommandEvent& event ){ event.Skip(); } + virtual void OnPrintButtonClick( wxCommandEvent& event ){ event.Skip(); } + virtual void OnButtonCancelClick( 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( 336,268 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_PRINT_USING_PRINTER_base(); + +}; + +#endif //__dialog_print_using_printer_base__ diff --git a/eeschema/makefile.include b/eeschema/makefile.include index 1818cf00f5..02b54c24c3 100644 --- a/eeschema/makefile.include +++ b/eeschema/makefile.include @@ -41,7 +41,8 @@ OBJECTS = eeschema.o\ tool_viewlib.o\ schframe.o\ viewlib_frame.o\ - wxprint.o\ + dialog_print_using_printer_base.o\ + dialog_print_using_printer.o\ lib_export.o \ busentry.o \ bus-wire-junction.o \ diff --git a/gerbview/CMakeLists.txt b/gerbview/CMakeLists.txt index e8f29a2db4..9cb317897a 100644 --- a/gerbview/CMakeLists.txt +++ b/gerbview/CMakeLists.txt @@ -53,7 +53,8 @@ set(GERBVIEW_EXTRA_SRCS ../pcbnew/undelete.cpp ../share/setpage.cpp - ../share/wxprint.cpp) + ../pcbnew/dialog_print_using_printer_base.cpp + ../pcbnew/dialog_print_using_printer.cpp) if(WIN32) if(MINGW) diff --git a/gerbview/gerberframe.cpp b/gerbview/gerberframe.cpp index 219cf91fa2..1738d685ad 100644 --- a/gerbview/gerberframe.cpp +++ b/gerbview/gerberframe.cpp @@ -117,7 +117,6 @@ BEGIN_EVENT_TABLE( WinEDA_GerberFrame, WinEDA_BasePcbFrame ) EVT_TOOL_RANGE( ID_TB_OPTIONS_START, ID_TB_OPTIONS_END, WinEDA_GerberFrame::OnSelectOptionToolbar ) -// PopUp Menu trait�s dans drawpanel.cpp END_EVENT_TABLE() @@ -150,7 +149,8 @@ WinEDA_GerberFrame::WinEDA_GerberFrame( wxWindow* father, SetIcon( wxICON( icon_gerbview ) ); #endif - SetBaseScreen( ActiveScreen = ScreenPcb ); + SetBaseScreen( ScreenPcb ); + ActiveScreen = ScreenPcb; GetSettings(); SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y ); @@ -173,6 +173,7 @@ void WinEDA_GerberFrame::OnCloseWindow( wxCloseEvent& Event ) { PCB_SCREEN* screen = ScreenPcb; +#if 0 // unused currently while( screen ) { if( screen->IsModify() ) @@ -188,7 +189,7 @@ void WinEDA_GerberFrame::OnCloseWindow( wxCloseEvent& Event ) return; } } - +#endif while( screen ) // suppression flag modify pour eviter d'autres message { screen->ClrModify(); diff --git a/gerbview/gerbview_config.cpp b/gerbview/gerbview_config.cpp index 3dddfd7d48..e19ab69ab9 100644 --- a/gerbview/gerbview_config.cpp +++ b/gerbview/gerbview_config.cpp @@ -115,8 +115,6 @@ bool Read_Config() FALSE ); /* Inits autres variables */ - if( ScreenPcb ) - ScreenPcb->SetGrid( TmpGrid ); if( g_PhotoFilenameExt.IsEmpty() ) g_PhotoFilenameExt = wxT( ".pho" ); if( g_DrillFilenameExt.IsEmpty() ) diff --git a/gerbview/gerbview_config.h b/gerbview/gerbview_config.h index e2d4b50a85..660620b7f1 100644 --- a/gerbview/gerbview_config.h +++ b/gerbview/gerbview_config.h @@ -6,8 +6,6 @@ #define INSETUP TRUE -static wxSize TmpGrid; /* memorisation temporaire */ - /* Liste des parametres */ static PARAM_CFG_WXSTRING PhotoExtBufCfg diff --git a/gerbview/makefile.include b/gerbview/makefile.include index ec382ceac2..e347bdb6bf 100644 --- a/gerbview/makefile.include +++ b/gerbview/makefile.include @@ -15,7 +15,8 @@ OBJECTS= \ select_layers_to_pcb.o\ sel_layer.o\ lay2plot.o\ - wxprint.o \ + dialog_print_using_printer_base.o \ + dialog_print_using_printer.o \ edit.o \ setpage.o \ tool_gerber.o \ @@ -82,8 +83,11 @@ class_drc_item.o: ../pcbnew/class_drc_item.cpp sel_layer.o: ../pcbnew/sel_layer.cpp $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp -wxprint.o: ../share/wxprint.cpp ../share/dialog_print.cpp ../share/dialog_print.h - $(CXX) -c $(EDACPPFLAGS) -o $@ ../share/$*.cpp +dialog_print_using_printer_base.o: ../pcbnew/dialog_print_using_printer_base.cpp ../pcbnew/dialog_print_using_printer_base.h + $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp + +dialog_print_using_printer.o: ../pcbnew/dialog_print_using_printer.cpp ../pcbnew/dialog_print_using_printer_base.h + $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp classpcb.o: ../pcbnew/classpcb.cpp $(CXX) -c $(EDACPPFLAGS) -o $@ ../pcbnew/$*.cpp diff --git a/internat/fr/kicad.mo b/internat/fr/kicad.mo index 70f1c2ae56d8dbe4fe8e95c66ad26f557582e2ba..64ca76dd4549a175cc9ad8547b14218912811683 100644 GIT binary patch delta 56846 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 delta 55885 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\n" "MIME-Version: 1.0\n" @@ -4550,6 +4550,8 @@ msgid "" "Choose if you wand to draw the sheet like it appears on screen,\n" "or in black and white mode, better to print it when using black and white printers" msgstr "" +"Choisir si vous voulez tracer la feuille telle qu'elle apparait à l'écran,\n" +"ou en noir et blanc, préférable pour l'imprimer lorsque l'on utilise des imprimantes monochromes" #: pcbnew/dialog_SVG_print_base.cpp:55 msgid "Print Frame Ref" @@ -4588,6 +4590,8 @@ msgid "" "Enter a filename if you do not want to use defaults files names\n" "Can be used only when printing the current sheet" msgstr "" +"Entrez un nom de fichier si vous ne voulez pas utiliser les noms par défaut\n" +"Ne peut être utilisé que pour imprimer la feuille courante" #: pcbnew/dialog_SVG_print_base.cpp:97 msgid "Messages:" @@ -5271,6 +5275,107 @@ msgstr "Une piste ou via a une référence vers un pad \"%s\" manquant" msgid "TextPCB properties" msgstr "Propriétés des textes PCB" +#: pcbnew/dialog_print_using_printer_base.cpp:35 +msgid "Exclude Edges_Pcb Layer" +msgstr "Exclure Couche Contours PCB" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "fit in page" +msgstr "Ajustage en page" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "Scale 0.5" +msgstr "Echelle 0,5" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "Scale 0.7" +msgstr "Echelle 0,7" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "Approx. Scale 1" +msgstr "Echelle Appprox. 1" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "Accurate Scale 1" +msgstr "Echelle Précise 1" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "Scale 1.4" +msgstr "Echelle 1,4" + +#: pcbnew/dialog_print_using_printer_base.cpp:46 +msgid "Scale 4" +msgstr "Echelle 4" + +#: pcbnew/dialog_print_using_printer_base.cpp:48 +msgid "Approx. Scale:" +msgstr "Echelle approx.:" + +#: pcbnew/dialog_print_using_printer_base.cpp:52 +msgid "X Scale Adjust" +msgstr "Ajustage Echelle X" + +#: pcbnew/dialog_print_using_printer_base.cpp:61 +msgid "Y Scale Adjust" +msgstr "Ajustage Echelle Y" + +#: pcbnew/dialog_print_using_printer_base.cpp:78 +msgid "Pen Width Mini" +msgstr "Epaiss Plume Mini" + +#: pcbnew/dialog_print_using_printer_base.cpp:87 +msgid "Print frame ref" +msgstr "Imprimer cartouche" + +#: pcbnew/dialog_print_using_printer_base.cpp:100 +msgid "Black and white" +msgstr "Noir et blanc" + +#: pcbnew/dialog_print_using_printer_base.cpp:102 +msgid "Print Mode" +msgstr "Mode d'impression" + +#: pcbnew/dialog_print_using_printer_base.cpp:108 +msgid "1 Page per Layer" +msgstr "1 Page par couche" + +#: pcbnew/dialog_print_using_printer_base.cpp:108 +msgid "Single page" +msgstr "Page unique" + +#: pcbnew/dialog_print_using_printer_base.cpp:110 +msgid "Page Print" +msgstr "Imprimer Page" + +#: pcbnew/dialog_print_using_printer_base.cpp:119 +msgid "Page Options" +msgstr "Options Pages" + +#: pcbnew/dialog_print_using_printer_base.cpp:122 +msgid "Preview" +msgstr "Previsualisation" + +#: pcbnew/dialog_print_using_printer_base.cpp:125 +msgid "Print" +msgstr "Imprimer" + +#: pcbnew/dialog_print_using_printer.cpp:122 +msgid "Error Init Printer info" +msgstr "Erreur Init info imprimante" + +#: pcbnew/dialog_print_using_printer.cpp:361 +msgid "Printer Problem!" +msgstr "Probleme d'imprimante" + +#: pcbnew/dialog_print_using_printer.cpp:454 +msgid "There was a problem printing" +msgstr "Il y a un problème d'impression" + +#: pcbnew/dialog_print_using_printer.cpp:470 +#, c-format +msgid "Print page %d" +msgstr "Print page %d" + #: eeschema/backanno.cpp:135 msgid "Load Stuff File" msgstr "Charger Fichier d'échange" @@ -5385,6 +5490,7 @@ msgid "Sheet Size" msgstr "Dim. feuille" #: eeschema/plothpgl.cpp:225 +#: eeschema/plotps.cpp:193 msgid "Page Size A4" msgstr "Feuille A4" @@ -5405,6 +5511,7 @@ msgid "Page Size A0" msgstr "Feuille A0" #: eeschema/plothpgl.cpp:230 +#: eeschema/plotps.cpp:194 msgid "Page Size A" msgstr "Feuille A" @@ -5425,6 +5532,7 @@ msgid "Page Size E" msgstr "Feuille E" #: eeschema/plothpgl.cpp:236 +#: eeschema/plotps.cpp:196 msgid "Plot page size:" msgstr "Format de la feuille:" @@ -5453,10 +5561,12 @@ msgid "Plot Offset Y" msgstr "Offset de tracé Y" #: eeschema/plothpgl.cpp:339 +#: eeschema/plotps.cpp:233 msgid "&Plot page" msgstr "&Tracer Page" #: eeschema/plothpgl.cpp:345 +#: eeschema/plotps.cpp:240 msgid "Plot a&ll" msgstr "&Tout tracer" @@ -5524,22 +5634,18 @@ msgid "Length" msgstr "Longueur" #: eeschema/affiche.cpp:102 -#: eeschema/pinedit-dialog.cpp:225 msgid "Up" msgstr "Haut" #: eeschema/affiche.cpp:105 -#: eeschema/pinedit-dialog.cpp:226 msgid "Down" msgstr "Bas" #: eeschema/affiche.cpp:108 -#: eeschema/pinedit-dialog.cpp:224 msgid "Left" msgstr "Gauche" #: eeschema/affiche.cpp:111 -#: eeschema/pinedit-dialog.cpp:223 msgid "Right" msgstr "Droite" @@ -5947,37 +6053,30 @@ msgid "Plot: %s\n" msgstr "Trace: %s\n" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:251 msgid "line" msgstr "Ligne" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:252 msgid "invert" msgstr "invert" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:253 msgid "clock" msgstr "clock" #: eeschema/pinedit.cpp:22 -#: eeschema/pinedit-dialog.cpp:254 msgid "clock inv" msgstr "clock inv" #: eeschema/pinedit.cpp:23 -#: eeschema/pinedit-dialog.cpp:255 msgid "low in" msgstr "low in" #: eeschema/pinedit.cpp:23 -#: eeschema/pinedit-dialog.cpp:256 msgid "low clock" msgstr "low clock" #: eeschema/pinedit.cpp:23 -#: eeschema/pinedit-dialog.cpp:257 msgid "low out" msgstr "low out" @@ -6152,7 +6251,6 @@ msgid "Common to Units" msgstr "Commun aux Unités" #: eeschema/dialog_cmp_graphic_properties.cpp:160 -#: eeschema/pinedit-dialog.cpp:197 msgid "Common to convert" msgstr "Commun a converti" @@ -8429,7 +8527,7 @@ msgid "Datasheet" msgstr "Documentation" #: eeschema/dialog_SVG_print_base.cpp:53 -msgid "PrintCurrent" +msgid "Print Current" msgstr "Imprimer Page Courante" #: eeschema/dialog_SVG_print_base.cpp:56 @@ -8472,6 +8570,10 @@ msgstr "Voir documents des composants" msgid "Insert component in schematic" msgstr "Placer composant en schématique" +#: eeschema/dialog_print_using_printer_base.cpp:52 +msgid "Current" +msgstr "Courant" + #: eeschema/class_drawsheetpath.cpp:180 #, c-format msgid "%8.8lX/" @@ -9131,7 +9233,6 @@ msgid "Create New Directory" msgstr "Créer un nouveau Répertoire" #: kicad/treeprj_frame.cpp:543 -#: kicad/kicad.cpp:381 msgid "noname" msgstr "noname" @@ -9510,6 +9611,7 @@ msgid "%d errors while reading Gerber file [%s]" msgstr "%d erreurs pendant lecture fichier gerber [%s]" #: gerbview/readgerb.cpp:273 +#: gerbview/files.cpp:187 msgid "D codes files:" msgstr "Fichiers D-Codes:" @@ -10200,18 +10302,22 @@ msgid "Back View" msgstr "Vue arrière" #: 3d-viewer/3d_canvas.cpp:374 +#: 3d-viewer/3d_toolbar.cpp:77 msgid "Move left <-" msgstr "Vers la gauche <-" #: 3d-viewer/3d_canvas.cpp:379 +#: 3d-viewer/3d_toolbar.cpp:80 msgid "Move right ->" msgstr "Vers la droite ->" #: 3d-viewer/3d_canvas.cpp:384 +#: 3d-viewer/3d_toolbar.cpp:83 msgid "Move Up ^" msgstr "Vers le haut ^" #: 3d-viewer/3d_canvas.cpp:389 +#: 3d-viewer/3d_toolbar.cpp:86 msgid "Move Down" msgstr "Vers le bas" @@ -10299,58 +10405,10 @@ msgstr "Couche ECO1 On/Off" msgid "Eco2 Layer On/Off" msgstr "Couche ECO2 On/Off" -#: share/dialog_print.cpp:146 -msgid "Exclude Edges_Pcb Layer" -msgstr "Exclure Couche Contours PCB" - -#: share/dialog_print.cpp:157 -msgid "fit in page" -msgstr "Ajustage en page" - -#: share/dialog_print.cpp:158 -msgid "Scale 0.5" -msgstr "Echelle 0,5" - -#: share/dialog_print.cpp:159 -msgid "Scale 0.7" -msgstr "Echelle 0,7" - -#: share/dialog_print.cpp:160 -msgid "Approx. Scale 1" -msgstr "Echelle Appprox. 1" - -#: share/dialog_print.cpp:161 -msgid "Accurate Scale 1" -msgstr "Echelle Précise 1" - -#: share/dialog_print.cpp:162 -msgid "Scale 1.4" -msgstr "Echelle 1,4" - -#: share/dialog_print.cpp:165 -msgid "Scale 4" -msgstr "Echelle 4" - -#: share/dialog_print.cpp:166 -msgid "Approx. Scale:" -msgstr "Echelle approx.:" - -#: share/dialog_print.cpp:170 -msgid "X Scale Adjust" -msgstr "Ajustage Echelle X" - -#: share/dialog_print.cpp:176 -msgid "Y Scale Adjust" -msgstr "Ajustage Echelle Y" - #: share/dialog_print.cpp:205 msgid "Color Print:" msgstr "Impression Couleurs:" -#: share/dialog_print.cpp:210 -msgid "1 Page per Layer" -msgstr "1 Page par couche" - #: share/dialog_print.cpp:211 msgid "Single Page" msgstr "Page unique" @@ -10360,10 +10418,6 @@ msgstr "Page unique" msgid "Page Print:" msgstr "Imprimer page" -#: share/dialog_print.cpp:217 -msgid "Current" -msgstr "Courant" - #: share/dialog_print.cpp:230 msgid "Print S&etup" msgstr "Options Impr&ession" @@ -10476,27 +10530,10 @@ msgstr "Commentaire3:" msgid "Comment4:" msgstr "Commentaire4:" -#: share/wxprint.cpp:127 -msgid "Error Init Printer info" -msgstr "Erreur Init info imprimante" - -#: share/wxprint.cpp:372 -msgid "Printer Problem!" -msgstr "Probleme d'imprimante" - #: share/wxprint.cpp:405 msgid "There was a problem previewing" msgstr "Il y a un problème de prévisualisation" -#: share/wxprint.cpp:469 -msgid "There was a problem printing" -msgstr "Il y a un problème d'impression" - -#: share/wxprint.cpp:485 -#, c-format -msgid "Print page %d" -msgstr "Print page %d" - #: pcbnew/gen_self.h:217 msgid "Length(inch):" msgstr "Longueur (pouces):" @@ -10965,10 +11002,6 @@ msgstr "DCodes id." msgid "Page Settings" msgstr "Ajustage opt Page" -#: share/dialog_print.h:52 -msgid "Print" -msgstr "Imprimer" - #~ msgid "Tracks" #~ msgstr "Pistes" #~ msgid "** Plot End **\n" diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index c73d08d271..66dc68c67f 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -65,6 +65,8 @@ set(PCBNEW_SRCS dialog_non_copper_zones_properties_base.cpp dialog_pad_properties.cpp dialog_pad_properties_base.cpp + dialog_print_using_printer.cpp + dialog_print_using_printer_base.cpp dialog_setup_libs.cpp dialog_orient_footprints.cpp # dialog_track_options.cpp @@ -159,8 +161,7 @@ set(PCBNEW_SRCS ) set(PCBNEW_EXTRA_SRCS - ../share/setpage.cpp - ../share/wxprint.cpp) + ../share/setpage.cpp ) if(WIN32) if(MINGW) diff --git a/pcbnew/dialog_SVG_print.cpp b/pcbnew/dialog_SVG_print.cpp index 78a73e01d0..8f0c89d55c 100644 --- a/pcbnew/dialog_SVG_print.cpp +++ b/pcbnew/dialog_SVG_print.cpp @@ -312,9 +312,10 @@ void DIALOG_SVG_PRINT::OnButtonCancelClick( wxCommandEvent& event ) void DIALOG_SVG_PRINT::OnCloseWindow( wxCloseEvent& event ) /***********************************************************/ { + SetPenWidth(); + s_PlotBlackAndWhite = m_ModeColorOption->GetSelection(); if( m_Config ) { - s_PlotBlackAndWhite = m_ModeColorOption->GetSelection(); m_Config->Write( OPTKEY_PLOT_LINEWIDTH_VALUE, s_PrintPenMinWidth ); m_Config->Write( PLOTSVGMODECOLOR_KEY, s_PlotBlackAndWhite ); wxString layerKey; diff --git a/pcbnew/dialog_SVG_print_base.cpp b/pcbnew/dialog_SVG_print_base.cpp index 8cc6cacce8..a226c6b97d 100644 --- a/pcbnew/dialog_SVG_print_base.cpp +++ b/pcbnew/dialog_SVG_print_base.cpp @@ -75,7 +75,7 @@ DIALOG_SVG_PRINT_base::DIALOG_SVG_PRINT_base( wxWindow* parent, wxWindowID id, c bButtonsSizer->Add( m_buttonPrintSelected, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_buttonBoard = new wxButton( this, wxID_PRINT_BOARD, _("Print Board"), wxDefaultPosition, wxDefaultSize, 0 ); - bButtonsSizer->Add( m_buttonBoard, 0, wxALL, 5 ); + bButtonsSizer->Add( m_buttonBoard, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Quit"), wxDefaultPosition, wxDefaultSize, 0 ); bButtonsSizer->Add( m_buttonQuit, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); diff --git a/pcbnew/dialog_SVG_print_base.fbp b/pcbnew/dialog_SVG_print_base.fbp index a0544295fb..235dce9129 100644 --- a/pcbnew/dialog_SVG_print_base.fbp +++ b/pcbnew/dialog_SVG_print_base.fbp @@ -467,7 +467,7 @@ 5 - wxALL + wxALL|wxALIGN_CENTER_HORIZONTAL 0 diff --git a/share/wxprint.cpp b/pcbnew/dialog_print_using_printer.cpp similarity index 67% rename from share/wxprint.cpp rename to pcbnew/dialog_print_using_printer.cpp index 05c0c28812..f8df20f8fb 100644 --- a/share/wxprint.cpp +++ b/pcbnew/dialog_print_using_printer.cpp @@ -1,58 +1,35 @@ -/*********************/ -/* File: wxprint.cpp */ -/*********************/ +/****************************************/ +/* File: dialog_print_using_printer.cpp */ +/****************************************/ // Set this to 1 if you want to test PostScript printing under MSW. #define wxTEST_POSTSCRIPT_IN_MSW 1 -#include -#include "wx/metafile.h" -#include "wx/print.h" -#include "wx/printdlg.h" -#include "wx/dcmirror.h" - -#if wxTEST_POSTSCRIPT_IN_MSW -#include "wx/generic/printps.h" -#include "wx/generic/prntdlgg.h" -#endif - #include "fctsys.h" - #include "common.h" -#ifdef EESCHEMA -#include "program.h" -#include "general.h" -#endif +#include "dialog_print_using_printer_base.h" -#ifdef PCBNEW #include "pcbnew.h" #include "protos.h" -// For pcbnew: #include "pcbplot.h" -#endif #define DEFAULT_ORIENTATION_PAPER wxLANDSCAPE // other option is wxPORTRAIT -#ifdef EESCHEMA -#define WIDTH_MAX_VALUE 100 -#else #define WIDTH_MAX_VALUE 1000 -#endif #define WIDTH_MIN_VALUE 1 -#ifdef PCBNEW static long s_SelectedLayers; static double s_ScaleList[] = { 0, 0.5, 0.7, 0.999, 1.0, 1.4, 2.0, 3.0, 4.0 }; -#endif // static print data and page setup data, to remember settings during the session static wxPrintData* g_PrintData; // Variables locales +static int s_PrintPenMinWidth = 1; static int s_PrintMaskLayer; static int s_OptionPrintPage = 0; static int s_Print_Black_and_White = TRUE; @@ -60,7 +37,39 @@ static int s_Scale_Select = 3; // default selected scale = ScaleList[3] static bool s_PrintMirror; static bool s_Print_Sheet_Ref = TRUE; -#include "dialog_print.cpp" + +/* 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: + WinEDA_DrawFrame* m_Parent; + wxConfig* m_Config; + wxCheckBox * m_BoxSelectLayer[32]; +public: + double m_XScaleAdjust, m_YScaleAdjust; + +public: + DIALOG_PRINT_USING_PRINTER( WinEDA_DrawFrame* parent ); + ~DIALOG_PRINT_USING_PRINTER() {}; + +private: + void OnCloseWindow( wxCloseEvent& event ); + void OnInitDialog( wxInitDialogEvent& event ); + void OnPrintSetup( wxCommandEvent& event ); + void OnPrintPreview( wxCommandEvent& event ); + void OnPrintButtonClick( wxCommandEvent& event ); + void OnButtonCancelClick( wxCommandEvent& event ){ Close(); } + void SetScale( wxCommandEvent& event ); + void SetPenWidth(); + wxString BuildPrintTitle(); +public: + bool IsMirrored() { return m_Print_Mirror->IsChecked(); } + bool ExcludeEdges() { return m_Exclude_Edges_Pcb->IsChecked(); } + bool PrintUsingSinglePage() { return m_PagesOption->GetSelection(); } + int SetLayerMaskFromListSelection(); +}; /***************************/ /* Gestion de l'impression */ @@ -73,9 +82,9 @@ public: public: WinEDA_DrawFrame* m_Parent; - WinEDA_PrintFrame* m_PrintFrame; + DIALOG_PRINT_USING_PRINTER* m_PrintFrame; - EDA_Printout( WinEDA_PrintFrame* print_frame, + EDA_Printout( DIALOG_PRINT_USING_PRINTER* print_frame, WinEDA_DrawFrame* parent, const wxString& title, bool print_ref ) : @@ -104,76 +113,73 @@ void WinEDA_DrawFrame::ToPrinter( wxCommandEvent& event ) * et affiche la fenetre de dialogue de gestion de l'impression des feuilles */ { - wxPoint pos = GetPosition(); - bool PrinterError = FALSE; - - // Stop the pending comand (if any...) - if( DrawPanel->ManageCurseur && DrawPanel->ForceCloseManageCurseur ) - { - wxClientDC dc( DrawPanel ); - - DrawPanel->PrepareDC( dc ); - DrawPanel->ForceCloseManageCurseur( DrawPanel, &dc ); - } - SetToolID( 0, wxCURSOR_ARROW, wxEmptyString ); - if( g_PrintData == NULL ) // First print { g_PrintData = new wxPrintData(); if( !g_PrintData->Ok() ) { - PrinterError = TRUE; DisplayError( this, _( "Error Init Printer info" ) ); } g_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGHT; g_PrintData->SetOrientation( DEFAULT_ORIENTATION_PAPER ); } - - pos.x += 10; pos.y += 10; - WinEDA_PrintFrame* frame = new WinEDA_PrintFrame( this ); + DIALOG_PRINT_USING_PRINTER* frame = new DIALOG_PRINT_USING_PRINTER( this ); frame->ShowModal(); frame->Destroy(); } -/*******************************************/ -void WinEDA_PrintFrame::SetOthersDatas() -/*******************************************/ +/*************************************************************************************/ +DIALOG_PRINT_USING_PRINTER::DIALOG_PRINT_USING_PRINTER( WinEDA_DrawFrame* parent ) : + DIALOG_PRINT_USING_PRINTER_base( parent ) +/*************************************************************************************/ { -#ifndef PCBNEW - m_Print_Mirror->Enable( false ); -#endif + m_Parent = parent; + m_Config = wxGetApp().m_EDA_Config; +} - m_FineAdjustXscaleOpt->SetToolTip( _( "Set X scale adjust for exact scale plotting" ) ); - m_FineAdjustYscaleOpt->SetToolTip( _( "Set Y scale adjust for exact scale plotting" ) ); - if( s_Print_Black_and_White ) - m_ColorOption->SetSelection( 1 ); -#ifdef PCBNEW - m_PagesOptionEeschema->Show( false ); - m_PagesOption = m_PagesOptionPcb; + +/************************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnInitDialog( wxInitDialogEvent& event ) +/************************************************************************/ +{ + SetFont(*g_DialogFont); + SetFocus(); + int layer_max = NB_LAYERS; + wxString msg; + + #ifdef GERBVIEW + layer_max = 32; + m_Exclude_Edges_Pcb->SetValue(true); // no meaning in gerbview + m_Exclude_Edges_Pcb->Show(false); + msg = _("Layers:"); + // Set wxRadioBox title to "Layers:" for copper layers and thechincal layers + // Because in Gerbview , al layers are only graphic layers (layer id has no meaning) + m_CopperLayersBoxSizer->GetStaticBox()->SetLabel( msg ); + m_TechnicalLayersBoxSizer->GetStaticBox()->SetLabel( msg ); + #endif /* Create layer list */ int mask = 1, ii; - for( ii = 0; ii < NB_LAYERS; ii++, mask <<= 1 ) + for( ii = 0; ii < layer_max ; ii++, mask <<= 1 ) { - m_BoxSelecLayer[ii] = new wxCheckBox( this, -1, -#if defined (PCBNEW) - ( (WinEDA_PcbFrame*) m_Parent )->GetBoard()-> - GetLayerName( - ii ) ); - #else - ReturnLayerName( ii ) ); +#ifdef GERBVIEW + msg = _("Layer"); + msg << wxT(" ") << ii+1; +#else + msg = ( (WinEDA_PcbFrame*) m_Parent )->GetBoard()->GetLayerName( ii ); #endif + m_BoxSelectLayer[ii] = new wxCheckBox( this, -1, msg ); if( mask & s_SelectedLayers ) - m_BoxSelecLayer[ii]->SetValue( TRUE ); + m_BoxSelectLayer[ii]->SetValue( TRUE ); if( ii < 16 ) - m_CopperLayersBoxSizer->Add( m_BoxSelecLayer[ii], + m_CopperLayersBoxSizer->Add( m_BoxSelectLayer[ii], wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE ); else - m_TechLayersBoxSizer->Add( m_BoxSelecLayer[ii], + m_TechnicalLayersBoxSizer->Add( m_BoxSelectLayer[ii], wxGROW | wxLEFT | wxRIGHT | wxTOP | wxADJUST_MINSIZE ); } @@ -185,12 +191,13 @@ void WinEDA_PrintFrame::SetOthersDatas() // Read the scale adjust option if( m_Config ) { + m_Config->Read( OPTKEY_PLOT_LINEWIDTH_VALUE, &s_PrintPenMinWidth ); m_Config->Read( OPTKEY_PRINT_X_FINESCALE_ADJ, &m_XScaleAdjust ); m_Config->Read( OPTKEY_PRINT_Y_FINESCALE_ADJ, &m_YScaleAdjust ); m_Config->Read( OPTKEY_PRINT_SCALE, &s_Scale_Select ); s_SelectedLayers = 0; - for( int layer = 0; layerRead( layerKey, &option ) ) { - m_BoxSelecLayer[layer]->SetValue( option ); + m_BoxSelectLayer[layer]->SetValue( option ); if( option ) s_SelectedLayers |= 1 << layer; } @@ -209,68 +216,63 @@ void WinEDA_PrintFrame::SetOthersDatas() m_ScaleOption->SetSelection( s_Scale_Select ); + if( s_Print_Black_and_White ) + m_ModeColorOption->SetSelection( 1 ); + + AddUnitSymbol( *m_TextPenWidth, g_UnitMetric ); + m_DialogPenWidth->SetValue( + ReturnStringFromValue( g_UnitMetric, s_PrintPenMinWidth, m_Parent->m_InternalUnits ) ); + + // Create scale adjust option - wxString msg; msg.Printf( wxT( "%lf" ), m_XScaleAdjust ); m_FineAdjustXscaleOpt->SetValue( msg ); msg.Printf( wxT( "%lf" ), m_YScaleAdjust ); m_FineAdjustYscaleOpt->SetValue( msg ); -#else - m_PagesOption = m_PagesOptionEeschema; - m_PagesOptionPcb->Show( false ); - m_ScaleOption->Show( false ); - m_FineAdjustXscaleTitle->Show( false ); - m_FineAdjustXscaleOpt->Show( false ); - m_FineAdjustYscaleTitle->Show( false ); - m_FineAdjustYscaleOpt->Show( false ); -#endif + if (GetSizer()) + { + GetSizer()->SetSizeHints(this); + } } -/**********************************************************/ -int WinEDA_PrintFrame::SetLayerMaskFromListSelection() -/**********************************************************/ +/**************************************************************/ +int DIALOG_PRINT_USING_PRINTER::SetLayerMaskFromListSelection() +/**************************************************************/ { int page_count; + int layers_count = NB_LAYERS; + if (m_Parent->m_Ident == GERBER_FRAME) + layers_count = 32; s_PrintMaskLayer = 0; -#ifdef PCBNEW int ii; - for( ii = 0, page_count = 0; ii < NB_LAYERS; ii++ ) + for( ii = 0, page_count = 0; ii < layers_count; ii++ ) { - if( m_BoxSelecLayer[ii]->IsChecked() ) + if( m_BoxSelectLayer[ii]->IsChecked() ) { page_count++; s_PrintMaskLayer |= 1 << ii; } } -#else - page_count = 1; -#endif return page_count; } -/************************************************************/ -void WinEDA_PrintFrame::SetColorOrBlack( wxCommandEvent& event ) -/************************************************************/ + +/********************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnCloseWindow( wxCloseEvent& event ) +/********************************************************************/ { - s_Print_Black_and_White = m_ColorOption->GetSelection(); -} + s_Print_Black_and_White = m_ModeColorOption->GetSelection(); + m_Print_Sheet_Ref->SetValue( s_Print_Sheet_Ref ); + SetPenWidth(); - -/****************************************************/ -void WinEDA_PrintFrame::OnClosePrintDialog() -/****************************************************/ - -/* called when WinEDA_PrintFrame is closed - */ -{ if( m_Config ) { - m_Config->Write( OPTKEY_PLOT_LINEWIDTH_VALUE, g_PlotLine_Width ); + m_Config->Write( OPTKEY_PLOT_LINEWIDTH_VALUE, s_PrintPenMinWidth ); } if( m_FineAdjustXscaleOpt ) @@ -279,27 +281,28 @@ void WinEDA_PrintFrame::OnClosePrintDialog() m_FineAdjustYscaleOpt->GetValue().ToDouble( &m_YScaleAdjust ); SetPenWidth(); -#ifdef PCBNEW if( m_Config ) { m_Config->Write( OPTKEY_PRINT_X_FINESCALE_ADJ, m_XScaleAdjust ); m_Config->Write( OPTKEY_PRINT_Y_FINESCALE_ADJ, m_YScaleAdjust ); m_Config->Write( OPTKEY_PRINT_SCALE, s_Scale_Select ); wxString layerKey; - for( int layer = 0; layerm_Ident == GERBER_FRAME) + layers_count = 32; + for( int layer = 0; layerWrite( layerKey, m_BoxSelecLayer[layer]->IsChecked() ); + m_Config->Write( layerKey, m_BoxSelectLayer[layer]->IsChecked() ); } } -#endif EndModal( 0 ); } -/************************************************/ -wxString WinEDA_PrintFrame::BuildPrintTitle() -/************************************************/ +/*****************************************************/ +wxString DIALOG_PRINT_USING_PRINTER::BuildPrintTitle() +/*****************************************************/ /* return a valid filename to create a print file */ @@ -313,11 +316,10 @@ wxString WinEDA_PrintFrame::BuildPrintTitle() } -/******************************************************/ -void WinEDA_PrintFrame::SetScale( wxCommandEvent& event ) -/******************************************************/ +/******************************************************************/ +void DIALOG_PRINT_USING_PRINTER::SetScale( wxCommandEvent& event ) +/******************************************************************/ { -#ifdef PCBNEW s_Scale_Select = m_ScaleOption->GetSelection(); Scale_X = Scale_Y = s_ScaleList[s_Scale_Select]; if( m_FineAdjustXscaleOpt ) @@ -326,33 +328,36 @@ void WinEDA_PrintFrame::SetScale( wxCommandEvent& event ) m_FineAdjustYscaleOpt->GetValue().ToDouble( &m_YScaleAdjust ); Scale_X *= m_XScaleAdjust; Scale_Y *= m_YScaleAdjust; -#endif } -/****************************************/ -void WinEDA_PrintFrame::SetPenWidth() -/****************************************/ +/**********************************************/ +void DIALOG_PRINT_USING_PRINTER::SetPenWidth() +/***********************************************/ /* Get the new pen width value, and verify min et max value - * NOTE: g_PlotLine_Width is in internal units + * NOTE: s_PrintPenMinWidth is in internal units */ { - g_PlotLine_Width = m_DialogPenWidth->GetValue(); - if( g_PlotLine_Width > WIDTH_MAX_VALUE ) + s_PrintPenMinWidth = ReturnValueFromTextCtrl( *m_DialogPenWidth, m_Parent->m_InternalUnits ); + + if( s_PrintPenMinWidth > WIDTH_MAX_VALUE ) { - g_PlotLine_Width = WIDTH_MAX_VALUE; + s_PrintPenMinWidth = WIDTH_MAX_VALUE; } - if( g_PlotLine_Width < WIDTH_MIN_VALUE ) + + if( s_PrintPenMinWidth < WIDTH_MIN_VALUE ) { - g_PlotLine_Width = WIDTH_MIN_VALUE; + s_PrintPenMinWidth = WIDTH_MIN_VALUE; } - m_DialogPenWidth->SetValue( g_PlotLine_Width ); + + m_DialogPenWidth->SetValue( + ReturnStringFromValue(g_UnitMetric, s_PrintPenMinWidth, m_Parent->m_InternalUnits ) ); } /**********************************************************/ -void WinEDA_PrintFrame::OnPrintSetup( wxCommandEvent& event ) +void DIALOG_PRINT_USING_PRINTER::OnPrintSetup( wxCommandEvent& event ) /**********************************************************/ /* Open a dialog box for printer setup (printer options, page size ...) @@ -374,7 +379,7 @@ void WinEDA_PrintFrame::OnPrintSetup( wxCommandEvent& event ) /************************************************************/ -void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event ) +void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event ) /************************************************************/ /* Open and display a previewer frame for printing @@ -383,32 +388,31 @@ void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event ) wxSize WSize; wxPoint WPos; int x, y; - bool print_ref = TRUE; SetScale( event ); SetPenWidth(); + s_Print_Black_and_White = m_ModeColorOption->GetSelection(); + if( m_PagesOption ) s_OptionPrintPage = m_PagesOption->GetSelection(); - if( (m_Print_Sheet_Ref == NULL) || (m_Print_Sheet_Ref->GetValue() == FALSE) ) - print_ref = FALSE; + s_Print_Sheet_Ref = m_Print_Sheet_Ref->GetValue(); // Pass two printout objects: for preview, and possible printing. wxString title = BuildPrintTitle(); wxPrintPreview* preview = - new wxPrintPreview( new EDA_Printout( this, m_Parent, title, print_ref ), - new EDA_Printout( this, m_Parent, title, print_ref ), g_PrintData ); + new wxPrintPreview( new EDA_Printout( this, m_Parent, title, s_Print_Sheet_Ref ), + new EDA_Printout( this, m_Parent, title, s_Print_Sheet_Ref ), + g_PrintData ); if( preview == NULL ) { - DisplayError( this, _( "There was a problem previewing" ) ); + DisplayError( this, wxT( "OnPrintPreview() problem" ) ); return; } -#ifdef PCBNEW if( s_OptionPrintPage ) SetLayerMaskFromListSelection(); -#endif m_Parent->GetPosition( &x, &y ); WPos.x = x + 4; @@ -426,28 +430,25 @@ void WinEDA_PrintFrame::OnPrintPreview( wxCommandEvent& event ) } -/**********************************************************/ -void WinEDA_PrintFrame::EDA_PrintPage( wxCommandEvent& event ) -/**********************************************************/ +/***************************************************************************/ +void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event ) +/***************************************************************************/ -/* Called on activate "Print CURRENT" button +/* Called on activate Print button */ { - bool print_ref = TRUE; - SetScale( event ); + s_Print_Black_and_White = m_ModeColorOption->GetSelection(); + s_OptionPrintPage = 0; if( m_PagesOption ) s_OptionPrintPage = m_PagesOption->GetSelection(); - if( (m_Print_Sheet_Ref == NULL) || (m_Print_Sheet_Ref->GetValue() == FALSE) ) - print_ref = FALSE; + s_Print_Sheet_Ref = m_Print_Sheet_Ref->GetValue(); -#ifdef PCBNEW if( s_OptionPrintPage ) SetLayerMaskFromListSelection(); -#endif SetPenWidth(); @@ -456,7 +457,7 @@ void WinEDA_PrintFrame::EDA_PrintPage( wxCommandEvent& event ) wxPrinter printer( &printDialogData ); wxString title = BuildPrintTitle(); - EDA_Printout printout( this, m_Parent, title, print_ref ); + EDA_Printout printout( this, m_Parent, title, s_Print_Sheet_Ref ); #ifndef __WINDOWS__ wxDC* dc = printout.GetDC(); @@ -484,48 +485,9 @@ bool EDA_Printout::OnPrintPage( int page ) msg.Printf( _( "Print page %d" ), page ); m_Parent->Affiche_Message( msg ); - - -#ifdef EESCHEMA - WinEDA_SchematicFrame* schframe = (WinEDA_SchematicFrame*) m_Parent; - SCH_SCREEN* screen = schframe->GetScreen(); - SCH_SCREEN* oldscreen = screen; - DrawSheetPath* oldsheetpath = schframe->GetSheet(); - - - DrawSheetPath list; - if( s_OptionPrintPage == 1 ) - { - /* Print all pages, so when called, the page is not the current page. - * We must select it and setup references and others parameters - * because in complex hierarchies a SCH_SCREEN (a schematic drawings) - * is shared between many sheets - */ - EDA_SheetList SheetList( NULL ); - DrawSheetPath* sheetpath = SheetList.GetSheet( page - 1 ); - if( list.BuildSheetPathInfoFromSheetPathValue( sheetpath->Path() ) ) - { - schframe->m_CurrentSheet = &list; - schframe->m_CurrentSheet->UpdateAllScreenReferences(); - schframe->SetSheetNumberAndCount(); - screen = schframe->m_CurrentSheet->LastScreen(); - } - else - screen = NULL; - } - - if( screen == NULL ) - return FALSE; - ActiveScreen = screen; - DrawPage(); - ActiveScreen = oldscreen; - schframe->m_CurrentSheet = oldsheetpath; - schframe->m_CurrentSheet->UpdateAllScreenReferences(); - schframe->SetSheetNumberAndCount(); -#endif - - -#ifdef PCBNEW + int layers_count = NB_LAYERS; + if (m_Parent->m_Ident == GERBER_FRAME) + layers_count = 32; if( (m_Parent->m_Ident == PCB_FRAME) || (m_Parent->m_Ident == GERBER_FRAME) ) { m_PrintFrame->SetLayerMaskFromListSelection(); @@ -533,7 +495,7 @@ bool EDA_Printout::OnPrintPage( int page ) { // compute layer mask from page number int ii, jj, mask = 1; - for( ii = 0, jj = 0; ii < NB_LAYERS; ii++ ) + for( ii = 0, jj = 0; ii < layers_count; ii++ ) { if( s_PrintMaskLayer & mask ) jj++; @@ -545,12 +507,11 @@ bool EDA_Printout::OnPrintPage( int page ) mask <<= 1; } - if( ii == NB_LAYERS ) + if( ii == layers_count ) return FALSE; } } DrawPage(); -#endif return TRUE; } @@ -566,15 +527,6 @@ void EDA_Printout::GetPageInfo( int* minPage, int* maxPage, *minPage = 1; *selPageFrom = 1; -#ifdef EESCHEMA - if( s_OptionPrintPage == 1 ) - { - ii = g_RootSheet->CountSheets(); - } -#endif - -#ifdef PCBNEW - switch( s_OptionPrintPage ) { case 0: @@ -586,8 +538,6 @@ void EDA_Printout::GetPageInfo( int* minPage, int* maxPage, break; } -#endif - *maxPage = ii; *selPageTo = ii; } @@ -597,19 +547,7 @@ void EDA_Printout::GetPageInfo( int* minPage, int* maxPage, bool EDA_Printout::HasPage( int pageNum ) /**************************************/ { -#ifdef EESCHEMA - int PageCount; - - PageCount = g_RootSheet->CountSheets(); - if( PageCount >= pageNum ) - return TRUE; - - return FALSE; -#endif - -#ifdef PCBNEW return TRUE; -#endif } @@ -644,7 +582,7 @@ void EDA_Printout::DrawPage() int DrawZoom = 1; wxDC* dc = GetDC(); - s_PrintMirror = m_PrintFrame->m_Print_Mirror->GetValue(); + s_PrintMirror = m_PrintFrame->IsMirrored(); wxBusyCursor dummy; @@ -659,14 +597,19 @@ void EDA_Printout::DrawPage() ActiveScreen->m_DrawOrg.x = ActiveScreen->m_DrawOrg.y = 0; ActiveScreen->m_StartVisu.x = ActiveScreen->m_StartVisu.y = 0; + // Gerbview uses a very large sheet (called "World" in gerber language) + // to print a sheet, uses A4 is better SheetSize = ActiveScreen->m_CurrentSheetDesc->m_Size; // size in 1/1000 inch + if (m_Parent->m_Ident == GERBER_FRAME) + { + SheetSize = g_Sheet_A4.m_Size; // size in 1/1000 inch + } SheetSize.x *= m_Parent->m_InternalUnits / 1000; SheetSize.y *= m_Parent->m_InternalUnits / 1000; // size in pixels // Get the size of the DC in pixels dc->GetSize( &PlotAreaSize.x, &PlotAreaSize.y ); -#ifdef PCBNEW WinEDA_BasePcbFrame* pcbframe = (WinEDA_BasePcbFrame*) m_Parent; pcbframe->GetBoard()->ComputeBoundaryBox(); /* Compute the PCB size in internal units*/ @@ -685,9 +628,6 @@ void EDA_Printout::DrawPage() DrawOffset.x += pcbframe->GetBoard()->m_BoundaryBox.Centre().x; DrawOffset.y += pcbframe->GetBoard()->m_BoundaryBox.Centre().y; } -#else - userscale = 1; -#endif // Calculate a suitable scaling factor scaleX = (double) SheetSize.x / PlotAreaSize.x; @@ -695,7 +635,6 @@ void EDA_Printout::DrawPage() scale = wxMax( scaleX, scaleY ) / userscale; // Use x or y scaling factor, whichever fits on the DC // ajust the real draw scale -#ifdef PCBNEW double accurate_Xscale, accurate_Yscale; dc->SetUserScale( DrawZoom / scale * m_PrintFrame->m_XScaleAdjust, DrawZoom / scale * m_PrintFrame->m_YScaleAdjust ); @@ -717,11 +656,7 @@ void EDA_Printout::DrawPage() accurate_Xscale *= m_PrintFrame->m_XScaleAdjust; accurate_Yscale *= m_PrintFrame->m_YScaleAdjust; } -#else - dc->SetUserScale( DrawZoom / scale, DrawZoom / scale ); -#endif -#ifdef PCBNEW if( (s_ScaleList[s_Scale_Select] > 1.0) // scale > 1 -> Recadrage || (s_ScaleList[s_Scale_Select] == 0) ) // fit in page { @@ -730,7 +665,6 @@ void EDA_Printout::DrawPage() } DrawOffset.x += (int) ( (SheetSize.x / 2) * (m_PrintFrame->m_XScaleAdjust - 1.0) ); DrawOffset.y += (int) ( (SheetSize.y / 2) * (m_PrintFrame->m_YScaleAdjust - 1.0) ); -#endif ActiveScreen->m_DrawOrg = DrawOffset; @@ -739,22 +673,7 @@ void EDA_Printout::DrawPage() GRForceBlackPen( TRUE ); -#ifdef EESCHEMA - /* set Pen min width */ - double ftmp, xdcscale, ydcscale; - - // g_PlotLine_Width is in internal units ( 1/1000 inch), and must be converted in pixels - ftmp = (float) g_PlotLine_Width * 25.4 / EESCHEMA_INTERNAL_UNIT; // ftmp est en mm - ftmp *= (float) PlotAreaSize.x / PageSize_in_mm.x; /* ftmp is in pixels */ - - /* because the pen size will be scaled by the dc scale, we modify the size - * in order to keep the requested value */ - dc->GetUserScale( &xdcscale, &ydcscale ); - ftmp /= xdcscale; - SetPenMinWidth( (int) round( ftmp ) ); -#else SetPenMinWidth( 1 ); // min width = 1 pixel -#endif WinEDA_DrawPanel* panel = m_Parent->DrawPanel; EDA_Rect tmp = panel->m_ClipBox; @@ -765,11 +684,9 @@ void EDA_Printout::DrawPage() g_IsPrinting = TRUE; int bg_color = g_DrawBgColor; -#ifdef PCBNEW - // background color can left BLACK only when drawing the full board at once, in color mode // Switch it to WHITE in others cases - if ( s_Print_Black_and_White || ( m_PrintFrame->m_PagesOption->GetSelection() != 1 ) ) + if ( s_Print_Black_and_White || ( ! m_PrintFrame->PrintUsingSinglePage() ) ) g_DrawBgColor = WHITE; if( m_Print_Sheet_Ref ) @@ -811,16 +728,12 @@ void EDA_Printout::DrawPage() } #ifndef GERBVIEW - if( !m_PrintFrame->m_Exclude_Edges_Pcb->GetValue() ) + if( !m_PrintFrame->ExcludeEdges() ) s_PrintMaskLayer |= EDGE_LAYER; #endif panel->PrintPage( dc, 0, s_PrintMaskLayer, s_PrintMirror ); -#else - panel->PrintPage( dc, m_Print_Sheet_Ref, s_PrintMaskLayer, s_PrintMirror ); -#endif - g_DrawBgColor = bg_color; g_IsPrinting = FALSE; panel->m_ClipBox = tmp; diff --git a/pcbnew/dialog_print_using_printer_base.cpp b/pcbnew/dialog_print_using_printer_base.cpp new file mode 100644 index 0000000000..d793e80cac --- /dev/null +++ b/pcbnew/dialog_print_using_printer_base.cpp @@ -0,0 +1,156 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// 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 ) : wxDialog( 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_CopperLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Copper Layers:") ), wxVERTICAL ); + + bleftSizer->Add( m_CopperLayersBoxSizer, 1, wxALL, 5 ); + + m_TechnicalLayersBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Technical Layers:") ), wxVERTICAL ); + + bleftSizer->Add( m_TechnicalLayersBoxSizer, 1, wxALL, 5 ); + + sbLayersSizer->Add( bleftSizer, 1, wxEXPAND, 5 ); + + m_Exclude_Edges_Pcb = new wxCheckBox( this, wxID_ANY, _("Exclude Edges_Pcb 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 ); + + bMainSizer->Add( sbLayersSizer, 1, wxEXPAND, 5 ); + + wxBoxSizer* bmiddleLeftSizer; + bmiddleLeftSizer = new wxBoxSizer( wxVERTICAL ); + + wxString m_ScaleOptionChoices[] = { _("fit in page"), _("Scale 0.5"), _("Scale 0.7"), _("Approx. 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, _("Approx. Scale:"), wxDefaultPosition, wxDefaultSize, m_ScaleOptionNChoices, m_ScaleOptionChoices, 1, wxRA_SPECIFY_COLS ); + m_ScaleOption->SetSelection( 3 ); + bmiddleLeftSizer->Add( m_ScaleOption, 0, wxALL, 5 ); + + m_FineAdjustXscaleTitle = new wxStaticText( this, wxID_ANY, _("X Scale Adjust"), 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 Adjust"), 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_TextPenWidth = new wxStaticText( this, wxID_ANY, _("Pen Width Mini"), wxDefaultPosition, wxDefaultSize, 0 ); + m_TextPenWidth->Wrap( -1 ); + sbOptionsSizer->Add( m_TextPenWidth, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_DialogPenWidth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_DialogPenWidth->SetToolTip( _("Selection of the minimum pen thickness used to draw items.") ); + + sbOptionsSizer->Add( m_DialogPenWidth, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 ); + + m_Print_Sheet_Ref = new wxCheckBox( this, wxID_FRAME_SEL, _("Print frame ref"), wxDefaultPosition, wxDefaultSize, 0 ); + m_Print_Sheet_Ref->SetValue(true); + + m_Print_Sheet_Ref->SetToolTip( _("Print (or not) the Frame references.") ); + + sbOptionsSizer->Add( m_Print_Sheet_Ref, 0, wxALL, 5 ); + + m_Print_Mirror = new wxCheckBox( this, 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( 1 ); + m_ModeColorOption->SetToolTip( _("Choose if you wand to draw the sheet like it appears on screen,\nor in black and white mode, better to print it when using black and white printers") ); + + bmiddleRightSizer->Add( m_ModeColorOption, 0, wxALL|wxEXPAND, 5 ); + + wxString m_PagesOptionChoices[] = { _("1 Page per Layer"), _("Single page") }; + int m_PagesOptionNChoices = sizeof( m_PagesOptionChoices ) / sizeof( wxString ); + m_PagesOption = new wxRadioBox( this, wxID_PAGE_MODE, _("Page Print"), wxDefaultPosition, wxDefaultSize, m_PagesOptionNChoices, m_PagesOptionChoices, 1, wxRA_SPECIFY_COLS ); + m_PagesOption->SetSelection( 0 ); + bmiddleRightSizer->Add( m_PagesOption, 0, wxALL|wxEXPAND, 5 ); + + bMainSizer->Add( bmiddleRightSizer, 0, wxEXPAND, 5 ); + + wxBoxSizer* bbuttonsSizer; + bbuttonsSizer = new wxBoxSizer( wxVERTICAL ); + + m_buttonOption = new wxButton( this, wxID_PRINT_OPTIONS, _("Page Options"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonOption, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonPreview = new wxButton( this, wxID_PREVIEW, _("Preview"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonPreview, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonPrint = new wxButton( this, wxID_PRINT_ALL, _("Print"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonPrint, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + m_buttonQuit = new wxButton( this, wxID_CANCEL, _("Close"), wxDefaultPosition, wxDefaultSize, 0 ); + bbuttonsSizer->Add( m_buttonQuit, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); + + bMainSizer->Add( bbuttonsSizer, 0, wxALIGN_CENTER_VERTICAL, 5 ); + + this->SetSizer( bMainSizer ); + this->Layout(); + + // Connect Events + this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnCloseWindow ) ); + this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnInitDialog ) ); + m_ScaleOption->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_base::SetScale ), NULL, this ); + m_buttonOption->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnPrintSetup ), 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::OnButtonCancelClick ), 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 ) ); + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnInitDialog ) ); + m_ScaleOption->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_base::SetScale ), NULL, this ); + m_buttonOption->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PRINT_USING_PRINTER_base::OnPrintSetup ), 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::OnButtonCancelClick ), NULL, this ); +} diff --git a/pcbnew/dialog_print_using_printer_base.fbp b/pcbnew/dialog_print_using_printer_base.fbp new file mode 100644 index 0000000000..8d1132ba95 --- /dev/null +++ b/pcbnew/dialog_print_using_printer_base.fbp @@ -0,0 +1,1025 @@ + + + + + + C++ + 1 + UTF-8 + connect + dialog_print_using_printer_base + 1000 + none + 1 + DialogSVGPrint_base + + . + + 1 + 1 + 0 + + + + + 1 + + + + 0 + wxID_ANY + + -1,-1 + DIALOG_PRINT_USING_PRINTER_base + + 551,314 + wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER + + Print + + + + + + + + OnCloseWindow + + + + + + OnInitDialog + + + + + + + + + + + + + + + + + + + + + + + bMainSizer + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + wxID_ANY + Layers: + + sbLayersSizer + wxVERTICAL + none + + + 5 + wxEXPAND + 1 + + + bleftSizer + wxHORIZONTAL + none + + 5 + wxALL + 1 + + wxID_ANY + Copper Layers: + + m_CopperLayersBoxSizer + wxVERTICAL + protected + + + + + 5 + wxALL + 1 + + wxID_ANY + Technical Layers: + + m_TechnicalLayersBoxSizer + wxVERTICAL + protected + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Exclude Edges_Pcb Layer + + + m_Exclude_Edges_Pcb + protected + + + + + Exclude contents of Edges_Pcb layer from all other layers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bmiddleLeftSizer + wxVERTICAL + none + + 5 + wxALL + 0 + + + "fit in page" "Scale 0.5" "Scale 0.7" "Approx. Scale 1" "Accurate Scale 1" "Scale 1.4" "Scale 2" "Scale 3" "Scale 4" + + 1 + + + 0 + wxID_ANY + Approx. Scale: + 1 + + + m_ScaleOption + protected + + 3 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + SetScale + + + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + X Scale Adjust + + + m_FineAdjustXscaleTitle + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_ANY + + 0 + + m_FineAdjustXscaleOpt + protected + + + + + Set X scale adjust for exact scale plotting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Y Scale Adjust + + + m_FineAdjustYscaleTitle + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_ANY + + 0 + + m_FineAdjustYscaleOpt + protected + + + + + Set Y scale adjust for exact scale plotting + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 0 + + + bmiddleRightSizer + wxVERTICAL + none + + 5 + wxEXPAND|wxALL + 0 + + wxID_ANY + Options: + + sbOptionsSizer + wxVERTICAL + none + + + 5 + wxTOP|wxRIGHT|wxLEFT + 0 + + + + 1 + + + 0 + wxID_ANY + Pen Width Mini + + + m_TextPenWidth + protected + + + + + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND + 0 + + + + 1 + + + 0 + wxID_ANY + + 0 + -1,-1 + m_DialogPenWidth + protected + + + + + Selection of the minimum pen thickness used to draw items. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 1 + + 1 + + + 0 + wxID_FRAME_SEL + Print frame ref + + + m_Print_Sheet_Ref + protected + + + + + Print (or not) the Frame references. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL + 0 + + + 0 + + 1 + + + 0 + wxID_ANY + Mirror + + + m_Print_Mirror + protected + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "Color" "Black and white" + + 1 + + + 0 + wxID_PRINT_MODE + Print Mode + 1 + + + m_ModeColorOption + protected + + 1 + + wxRA_SPECIFY_COLS + + Choose if you wand to draw the sheet like it appears on screen, or in black and white mode, better to print it when using black and white printers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + + "1 Page per Layer" "Single page" + + 1 + + + 0 + wxID_PAGE_MODE + Page Print + 1 + + + m_PagesOption + protected + + 0 + + wxRA_SPECIFY_COLS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL + 0 + + + bbuttonsSizer + wxVERTICAL + none + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_PRINT_OPTIONS + Page Options + + + m_buttonOption + protected + + + + + + + + + OnPrintSetup + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_PREVIEW + Preview + + + m_buttonPreview + protected + + + + + + + + + OnPrintPreview + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_PRINT_ALL + Print + + + m_buttonPrint + protected + + + + + + + + + OnPrintButtonClick + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_HORIZONTAL + 0 + + + + 0 + 1 + + + 0 + wxID_CANCEL + Close + + + m_buttonQuit + protected + + + + + + + + + OnButtonCancelClick + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pcbnew/dialog_print_using_printer_base.h b/pcbnew/dialog_print_using_printer_base.h new file mode 100644 index 0000000000..dbf086727c --- /dev/null +++ b/pcbnew/dialog_print_using_printer_base.h @@ -0,0 +1,81 @@ +/////////////////////////////////////////////////////////////////////////// +// C++ code generated with wxFormBuilder (version Apr 16 2008) +// http://www.wxformbuilder.org/ +// +// PLEASE DO "NOT" EDIT THIS FILE! +/////////////////////////////////////////////////////////////////////////// + +#ifndef __dialog_print_using_printer_base__ +#define __dialog_print_using_printer_base__ + +#include + +#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 wxDialog +{ + private: + + protected: + enum + { + wxID_FRAME_SEL = 1000, + wxID_PRINT_MODE, + wxID_PAGE_MODE, + wxID_PRINT_OPTIONS, + wxID_PRINT_ALL, + }; + + wxStaticBoxSizer* m_CopperLayersBoxSizer; + wxStaticBoxSizer* m_TechnicalLayersBoxSizer; + wxCheckBox* m_Exclude_Edges_Pcb; + wxRadioBox* m_ScaleOption; + wxStaticText* m_FineAdjustXscaleTitle; + wxTextCtrl* m_FineAdjustXscaleOpt; + wxStaticText* m_FineAdjustYscaleTitle; + wxTextCtrl* m_FineAdjustYscaleOpt; + wxStaticText* m_TextPenWidth; + wxTextCtrl* m_DialogPenWidth; + wxCheckBox* m_Print_Sheet_Ref; + wxCheckBox* m_Print_Mirror; + wxRadioBox* m_ModeColorOption; + wxRadioBox* m_PagesOption; + 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 OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); } + virtual void SetScale( wxCommandEvent& event ){ event.Skip(); } + virtual void OnPrintSetup( wxCommandEvent& event ){ event.Skip(); } + virtual void OnPrintPreview( wxCommandEvent& event ){ event.Skip(); } + virtual void OnPrintButtonClick( wxCommandEvent& event ){ event.Skip(); } + virtual void OnButtonCancelClick( 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( 551,314 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + ~DIALOG_PRINT_USING_PRINTER_base(); + +}; + +#endif //__dialog_print_using_printer_base__ diff --git a/pcbnew/makefile.include b/pcbnew/makefile.include index 77a5c7a339..23413752d4 100644 --- a/pcbnew/makefile.include +++ b/pcbnew/makefile.include @@ -35,12 +35,13 @@ OBJECTS= $(TARGET).o classpcb.o\ dialog_pcb_text_properties.o\ dialog_SVG_print.o\ dialog_SVG_print_base.o\ + dialog_print_using_printer.o\ + dialog_print_using_printer_base.o\ onrightclick.o\ onleftclick.o\ modedit_onclick.o\ cross-probing.o\ via_edit.o\ - wxprint.o \ class_marker.o\ menubarpcb.o \ menubarmodedit.o \ @@ -162,9 +163,6 @@ files.o: files.cpp export_gencad.o: export_gencad.cpp -wxprint.o: ../share/wxprint.cpp ../share/dialog_print.cpp ../share/dialog_print.h - $(CXX) -c $(EDACPPFLAGS) -o $@ ../share/$*.cpp - print_board_functions.o: print_board_functions.cpp classpcb.o: classpcb.cpp diff --git a/pcbnew/zones_convert_brd_items_to_polygons.cpp b/pcbnew/zones_convert_brd_items_to_polygons.cpp index a2e6097025..bdadcc6e23 100644 --- a/pcbnew/zones_convert_brd_items_to_polygons.cpp +++ b/pcbnew/zones_convert_brd_items_to_polygons.cpp @@ -296,7 +296,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) } // Now we remove all unused thermal stubs. -#define REMOVE_UNUSED_THERMAL_STUBS // Can be commented to skip unused thermal stubs calculations +//#define REMOVE_UNUSED_THERMAL_STUBS // Can be commented to skip unused thermal stubs calculations #ifdef REMOVE_UNUSED_THERMAL_STUBS // first compute endindex for TestPointInsidePolygon unsigned int indexstart = 0, indexend; @@ -338,8 +338,8 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) continue; // test point - int dx = (pad->m_Size.x / 2) + m_ThermalReliefGapValue; - int dy = (pad->m_Size.y / 2) + m_ThermalReliefGapValue; + int dx = (pad->m_Size.x / 2) + m_ThermalReliefGapValue + 3; + int dy = (pad->m_Size.y / 2) + m_ThermalReliefGapValue + 3; // compute north, south, west and east points for zone connection. wxPoint ptTest[4]; @@ -349,14 +349,18 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) ptTest[3] = wxPoint(-(dx+m_ZoneMinThickness/2), 0); // This is CIRCLE pad tweak (for circle pads the thermal stubs are at 45 deg) - float fAngle = 0.0; + int fAngle = pad->m_Orient; if ( pad->m_PadShape == PAD_CIRCLE) - fAngle = 450.0; + { + dx = (int) (dx * s_Correction); + dy = dx; + fAngle = 450; + } // Test all sides for (int i=0; i<4; i++) { // rotate point - RotatePoint( &ptTest[i], pad->m_Orient + fAngle ); + RotatePoint( &ptTest[i], fAngle ); // translate point ptTest[i] += pad->ReturnShapePos(); if ( TestPointInsidePolygon( m_FilledPolysList, indexstart, @@ -398,7 +402,7 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) for( unsigned ic = 0; ic < corners_buffer.size(); ic++ ) { wxPoint cpos = corners_buffer[ic]; - RotatePoint( &cpos, pad->m_Orient + fAngle ); // Rotate according to module orientation + RotatePoint( &cpos, fAngle ); // Rotate according to module orientation cpos += pad->ReturnShapePos(); // Shift origin to position booleng->AddPoint( cpos.x, cpos.y ); } diff --git a/share/dialog_print.cpp b/share/dialog_print.cpp deleted file mode 100644 index 848347d49b..0000000000 --- a/share/dialog_print.cpp +++ /dev/null @@ -1,352 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dialog_print.cpp -// Purpose: -// Author: jean-pierre Charras -// Modified by: -// Created: 28/02/2006 18:30:16 -// RCS-ID: -// Copyright: License GNU -// Licence: -///////////////////////////////////////////////////////////////////////////// - -// Generated by DialogBlocks (unregistered), 28/02/2006 18:30:16 - -////@begin includes -////@end includes - -#include "dialog_print.h" - -////@begin XPM images -////@end XPM images - -/*! - * WinEDA_PrintFrame type definition - */ - -IMPLEMENT_DYNAMIC_CLASS( WinEDA_PrintFrame, wxDialog ) - -/*! - * WinEDA_PrintFrame event table definition - */ - -BEGIN_EVENT_TABLE( WinEDA_PrintFrame, wxDialog ) - -////@begin WinEDA_PrintFrame event table entries - EVT_RADIOBOX( ID_SET_PRINT_SCALE, WinEDA_PrintFrame::OnSetPrintScaleSelected ) - - EVT_RADIOBOX( ID_SET_BW, WinEDA_PrintFrame::OnSetBwSelected ) - - EVT_BUTTON( ID_PRINT_SETUP, WinEDA_PrintFrame::OnPrintSetupClick ) - - EVT_BUTTON( ID_PRINT_PREVIEW, WinEDA_PrintFrame::OnPrintPreviewClick ) - - EVT_BUTTON( ID_PRINT_EXECUTE, WinEDA_PrintFrame::OnPrintExecuteClick ) - - EVT_BUTTON( wxID_CANCEL, WinEDA_PrintFrame::OnCancelClick ) - -////@end WinEDA_PrintFrame event table entries - -END_EVENT_TABLE() - -/*! - * WinEDA_PrintFrame constructors - */ - -WinEDA_PrintFrame::WinEDA_PrintFrame( ) -{ -} - -WinEDA_PrintFrame::WinEDA_PrintFrame( WinEDA_DrawFrame* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) -{ - m_Parent = parent; - m_XScaleAdjust = m_YScaleAdjust = 1.0; - m_PagesOption = NULL; - m_Config = wxGetApp().m_EDA_Config; - if ( m_Config ) - { - m_Config->Read(OPTKEY_PLOT_LINEWIDTH_VALUE, &g_PlotLine_Width); - } - - - Create(parent, id, caption, pos, size, style); -} - -/*! - * WinEDA_PrintFrame creator - */ - -bool WinEDA_PrintFrame::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style ) -{ -////@begin WinEDA_PrintFrame member initialisation - m_FullDialogBowSizer = NULL; - m_LeftBoxSizer = NULL; - m_LayersSelectionsBoxSizer = NULL; - m_CopperLayersBoxSizer = NULL; - m_TechLayersBoxSizer = NULL; - m_Exclude_Edges_Pcb = NULL; - m_ScaleBoxSizer = NULL; - m_ScaleOption = NULL; - m_FineAdjustXscaleTitle = NULL; - m_FineAdjustXscaleOpt = NULL; - m_FineAdjustYscaleTitle = NULL; - m_FineAdjustYscaleOpt = NULL; - m_OptionsBoxSizer = NULL; - m_DialogPenWidthSizer = NULL; - m_Print_Sheet_Ref = NULL; - m_Print_Mirror = NULL; - m_ColorOption = NULL; - m_PagesOptionPcb = NULL; - m_PagesOptionEeschema = NULL; - m_ButtonsBoxSizer = NULL; - m_CloseButton = NULL; -////@end WinEDA_PrintFrame member initialisation - -////@begin WinEDA_PrintFrame creation - SetExtraStyle(wxWS_EX_BLOCK_EVENTS); - wxDialog::Create( parent, id, caption, pos, size, style ); - - CreateControls(); - if (GetSizer()) - { - GetSizer()->SetSizeHints(this); - } - Centre(); -////@end WinEDA_PrintFrame creation - return true; -} - -/*! - * Control creation for WinEDA_PrintFrame - */ - -void WinEDA_PrintFrame::CreateControls() -{ - SetFont(*g_DialogFont); - -////@begin WinEDA_PrintFrame content construction - // Generated by DialogBlocks, 25/08/2008 12:59:33 (unregistered) - - WinEDA_PrintFrame* itemDialog1 = this; - - m_FullDialogBowSizer = new wxBoxSizer(wxHORIZONTAL); - itemDialog1->SetSizer(m_FullDialogBowSizer); - - m_LeftBoxSizer = new wxBoxSizer(wxVERTICAL); - m_FullDialogBowSizer->Add(m_LeftBoxSizer, 0, wxGROW|wxTOP|wxBOTTOM, 5); - - m_LayersSelectionsBoxSizer = new wxBoxSizer(wxHORIZONTAL); - m_LeftBoxSizer->Add(m_LayersSelectionsBoxSizer, 0, wxGROW|wxALL, 5); - - m_CopperLayersBoxSizer = new wxBoxSizer(wxVERTICAL); - m_LayersSelectionsBoxSizer->Add(m_CopperLayersBoxSizer, 0, wxALIGN_TOP|wxRIGHT|wxTOP|wxBOTTOM, 5); - - m_TechLayersBoxSizer = new wxBoxSizer(wxVERTICAL); - m_LayersSelectionsBoxSizer->Add(m_TechLayersBoxSizer, 0, wxALIGN_TOP|wxALL, 5); - - m_Exclude_Edges_Pcb = new wxCheckBox( itemDialog1, ID_EXCLUDE_EDGES_PCB, _("Exclude Edges_Pcb Layer"), wxDefaultPosition, wxDefaultSize, 0 ); - m_Exclude_Edges_Pcb->SetValue(false); - if (WinEDA_PrintFrame::ShowToolTips()) - m_Exclude_Edges_Pcb->SetToolTip(_("Exclude contents of Edges_Pcb layer from all other layers")); - m_Exclude_Edges_Pcb->Show(false); - m_LeftBoxSizer->Add(m_Exclude_Edges_Pcb, 0, wxGROW|wxALL, 5); - - m_ScaleBoxSizer = new wxBoxSizer(wxVERTICAL); - m_FullDialogBowSizer->Add(m_ScaleBoxSizer, 0, wxGROW|wxALL, 5); - - wxArrayString m_ScaleOptionStrings; - m_ScaleOptionStrings.Add(_("fit in page")); - m_ScaleOptionStrings.Add(_("Scale 0.5")); - m_ScaleOptionStrings.Add(_("Scale 0.7")); - m_ScaleOptionStrings.Add(_("Approx. Scale 1")); - m_ScaleOptionStrings.Add(_("Accurate Scale 1")); - m_ScaleOptionStrings.Add(_("Scale 1.4")); - m_ScaleOptionStrings.Add(_("Scale 2")); - m_ScaleOptionStrings.Add(_("Scale 3")); - m_ScaleOptionStrings.Add(_("Scale 4")); - m_ScaleOption = new wxRadioBox( itemDialog1, ID_SET_PRINT_SCALE, _("Approx. Scale:"), wxDefaultPosition, wxDefaultSize, m_ScaleOptionStrings, 1, wxRA_SPECIFY_COLS ); - m_ScaleOption->SetSelection(0); - m_ScaleBoxSizer->Add(m_ScaleOption, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - - m_FineAdjustXscaleTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("X Scale Adjust"), wxDefaultPosition, wxDefaultSize, 0 ); - m_ScaleBoxSizer->Add(m_FineAdjustXscaleTitle, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - - m_FineAdjustXscaleOpt = new wxTextCtrl( itemDialog1, ID_TEXTCTRL, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); - m_ScaleBoxSizer->Add(m_FineAdjustXscaleOpt, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); - - m_FineAdjustYscaleTitle = new wxStaticText( itemDialog1, wxID_STATIC, _("Y Scale Adjust"), wxDefaultPosition, wxDefaultSize, 0 ); - m_ScaleBoxSizer->Add(m_FineAdjustYscaleTitle, 0, wxGROW|wxLEFT|wxRIGHT|wxTOP|wxADJUST_MINSIZE, 5); - - m_FineAdjustYscaleOpt = new wxTextCtrl( itemDialog1, ID_TEXTCTRL1, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); - m_ScaleBoxSizer->Add(m_FineAdjustYscaleOpt, 0, wxGROW|wxLEFT|wxRIGHT|wxBOTTOM, 5); - - m_FullDialogBowSizer->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - - wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxVERTICAL); - m_FullDialogBowSizer->Add(itemBoxSizer15, 0, wxGROW|wxALL, 5); - - m_OptionsBoxSizer = new wxStaticBox(itemDialog1, wxID_ANY, _("Options:")); - wxStaticBoxSizer* itemStaticBoxSizer16 = new wxStaticBoxSizer(m_OptionsBoxSizer, wxVERTICAL); - itemBoxSizer15->Add(itemStaticBoxSizer16, 0, wxGROW|wxALL, 5); - - m_DialogPenWidthSizer = new wxBoxSizer(wxVERTICAL); - itemStaticBoxSizer16->Add(m_DialogPenWidthSizer, 0, wxGROW|wxALL, 5); - - m_Print_Sheet_Ref = new wxCheckBox( itemDialog1, ID_PRINT_REF, _("Print Sheet Ref"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_Print_Sheet_Ref->SetValue(false); - itemStaticBoxSizer16->Add(m_Print_Sheet_Ref, 0, wxGROW|wxALL, 5); - - m_Print_Mirror = new wxCheckBox( itemDialog1, ID_CHECK_PRINT_MIROR, _("Mirror"), wxDefaultPosition, wxDefaultSize, wxCHK_2STATE ); - m_Print_Mirror->SetValue(false); - itemStaticBoxSizer16->Add(m_Print_Mirror, 0, wxGROW|wxALL, 5); - - wxArrayString m_ColorOptionStrings; - m_ColorOptionStrings.Add(_("Color")); - m_ColorOptionStrings.Add(_("Black")); - m_ColorOption = new wxRadioBox( itemDialog1, ID_SET_BW, _("Color Print:"), wxDefaultPosition, wxDefaultSize, m_ColorOptionStrings, 1, wxRA_SPECIFY_COLS ); - m_ColorOption->SetSelection(0); - itemBoxSizer15->Add(m_ColorOption, 0, wxGROW|wxALL, 5); - - wxArrayString m_PagesOptionPcbStrings; - m_PagesOptionPcbStrings.Add(_("1 Page per Layer")); - m_PagesOptionPcbStrings.Add(_("Single Page")); - m_PagesOptionPcb = new wxRadioBox( itemDialog1, ID_PRINT_ALL_IN_ONE, _("Page Print:"), wxDefaultPosition, wxDefaultSize, m_PagesOptionPcbStrings, 1, wxRA_SPECIFY_COLS ); - m_PagesOptionPcb->SetSelection(0); - itemBoxSizer15->Add(m_PagesOptionPcb, 0, wxGROW|wxALL, 5); - - wxArrayString m_PagesOptionEeschemaStrings; - m_PagesOptionEeschemaStrings.Add(_("Current")); - m_PagesOptionEeschemaStrings.Add(_("All")); - m_PagesOptionEeschema = new wxRadioBox( itemDialog1, ID_PRINT_ALL, _("Page Print:"), wxDefaultPosition, wxDefaultSize, m_PagesOptionEeschemaStrings, 1, wxRA_SPECIFY_COLS ); - m_PagesOptionEeschema->SetSelection(0); - itemBoxSizer15->Add(m_PagesOptionEeschema, 0, wxGROW|wxALL, 5); - - m_FullDialogBowSizer->Add(5, 5, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5); - - m_ButtonsBoxSizer = new wxBoxSizer(wxVERTICAL); - m_FullDialogBowSizer->Add(m_ButtonsBoxSizer, 0, wxALIGN_TOP|wxALL, 5); - - m_ButtonsBoxSizer->Add(5, 5, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5); - - wxButton* itemButton26 = new wxButton( itemDialog1, ID_PRINT_SETUP, _("Print S&etup"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton26->SetForegroundColour(wxColour(121, 118, 0)); - m_ButtonsBoxSizer->Add(itemButton26, 0, wxGROW|wxALL, 5); - - wxButton* itemButton27 = new wxButton( itemDialog1, ID_PRINT_PREVIEW, _("Pre&view"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton27->SetForegroundColour(wxColour(0, 0, 196)); - m_ButtonsBoxSizer->Add(itemButton27, 0, wxGROW|wxALL, 5); - - wxButton* itemButton28 = new wxButton( itemDialog1, ID_PRINT_EXECUTE, _("&Print"), wxDefaultPosition, wxDefaultSize, 0 ); - itemButton28->SetForegroundColour(wxColour(0, 128, 64)); - m_ButtonsBoxSizer->Add(itemButton28, 0, wxGROW|wxALL, 5); - - m_CloseButton = new wxButton( itemDialog1, wxID_CANCEL, _("&Close"), wxDefaultPosition, wxDefaultSize, 0 ); - m_CloseButton->SetDefault(); - m_ButtonsBoxSizer->Add(m_CloseButton, 0, wxGROW|wxALL, 5); - - // Set validators - m_ScaleOption->SetValidator( wxGenericValidator(& s_Scale_Select) ); - m_Print_Sheet_Ref->SetValidator( wxGenericValidator(& s_Print_Sheet_Ref) ); - m_Print_Mirror->SetValidator( wxGenericValidator(& s_PrintMirror) ); - m_PagesOptionPcb->SetValidator( wxGenericValidator(& s_OptionPrintPage) ); - m_PagesOptionEeschema->SetValidator( wxGenericValidator(& s_OptionPrintPage) ); -////@end WinEDA_PrintFrame content construction - - SetFocus( ); // add this line to close dialog by the escape key - - m_DialogPenWidth = new WinEDA_ValueCtrl(this, _("Pen width mini"), g_PlotLine_Width, - g_UnitMetric, m_DialogPenWidthSizer, m_Parent->m_InternalUnits); - - SetOthersDatas(); -} - -/*! - * Should we show tooltips? - */ - -bool WinEDA_PrintFrame::ShowToolTips() -{ - return true; -} - -/*! - * Get bitmap resources - */ - -wxBitmap WinEDA_PrintFrame::GetBitmapResource( const wxString& name ) -{ - // Bitmap retrieval -////@begin WinEDA_PrintFrame bitmap retrieval - wxUnusedVar(name); - return wxNullBitmap; -////@end WinEDA_PrintFrame bitmap retrieval -} - -/*! - * Get icon resources - */ - -wxIcon WinEDA_PrintFrame::GetIconResource( const wxString& name ) -{ - // Icon retrieval -////@begin WinEDA_PrintFrame icon retrieval - wxUnusedVar(name); - return wxNullIcon; -////@end WinEDA_PrintFrame icon retrieval -} -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PRINT_SETUP - */ - -void WinEDA_PrintFrame::OnPrintSetupClick( wxCommandEvent& event ) -{ - OnPrintSetup(event); -} - -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PRINT_PREVIEW - */ - -void WinEDA_PrintFrame::OnPrintPreviewClick( wxCommandEvent& event ) -{ - OnPrintPreview(event); -} - -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PRINT_EXECUTE - */ - -void WinEDA_PrintFrame::OnPrintExecuteClick( wxCommandEvent& event ) -{ - EDA_PrintPage(event); -} - -/*! - * wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CLOSE - */ - -void WinEDA_PrintFrame::OnCancelClick( wxCommandEvent& event ) -{ - OnClosePrintDialog(); -} - - -/*! - * wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_SET_PRINT_SCALE - */ - -void WinEDA_PrintFrame::OnSetPrintScaleSelected( wxCommandEvent& event ) -{ - SetScale(event); -} - - -/*! - * wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_SET_BW - */ - -void WinEDA_PrintFrame::OnSetBwSelected( wxCommandEvent& event ) -{ - SetColorOrBlack(event); -} - - diff --git a/share/dialog_print.h b/share/dialog_print.h deleted file mode 100644 index ac020ec277..0000000000 --- a/share/dialog_print.h +++ /dev/null @@ -1,165 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: dialog_print.h -// Purpose: -// Author: jean-pierre Charras -// Modified by: -// Created: 28/02/2006 18:30:16 -// RCS-ID: -// Copyright: License GNU -// Licence: -///////////////////////////////////////////////////////////////////////////// - -// Generated by DialogBlocks (unregistered), 28/02/2006 18:30:16 - -#ifndef _DIALOG_PRINT_H_ -#define _DIALOG_PRINT_H_ - -/*! - * Includes - */ - -////@begin includes -#include "wx/valgen.h" -////@end includes - -/*! - * Forward declarations - */ - -////@begin forward declarations -class wxBoxSizer; -////@end forward declarations - -/*! - * Control identifiers - */ - -////@begin control identifiers -#define ID_DIALOG 10000 -#define ID_EXCLUDE_EDGES_PCB 10005 -#define ID_SET_PRINT_SCALE 10004 -#define ID_TEXTCTRL 10009 -#define ID_TEXTCTRL1 10010 -#define ID_PRINT_REF 10006 -#define ID_CHECK_PRINT_MIROR 10011 -#define ID_SET_BW 10007 -#define ID_PRINT_ALL_IN_ONE 10008 -#define ID_PRINT_ALL 10008 -#define ID_PRINT_SETUP 10001 -#define ID_PRINT_PREVIEW 10002 -#define ID_PRINT_EXECUTE 10003 -#define SYMBOL_WINEDA_PRINTFRAME_STYLE wxCAPTION|wxSYSTEM_MENU|wxCLOSE_BOX|MAYBE_RESIZE_BORDER -#define SYMBOL_WINEDA_PRINTFRAME_TITLE _("Print") -#define SYMBOL_WINEDA_PRINTFRAME_IDNAME ID_DIALOG -#define SYMBOL_WINEDA_PRINTFRAME_SIZE wxSize(400, 300) -#define SYMBOL_WINEDA_PRINTFRAME_POSITION wxDefaultPosition -////@end control identifiers - -/*! - * Compatibility - */ - -#ifndef wxCLOSE_BOX -#define wxCLOSE_BOX 0x1000 -#endif - -/*! - * WinEDA_PrintFrame class declaration - */ - -class WinEDA_PrintFrame: public wxDialog -{ - DECLARE_DYNAMIC_CLASS( WinEDA_PrintFrame ) - DECLARE_EVENT_TABLE() - -public: - /// Constructors - WinEDA_PrintFrame( ); - WinEDA_PrintFrame( WinEDA_DrawFrame* parent, wxWindowID id = SYMBOL_WINEDA_PRINTFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PRINTFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PRINTFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PRINTFRAME_SIZE, long style = SYMBOL_WINEDA_PRINTFRAME_STYLE ); - - /// Creation - bool Create( wxWindow* parent, wxWindowID id = SYMBOL_WINEDA_PRINTFRAME_IDNAME, const wxString& caption = SYMBOL_WINEDA_PRINTFRAME_TITLE, const wxPoint& pos = SYMBOL_WINEDA_PRINTFRAME_POSITION, const wxSize& size = SYMBOL_WINEDA_PRINTFRAME_SIZE, long style = SYMBOL_WINEDA_PRINTFRAME_STYLE ); - - /// Creates the controls and sizers - void CreateControls(); - -////@begin WinEDA_PrintFrame event handler declarations - - /// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_SET_PRINT_SCALE - void OnSetPrintScaleSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_RADIOBOX_SELECTED event handler for ID_SET_BW - void OnSetBwSelected( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PRINT_SETUP - void OnPrintSetupClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PRINT_PREVIEW - void OnPrintPreviewClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_PRINT_EXECUTE - void OnPrintExecuteClick( wxCommandEvent& event ); - - /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL - void OnCancelClick( wxCommandEvent& event ); - -////@end WinEDA_PrintFrame event handler declarations - -////@begin WinEDA_PrintFrame member function declarations - - /// Retrieves bitmap resources - wxBitmap GetBitmapResource( const wxString& name ); - - /// Retrieves icon resources - wxIcon GetIconResource( const wxString& name ); -////@end WinEDA_PrintFrame member function declarations - - /// Should we show tooltips? - static bool ShowToolTips(); - - void OnClosePrintDialog(); - void OnPrintSetup(wxCommandEvent& event); - void OnPrintPreview(wxCommandEvent& event); - void EDA_PrintPage(wxCommandEvent& event); - void SetColorOrBlack(wxCommandEvent& event); - void SetScale(wxCommandEvent& event); - int SetLayerMaskFromListSelection(); - wxString BuildPrintTitle(); - void SetOthersDatas(); - void SetPenWidth(); - - -////@begin WinEDA_PrintFrame member variables - wxBoxSizer* m_FullDialogBowSizer; - wxBoxSizer* m_LeftBoxSizer; - wxBoxSizer* m_LayersSelectionsBoxSizer; - wxBoxSizer* m_CopperLayersBoxSizer; - wxBoxSizer* m_TechLayersBoxSizer; - wxCheckBox* m_Exclude_Edges_Pcb; - wxBoxSizer* m_ScaleBoxSizer; - wxRadioBox* m_ScaleOption; - wxStaticText* m_FineAdjustXscaleTitle; - wxTextCtrl* m_FineAdjustXscaleOpt; - wxStaticText* m_FineAdjustYscaleTitle; - wxTextCtrl* m_FineAdjustYscaleOpt; - wxStaticBox* m_OptionsBoxSizer; - wxBoxSizer* m_DialogPenWidthSizer; - wxCheckBox* m_Print_Sheet_Ref; - wxCheckBox* m_Print_Mirror; - wxRadioBox* m_ColorOption; - wxRadioBox* m_PagesOptionPcb; - wxRadioBox* m_PagesOptionEeschema; - wxBoxSizer* m_ButtonsBoxSizer; - wxButton* m_CloseButton; -////@end WinEDA_PrintFrame member variables - - WinEDA_DrawFrame * m_Parent; - wxRadioBox* m_PagesOption; - WinEDA_ValueCtrl * m_DialogPenWidth; - wxCheckBox * m_BoxSelecLayer[32]; - double m_XScaleAdjust, m_YScaleAdjust; - wxConfig * m_Config; -}; - -#endif - // _DIALOG_PRINT_H_ diff --git a/share/dialog_print.pjd b/share/dialog_print.pjd deleted file mode 100644 index 6087af416b..0000000000 --- a/share/dialog_print.pjd +++ /dev/null @@ -1,1681 +0,0 @@ - - -
- 0 - "" - "" - "" - "" - "" - 0 - 0 - 0 - 1 - 1 - 1 - 1 - 0 - "jean-pierre Charras" - "License GNU" - "" - 0 - 0 - "<All platforms>" - "<Any>" - "///////////////////////////////////////////////////////////////////////////// -// Name: %HEADER-FILENAME% -// Purpose: -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "///////////////////////////////////////////////////////////////////////////// -// Name: %SOURCE-FILENAME% -// Purpose: -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "///////////////////////////////////////////////////////////////////////////// -// Name: %SYMBOLS-FILENAME% -// Purpose: Symbols file -// Author: %AUTHOR% -// Modified by: -// Created: %DATE% -// RCS-ID: -// Copyright: %COPYRIGHT% -// Licence: -///////////////////////////////////////////////////////////////////////////// - -" - "#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma interface "%HEADER-FILENAME%" -#endif - -" - "#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "%HEADER-FILENAME%" -#endif - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include "wx/wx.h" -#endif - -" - " /// %BODY% -" - " -/*! - * %BODY% - */ - -" - "app_resources.h" - "app_resources.cpp" - "AppResources" - "app.h" - "app.cpp" - "Application" - 0 - "" - "<None>" - "<System>" - "utf-8" - "<System>" - "" - 0 - 0 - 4 - " " - "" - 0 - 0 - 1 - 0 - 1 - 1 - 0 - 1 - 0 -
- - - "" - "data-document" - "" - "" - 0 - 1 - 0 - 0 - - "Configurations" - "config-data-document" - "" - "" - 0 - 1 - 0 - 0 - "" - 1 - 0 - "" - "Debug" - "ANSI" - "Static" - "Modular" - "GUI" - "wxMSW" - "Dynamic" - "Yes" - "No" - "No" - "%WXVERSION%" - "%EXECUTABLE%" - "" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - "%AUTO%" - 0 - 1 - - - - - - - "Projects" - "root-document" - "" - "project" - 1 - 1 - 0 - 1 - - "Windows" - "html-document" - "" - "dialogsfolder" - 1 - 1 - 0 - 1 - - "Print" - "dialog-document" - "" - "dialog" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbDialogProxy" - 10000 - 0 - "" - 0 - "" - 0 - 0 - "ID_DIALOG" - 10000 - "WinEDA_PrintFrame" - "wxDialog" - "wxDialog" - "dialog_print.cpp" - "dialog_print.h" - "" - "Print" - 1 - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "Tiled" - 0 - 1 - 0 - 1 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - "MAYBE_RESIZE_BORDER" - 0 - 1 - -1 - -1 - 400 - 300 - 0 - "" - - "wxBoxSizer H" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "wbBoxSizerProxy" - "Horizontal" - "m_FullDialogBowSizer" - 0 - 0 - 0 - "<Any platform>" - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/8/2008" - "wbBoxSizerProxy" - "Vertical" - "m_LeftBoxSizer" - "Centre" - "Expand" - 0 - 5 - 0 - 0 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxBoxSizer H" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/8/2008" - "wbBoxSizerProxy" - "Horizontal" - "m_LayersSelectionsBoxSizer" - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/8/2008" - "wbBoxSizerProxy" - "Vertical" - "m_CopperLayersBoxSizer" - "Centre" - "Top" - 0 - 5 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "25/8/2008" - "wbBoxSizerProxy" - "Vertical" - "m_TechLayersBoxSizer" - "Centre" - "Top" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - - "wxCheckBox: ID_EXCLUDE_EDGES_PCB" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "25/8/2008" - "wbCheckBoxProxy" - "ID_EXCLUDE_EDGES_PCB" - 10005 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_Exclude_Edges_Pcb" - "Exclude Edges_Pcb Layer" - 0 - "" - "Exclude contents of Edges_Pcb layer from all other layers" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 1 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbBoxSizerProxy" - "Vertical" - "m_ScaleBoxSizer" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxRadioBox: ID_SET_PRINT_SCALE" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbRadioBoxProxy" - "wxEVT_COMMAND_RADIOBOX_SELECTED|OnSetPrintScaleSelected" - "ID_SET_PRINT_SCALE" - 10004 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_ScaleOption" - "Approx. Scale:" - 1 - "fit in page|Scale 0.5|Scale 0.7|Approx. Scale 1|Accurate Scale 1|Scale 1.4|Scale 2|Scale 3|Scale 4" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "s_Scale_Select" - "wxGenericValidator(& %VARIABLE%)" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Centre" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxStaticText: wxID_STATIC" - "dialog-control-document" - "" - "statictext" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbStaticTextProxy" - "wxID_STATIC" - 5105 - "" - "wxStaticText" - "wxStaticText" - 1 - 0 - "" - "" - "m_FineAdjustXscaleTitle" - "X Scale Adjust" - -1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - "" - "" - - - "wxTextCtrl: ID_TEXTCTRL" - "dialog-control-document" - "" - "textctrl" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbTextCtrlProxy" - "ID_TEXTCTRL" - 10009 - "" - "wxTextCtrl" - "wxTextCtrl" - 1 - 0 - "" - "" - "m_FineAdjustXscaleOpt" - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - - - "wxStaticText: wxID_STATIC" - "dialog-control-document" - "" - "statictext" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbStaticTextProxy" - "wxID_STATIC" - 5105 - "" - "wxStaticText" - "wxStaticText" - 1 - 0 - "" - "" - "m_FineAdjustYscaleTitle" - "Y Scale Adjust" - -1 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - "" - "" - - - "wxTextCtrl: ID_TEXTCTRL1" - "dialog-control-document" - "" - "textctrl" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbTextCtrlProxy" - "ID_TEXTCTRL1" - 10010 - "" - "wxTextCtrl" - "wxTextCtrl" - 1 - 0 - "" - "" - "m_FineAdjustYscaleOpt" - "" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 0 - 1 - 0 - 0 - 0 - "" - "" - - - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "28/3/2006" - "wbSpacerProxy" - 5 - 5 - "Centre" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbBoxSizerProxy" - "Vertical" - "" - "Centre" - "Expand" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxStaticBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "13/1/2007" - "wbStaticBoxSizerProxy" - "wxID_ANY" - -1 - "Options:" - "m_OptionsBoxSizer" - "" - "" - "" - 0 - 1 - "wxStaticBox" - "Vertical" - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "24/1/2007" - "wbBoxSizerProxy" - "Vertical" - "m_DialogPenWidthSizer" - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxCheckBox: ID_PRINT_REF" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "13/1/2007" - "wbCheckBoxProxy" - "ID_PRINT_REF" - 10006 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_Print_Sheet_Ref" - "Print Sheet Ref" - 0 - "" - "" - "s_Print_Sheet_Ref" - "wxGenericValidator(& %VARIABLE%)" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxCheckBox: ID_CHECK_PRINT_MIROR" - "dialog-control-document" - "" - "checkbox" - 0 - 1 - 0 - 0 - "13/1/2007" - "wbCheckBoxProxy" - "ID_CHECK_PRINT_MIROR" - 10011 - "" - "wxCheckBox" - "wxCheckBox" - 1 - 0 - "" - "" - "m_Print_Mirror" - "Mirror" - 0 - "" - "" - "s_PrintMirror" - "wxGenericValidator(& %VARIABLE%)" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 1 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "wxRadioBox: ID_SET_BW" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbRadioBoxProxy" - "wxEVT_COMMAND_RADIOBOX_SELECTED|OnSetBwSelected" - "ID_SET_BW" - 10007 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_ColorOption" - "Color Print:" - 1 - "Color|Black" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxRadioBox: ID_PRINT_ALL_IN_ONE" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbRadioBoxProxy" - "ID_PRINT_ALL_IN_ONE" - 10008 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_PagesOptionPcb" - "Page Print:" - 1 - "1 Page per Layer|Single Page" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "s_OptionPrintPage" - "wxGenericValidator(& %VARIABLE%)" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxRadioBox: ID_PRINT_ALL" - "dialog-control-document" - "" - "radiobox" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbRadioBoxProxy" - "ID_PRINT_ALL" - 10008 - "" - "wxRadioBox" - "wxRadioBox" - 1 - 0 - "" - "" - "m_PagesOptionEeschema" - "Page Print:" - 1 - "Current|All" - 0 - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - "s_OptionPrintPage" - "wxGenericValidator(& %VARIABLE%)" - "" - "" - "" - "" - "" - 0 - 1 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "28/3/2006" - "wbSpacerProxy" - 5 - 5 - "Centre" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxBoxSizer V" - "dialog-control-document" - "" - "sizer" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbBoxSizerProxy" - "Vertical" - "m_ButtonsBoxSizer" - "Centre" - "Top" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - "Spacer" - "dialog-control-document" - "" - "spacer" - 0 - 1 - 0 - 0 - "28/3/2006" - "wbSpacerProxy" - 5 - 5 - "Centre" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "<Any platform>" - - - "wxButton: ID_PRINT_SETUP" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnPrintSetupClick" - "ID_PRINT_SETUP" - 10001 - "" - "wxButton" - "wxButton" - 1 - 0 - "" - "" - "" - "Print S&etup" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "797600" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxButton: ID_PRINT_PREVIEW" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnPrintPreviewClick" - "ID_PRINT_PREVIEW" - 10002 - "" - "wxButton" - "wxButton" - 1 - 0 - "" - "" - "" - "Pre&view" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "0000C4" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxButton: ID_PRINT_EXECUTE" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnPrintExecuteClick" - "ID_PRINT_EXECUTE" - 10003 - "" - "wxButton" - "wxButton" - 1 - 0 - "" - "" - "" - "&Print" - 0 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "008040" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - "wxButton: wxID_CANCEL" - "dialog-control-document" - "" - "dialogcontrol" - 0 - 1 - 0 - 0 - "28/12/2006" - "wbButtonProxy" - "wxEVT_COMMAND_BUTTON_CLICKED|OnCancelClick|||WinEDA_PrintFrame" - "wxID_CANCEL" - 5101 - "" - "wxButton" - "wxButton" - 1 - 0 - "" - "" - "m_CloseButton" - "&Close" - 1 - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - "" - 0 - 1 - "<Any platform>" - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - 0 - "" - -1 - -1 - -1 - -1 - "Expand" - "Centre" - 0 - 5 - 1 - 1 - 1 - 1 - 0 - 0 - 0 - "" - "" - - - - - - - "Sources" - "html-document" - "" - "sourcesfolder" - 1 - 1 - 0 - 1 - - "dialog_print.rc" - "source-editor-document" - "dialog_print.rc" - "source-editor" - 0 - 0 - 1 - 0 - "28/12/2006" - "" - - - - "Images" - "html-document" - "" - "bitmapsfolder" - 1 - 1 - 0 - 1 - - - - -