From 625e964c8dd9a2e3cada284e6e58cb0ea1e21aff Mon Sep 17 00:00:00 2001 From: Alexander Zakamaldin Date: Mon, 26 Mar 2012 16:45:05 -0500 Subject: [PATCH] Alexander's patches, with refinements --- AUTHORS.txt | 1 + common/class_page_info.cpp | 165 ++++-- common/common.cpp | 13 + common/common_plotPS_functions.cpp | 19 + common/dialogs/dialog_page_settings.cpp | 559 ++++++++++++++---- common/dialogs/dialog_page_settings.h | 85 ++- common/dialogs/dialog_page_settings_base.cpp | 195 ++++-- common/dialogs/dialog_page_settings_base.fbp | 511 ++++++++++------ common/dialogs/dialog_page_settings_base.h | 77 ++- common/worksheet.cpp | 516 ++++++++-------- eeschema/dialogs/dialog_plot_schematic_PS.cpp | 2 + .../dialogs/dialog_print_using_printer.cpp | 23 + eeschema/eeschema_config.cpp | 4 +- eeschema/load_one_schematic_file.cpp | 8 +- eeschema/sch_screen.cpp | 2 +- eeschema/schframe.cpp | 12 +- include/common.h | 137 ++++- include/plot_common.h | 2 + include/worksheet.h | 126 ++-- include/wxstruct.h | 29 +- pcbnew/CMakeLists.txt | 4 +- pcbnew/class_board.cpp | 1 + pcbnew/dialogs/dialog_print_using_printer.cpp | 63 +- pcbnew/plot_rtn.cpp | 14 +- 24 files changed, 1732 insertions(+), 836 deletions(-) diff --git a/AUTHORS.txt b/AUTHORS.txt index a672e3242f..bb57f39e50 100644 --- a/AUTHORS.txt +++ b/AUTHORS.txt @@ -17,6 +17,7 @@ Marco Serantoni (OSX maintener) Rok Markovic Tim Hanson Vesa Solonen +Alexander Zakamaldin See also CHANGELOG.txt for contributors. diff --git a/common/class_page_info.cpp b/common/class_page_info.cpp index edd6749355..ad3665bdae 100644 --- a/common/class_page_info.cpp +++ b/common/class_page_info.cpp @@ -25,34 +25,60 @@ #include - -const wxString PAGE_INFO::Custom( wxT( "User" ) ); - -// Standard page sizes in mils, all constants - -// A4 see: https://lists.launchpad.net/kicad-developers/msg07389.html -#if defined(KICAD_GOST) -const PAGE_INFO PAGE_INFO::pageA4( wxSize( 8268, 11693 ), wxT( "A4" ) ); +// late arriving wxPAPER_A0, wxPAPER_A1 +#if wxABI_VERSION >= 20999 + #define PAPER_A0 wxPAPER_A0 + #define PAPER_A1 wxPAPER_A1 #else -const PAGE_INFO PAGE_INFO::pageA4( wxSize( 11693, 8268 ), wxT( "A4" ) ); + #define PAPER_A0 wxPAPER_A2 + #define PAPER_A1 wxPAPER_A2 #endif -const PAGE_INFO PAGE_INFO::pageA3( wxSize( 16535, 11700 ), wxT( "A3" ) ); -const PAGE_INFO PAGE_INFO::pageA2( wxSize( 23400, 16535 ), wxT( "A2" ) ); -const PAGE_INFO PAGE_INFO::pageA1( wxSize( 33070, 23400 ), wxT( "A1" ) ); -const PAGE_INFO PAGE_INFO::pageA0( wxSize( 46800, 33070 ), wxT( "A0" ) ); -const PAGE_INFO PAGE_INFO::pageA( wxSize( 11000, 8500 ), wxT( "A" ) ); -const PAGE_INFO PAGE_INFO::pageB( wxSize( 17000, 11000 ), wxT( "B" ) ); -const PAGE_INFO PAGE_INFO::pageC( wxSize( 22000, 17000 ), wxT( "C" ) ); -const PAGE_INFO PAGE_INFO::pageD( wxSize( 34000, 22000 ), wxT( "D" ) ); -const PAGE_INFO PAGE_INFO::pageE( wxSize( 44000, 34000 ), wxT( "E" ) ); -const PAGE_INFO PAGE_INFO::pageGERBER( wxSize( 32000, 32000 ), wxT( "GERBER" ) ); -const PAGE_INFO PAGE_INFO::pageUser( wxSize( 17000, 11000 ), Custom ); +// Standard paper sizes nicknames. +const wxString PAGE_INFO::A4( wxT( "A4" ) ); +const wxString PAGE_INFO::A3( wxT( "A3" ) ); +const wxString PAGE_INFO::A2( wxT( "A2" ) ); +const wxString PAGE_INFO::A1( wxT( "A1" ) ); +const wxString PAGE_INFO::A0( wxT( "A0" ) ); +const wxString PAGE_INFO::A( wxT( "A" ) ); +const wxString PAGE_INFO::B( wxT( "B" ) ); +const wxString PAGE_INFO::C( wxT( "C" ) ); +const wxString PAGE_INFO::D( wxT( "D" ) ); +const wxString PAGE_INFO::E( wxT( "E" ) ); +const wxString PAGE_INFO::GERBER( wxT( "GERBER" ) ); +const wxString PAGE_INFO::USLetter( wxT( "USLetter" ) ); +const wxString PAGE_INFO::USLegal( wxT( "USLegal" ) ); +const wxString PAGE_INFO::USLedger( wxT( "USLedger" ) ); +const wxString PAGE_INFO::Custom( wxT( "User" ) ); + + +// Standard page sizes in mils, all constants +// see: https://lists.launchpad.net/kicad-developers/msg07389.html +// also see: wx/defs.h + +// local readability macro for millimeter wxSize +#define MMsize( x, y ) wxSize( Mm2mils( x ), Mm2mils( y ) ) + +// All MUST be defined as landscape. If IsGOST() is true, A4 is dynamically rotated later. +const PAGE_INFO PAGE_INFO::pageA4( MMsize( 297, 210 ), wxT( "A4" ), wxPAPER_A4 ); +const PAGE_INFO PAGE_INFO::pageA3( MMsize( 420, 297 ), wxT( "A3" ), wxPAPER_A3 ); +const PAGE_INFO PAGE_INFO::pageA2( MMsize( 594, 420 ), wxT( "A2" ), wxPAPER_A2 ); +const PAGE_INFO PAGE_INFO::pageA1( MMsize( 841, 594 ), wxT( "A1" ), PAPER_A1 ); +const PAGE_INFO PAGE_INFO::pageA0( MMsize( 1189, 841 ), wxT( "A0" ), PAPER_A0 ); + +const PAGE_INFO PAGE_INFO::pageA( wxSize( 11000, 8500 ), wxT( "A" ), wxPAPER_LETTER ); +const PAGE_INFO PAGE_INFO::pageB( wxSize( 17000, 11000 ), wxT( "B" ), wxPAPER_TABLOID ); +const PAGE_INFO PAGE_INFO::pageC( wxSize( 22000, 17000 ), wxT( "C" ), wxPAPER_CSHEET ); +const PAGE_INFO PAGE_INFO::pageD( wxSize( 34000, 22000 ), wxT( "D" ), wxPAPER_DSHEET ); +const PAGE_INFO PAGE_INFO::pageE( wxSize( 44000, 34000 ), wxT( "E" ), wxPAPER_ESHEET ); + +const PAGE_INFO PAGE_INFO::pageGERBER( wxSize( 32000, 32000 ), wxT( "GERBER" ), wxPAPER_NONE ); +const PAGE_INFO PAGE_INFO::pageUser( wxSize( 17000, 11000 ), Custom, wxPAPER_NONE ); // US paper sizes -const PAGE_INFO PAGE_INFO::pageUSLetter( wxSize( 11000, 8500 ), wxT( "USLetter" ) ); -const PAGE_INFO PAGE_INFO::pageUSLegal( wxSize( 14000, 8500 ), wxT( "USLegal" ) ); -const PAGE_INFO PAGE_INFO::pageUSLedger( wxSize( 17000, 11000 ), wxT( "USLedger" ) ); +const PAGE_INFO PAGE_INFO::pageUSLetter( wxSize( 11000, 8500 ), wxT( "USLetter" ), wxPAPER_LETTER ); +const PAGE_INFO PAGE_INFO::pageUSLegal( wxSize( 14000, 8500 ), wxT( "USLegal" ), wxPAPER_LEGAL ); +const PAGE_INFO PAGE_INFO::pageUSLedger( wxSize( 17000, 11000 ), wxT( "USLedger" ), wxPAPER_TABLOID ); // Custom paper size for next instantiation of type "User" int PAGE_INFO::s_user_width = 17000; @@ -96,45 +122,52 @@ inline void PAGE_INFO::updatePortrait() } +void PAGE_INFO::setMargins() +{ + if( IsGOST() ) + { + m_left_margin = Mm2mils( 20 ); // 20mm + m_right_margin = // 5mm + m_top_margin = // 5mm + m_bottom_margin = Mm2mils( 5 ); // 5mm + } + else + { + m_left_margin = + m_right_margin = + m_top_margin = + m_bottom_margin = 400; + } +} -PAGE_INFO::PAGE_INFO( const wxSize& aSizeMils, const wxString& aType ) : + +PAGE_INFO::PAGE_INFO( const wxSize& aSizeMils, const wxString& aType, wxPaperSize aPaperId ) : m_type( aType ), - m_size( aSizeMils ) + m_size( aSizeMils ), + m_paper_id( aPaperId ) { - -#if defined(KICAD_GOST) -/* -#define GOST_LEFTMARGIN 800 // 20mm -#define GOST_RIGHTMARGIN 200 // 5mm -#define GOST_TOPMARGIN 200 // 5mm -#define GOST_BOTTOMMARGIN 200 // 5mm -*/ - - m_left_margin = 800; // 20mm - m_right_margin = 200; // 5mm - m_top_margin = 200; // 5mm - m_bottom_margin = 200; // 5mm -#else - m_left_margin = - m_right_margin = - m_top_margin = - m_bottom_margin = 400; -#endif - updatePortrait(); + + setMargins(); + + // This constructor is protected, and only used by const PAGE_INFO's known + // only to class implementation, so no further changes to "this" object are + // expected. Therefore we should also setMargin() again when copying this + // object in SetType() so that a runtime IsGOST() change does not break. } -PAGE_INFO::PAGE_INFO( const wxString& aType ) +PAGE_INFO::PAGE_INFO( const wxString& aType, bool IsPortrait ) { - SetType( aType ); + SetType( aType, IsPortrait ); } -bool PAGE_INFO::SetType( const wxString& aType ) +bool PAGE_INFO::SetType( const wxString& aType, bool IsPortrait ) { bool rc = true; + // all are landscape initially if( aType == pageA4.GetType() ) *this = pageA4; else if( aType == pageA3.GetType() ) @@ -178,6 +211,15 @@ bool PAGE_INFO::SetType( const wxString& aType ) else rc = false; + if( IsPortrait ) + { + // all private PAGE_INFOs are landscape, must swap x and y + m_size = wxSize( m_size.y, m_size.x ); + updatePortrait(); + } + + setMargins(); + return rc; } @@ -218,6 +260,7 @@ static int clampWidth( int aWidthInMils ) static int clampHeight( int aHeightInMils ) { /* was giving EESCHEMA single component SVG plotter grief + clamping is best done at the UI, i.e. dialog, levels if( aHeightInMils < 4000 ) aHeightInMils = 4000; else if( aHeightInMils > 44000 ) @@ -227,13 +270,13 @@ static int clampHeight( int aHeightInMils ) } -void PAGE_INFO::SetUserWidthMils( int aWidthInMils ) +void PAGE_INFO::SetCustomWidthMils( int aWidthInMils ) { s_user_width = clampWidth( aWidthInMils ); } -void PAGE_INFO::SetUserHeightMils( int aHeightInMils ) +void PAGE_INFO::SetCustomHeightMils( int aHeightInMils ) { s_user_height = clampHeight( aHeightInMils ); } @@ -241,14 +284,28 @@ void PAGE_INFO::SetUserHeightMils( int aHeightInMils ) void PAGE_INFO::SetWidthMils( int aWidthInMils ) { - m_size.x = clampWidth( aWidthInMils ); - updatePortrait(); + if( m_size.x != aWidthInMils ) + { + m_size.x = clampWidth( aWidthInMils ); + + m_type = Custom; + m_paper_id = wxPAPER_NONE; + + updatePortrait(); + } } void PAGE_INFO::SetHeightMils( int aHeightInMils ) { - m_size.y = clampHeight( aHeightInMils ); - updatePortrait(); + if( m_size.y != aHeightInMils ) + { + m_size.y = clampHeight( aHeightInMils ); + + m_type = Custom; + m_paper_id = wxPAPER_NONE; + + updatePortrait(); + } } diff --git a/common/common.cpp b/common/common.cpp index 573e2ecf86..db77f54ab3 100644 --- a/common/common.cpp +++ b/common/common.cpp @@ -57,6 +57,19 @@ EDA_UNITS_T g_UserUnit; int g_GhostColor; + +#if defined(KICAD_GOST) +static bool s_gost = true; +#else +static bool s_gost = false; +#endif + +bool IsGOST() +{ + return s_gost; +} + + /** * The predefined colors used in KiCad. * Please: if you change a value, remember these values are carefully chosen diff --git a/common/common_plotPS_functions.cpp b/common/common_plotPS_functions.cpp index 0aee2ce25d..8a6ab009b4 100644 --- a/common/common_plotPS_functions.cpp +++ b/common/common_plotPS_functions.cpp @@ -604,3 +604,22 @@ void PS_PLOTTER::flash_pad_trapez( wxPoint aPadPos, wxPoint aCorners[4], cornerList.push_back( cornerList[0] ); PlotPoly( cornerList, ( aTrace_Mode == FILLED ) ? FILLED_SHAPE : NO_FILL ); } + + +void PS_PLOTTER::user_to_device_coordinates( wxPoint& pos ) +{ + if( pageInfo.IsPortrait() ) + { + pos.y = (int) ( ( paper_size.y - ( pos.y - plot_offset.y ) + * plot_scale ) * device_scale ); + + if( plotMirror ) + pos.x = (int) ( ( paper_size.x - ( pos.x - plot_offset.x ) + * plot_scale ) * device_scale ); + else + pos.x = (int) ( (pos.x - plot_offset.x) * plot_scale * device_scale ); + } + else + PLOTTER::user_to_device_coordinates( pos ); +} + diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp index 00dd68bc0a..052e675c8b 100644 --- a/common/dialogs/dialog_page_settings.cpp +++ b/common/dialogs/dialog_page_settings.cpp @@ -1,15 +1,34 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 1992-2010 Kicad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + /** * @file dialog_page_settings.cpp */ -/* The "Page Settings" dialog box created by this file (and setpage.h) - * contains seven checkboxes which *are* shown when that dialog box is - * invoked in Eeschema, but which are *not* shown when that dialog box is - * invoked in Pcbnew instead. - */ - #include +#include // DIM() #include +#include #include #include #include @@ -43,11 +62,13 @@ void EDA_DRAW_FRAME::Process_PageSettings( wxCommandEvent& event ) DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) : DIALOG_PAGES_SETTINGS_BASE( parent ), - m_user_size( PAGE_INFO::Custom ) + m_initialized( false ) { m_Parent = parent; m_Screen = m_Parent->GetScreen(); m_modified = false; + m_page_bitmap = NULL; + m_tb = m_Parent->GetTitleBlock(); initDialog(); @@ -58,14 +79,16 @@ DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) : DIALOG_PAGES_SETTINGS::~DIALOG_PAGES_SETTINGS() { + if( m_page_bitmap ) + delete m_page_bitmap; } void DIALOG_PAGES_SETTINGS::initDialog() { wxString msg; - double userSizeX; - double userSizeY; + double customSizeX; + double customSizeY; SetFocus(); @@ -83,52 +106,38 @@ void DIALOG_PAGES_SETTINGS::initDialog() m_TextSheetNumber->Show(false); #endif - const PAGE_INFO& pageInfo = m_Parent->GetPageSettings(); - - if( !pageInfo.IsCustom() ) - m_orientationComboBox->SetSelection( pageInfo.IsPortrait() ); - - setCurrentPageSizeSelection( pageInfo.GetType() ); + m_pageInfo = m_Parent->GetPageSettings(); + SetCurrentPageSizeSelection( m_pageInfo.GetType() ); + m_orientationComboBox->SetSelection( m_pageInfo.IsPortrait() ); // only a click fires the "selection changed" event, so have to fabricate this check wxCommandEvent dummy; - onPaperSizeChoice( dummy ); + OnPaperSizeChoice( dummy ); switch( g_UserUnit ) { case MILLIMETRES: - userSizeX = m_user_size.GetWidthMils() * 25.4e-3; - userSizeY = m_user_size.GetHeightMils() * 25.4e-3; + customSizeX = m_pageInfo.GetCustomWidthMils() * 25.4e-3; + customSizeY = m_pageInfo.GetCustomHeightMils()* 25.4e-3; - msg.Printf( wxT( "%.2f" ), userSizeX ); + msg.Printf( wxT( "%.2f" ), customSizeX ); m_TextUserSizeX->SetValue( msg ); - msg.Printf( wxT( "%.2f" ), userSizeY ); + msg.Printf( wxT( "%.2f" ), customSizeY ); m_TextUserSizeY->SetValue( msg ); break; default: case INCHES: - userSizeX = m_user_size.GetWidthMils() / 1000.0; - userSizeY = m_user_size.GetHeightMils() / 1000.0; + customSizeX = m_pageInfo.GetCustomWidthMils() / 1000.0; + customSizeY = m_pageInfo.GetCustomHeightMils() / 1000.0; - msg.Printf( wxT( "%.3f" ), userSizeX ); + msg.Printf( wxT( "%.3f" ), customSizeX ); m_TextUserSizeX->SetValue( msg ); - msg.Printf( wxT( "%.3f" ), userSizeY ); + msg.Printf( wxT( "%.3f" ), customSizeY ); m_TextUserSizeY->SetValue( msg ); break; - -/* // you want it in mils, why? - case UNSCALED_UNITS: - userSizeX = m_user_size.GetWidthMils(); - userSizeY = m_user_size.GetHeightMils(); - msg.Printf( wxT( "%f" ), m_userSizeX ); - m_TextUserSizeX->SetValue( msg ); - msg.Printf( wxT( "%f" ), m_userSizeY ); - m_TextUserSizeY->SetValue( msg ); - break; -*/ } #if 0 @@ -140,16 +149,13 @@ void DIALOG_PAGES_SETTINGS::initDialog() m_TextComment3->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire3 ) ); m_TextComment4->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire4 ) ); #else - - TITLE_BLOCK tb = m_Parent->GetTitleBlock(); - - m_TextRevision->SetValue( tb.GetRevision() ); - m_TextTitle->SetValue( tb.GetTitle() ); - m_TextCompany->SetValue( tb.GetCompany() ); - m_TextComment1->SetValue( tb.GetComment1() ); - m_TextComment2->SetValue( tb.GetComment2() ); - m_TextComment3->SetValue( tb.GetComment3() ); - m_TextComment4->SetValue( tb.GetComment4() ); + m_TextRevision->SetValue( m_tb.GetRevision() ); + m_TextTitle->SetValue( m_tb.GetTitle() ); + m_TextCompany->SetValue( m_tb.GetCompany() ); + m_TextComment1->SetValue( m_tb.GetComment1() ); + m_TextComment2->SetValue( m_tb.GetComment2() ); + m_TextComment3->SetValue( m_tb.GetComment3() ); + m_TextComment4->SetValue( m_tb.GetComment4() ); #endif #ifndef EESCHEMA @@ -162,8 +168,12 @@ void DIALOG_PAGES_SETTINGS::initDialog() m_Comment4Export->Show( false ); #endif + GetPageLayoutInfoFromDialog(); + UpdatePageLayoutExample(); + // Make the OK button the default. m_sdbSizer1OK->SetDefault(); + m_initialized = true; } @@ -204,9 +214,13 @@ void DIALOG_PAGES_SETTINGS::OnCloseWindow( wxCloseEvent& event ) void DIALOG_PAGES_SETTINGS::OnOkClick( wxCommandEvent& event ) { + m_save_flag = false; SavePageSettings( event ); + if( m_save_flag ) + { m_modified = true; Close( true ); + } } @@ -216,88 +230,233 @@ void DIALOG_PAGES_SETTINGS::OnCancelClick( wxCommandEvent& event ) } -void DIALOG_PAGES_SETTINGS::onPaperSizeChoice( wxCommandEvent& event ) +void DIALOG_PAGES_SETTINGS::OnPaperSizeChoice( wxCommandEvent& event ) { - if( m_paperSizeComboBox->GetStringSelection().Contains( PAGE_INFO::Custom ) ) + wxString paperType = m_paperSizeComboBox->GetStringSelection(); + if( paperType.Contains( PAGE_INFO::Custom ) ) { m_orientationComboBox->Enable( false ); + m_TextUserSizeX->Enable( true ); + m_TextUserSizeY->Enable( true ); } else { m_orientationComboBox->Enable( true ); + if( paperType.Contains( wxT( "A4" ) ) && IsGOST() ) + { + m_orientationComboBox->SetStringSelection( _( "Portrait" ) ); + m_orientationComboBox->Enable( false ); + } + m_TextUserSizeX->Enable( false ); + m_TextUserSizeY->Enable( false ); + } + GetPageLayoutInfoFromDialog(); + UpdatePageLayoutExample(); +} + + +void DIALOG_PAGES_SETTINGS::OnUserPageSizeXTextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextUserSizeX->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnUserPageSizeYTextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextUserSizeY->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnPageOrientationChoice( wxCommandEvent& event ) +{ + if( m_initialized ) + { + GetPageLayoutInfoFromDialog(); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnRevisionTextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextRevision->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetRevision( m_TextRevision->GetValue() ); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnTitleTextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextTitle->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetTitle( m_TextTitle->GetValue() ); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnCompanyTextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextCompany->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetCompany( m_TextCompany->GetValue() ); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnComment1TextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextComment1->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetComment1( m_TextComment1->GetValue() ); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnComment2TextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextComment2->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetComment2( m_TextComment2->GetValue() ); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnComment3TextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextComment3->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetComment3( m_TextComment3->GetValue() ); + UpdatePageLayoutExample(); + } +} + + +void DIALOG_PAGES_SETTINGS::OnComment4TextUpdated( wxCommandEvent& event ) +{ + if( m_initialized && m_TextComment4->IsModified() ) + { + GetPageLayoutInfoFromDialog(); + m_tb.SetComment4( m_TextComment4->GetValue() ); + UpdatePageLayoutExample(); } } void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event ) { - wxString msg; - double userSizeX; - double userSizeY; - TITLE_BLOCK tb; + bool retSuccess; - tb.SetRevision( m_TextRevision->GetValue() ); - tb.SetCompany( m_TextCompany->GetValue() ); - tb.SetTitle( m_TextTitle->GetValue() ); - tb.SetComment1( m_TextComment1->GetValue() ); - tb.SetComment2( m_TextComment2->GetValue() ); - tb.SetComment3( m_TextComment3->GetValue() ); - tb.SetComment4( m_TextComment4->GetValue() ); - - m_Parent->SetTitleBlock( tb ); - - msg = m_TextUserSizeX->GetValue(); - msg.ToDouble( &userSizeX ); - - msg = m_TextUserSizeY->GetValue(); - msg.ToDouble( &userSizeY ); - - switch( g_UserUnit ) - { - case MILLIMETRES: - PAGE_INFO::SetUserWidthMils( int( userSizeX * 1000.0 / 25.4 ) ); - PAGE_INFO::SetUserHeightMils( int( userSizeY * 1000.0 / 25.4 ) ); - break; - - default: - case INCHES: - PAGE_INFO::SetUserWidthMils( int( 1000 * userSizeX ) ); - PAGE_INFO::SetUserHeightMils( int( 1000 * userSizeY ) ); - break; - -/* // set in 1/1000ths of an inch, but why? - case UNSCALED_UNITS: - PAGE_INFO::SetUserWidthMils( (int) userSizeX ); - PAGE_INFO::SetUserHeightMils( (int) userSizeY ); - break; -*/ - } + m_save_flag = true; // wxFormBuilder must use "A4", "A3", etc for choices, in all languages/translations - wxString paperType = m_paperSizeComboBox->GetStringSelection(); - - // construct pageInfo _after_ user settings have been established in case the - // paperType is custom, otherwise User width and height will not go into effect right away. - PAGE_INFO pageInfo; + const wxString paperType = m_paperSizeComboBox->GetStringSelection(); + // here we assume translators will keep original paper size spellings if( paperType.Contains( PAGE_INFO::Custom ) ) { - pageInfo.SetType( PAGE_INFO::Custom ); + GetCustomSizeMilsFromDialog(); + + retSuccess = m_pageInfo.SetType( PAGE_INFO::Custom ); + if( retSuccess ) + { + if( m_layout_size.x < MIN_PAGE_SIZE || m_layout_size.y < MIN_PAGE_SIZE || + m_layout_size.x > MAX_PAGE_SIZE || m_layout_size.y > MAX_PAGE_SIZE ) + { + wxString msg = wxString::Format( _( "Selected custom paper size\nis out of the permissible \ +limits\n%.1f - %.1f %s!\nSelect another custom paper size?" ), + g_UserUnit == INCHES ? MIN_PAGE_SIZE / 1000. : MIN_PAGE_SIZE * 25.4 / 1000, + g_UserUnit == INCHES ? MAX_PAGE_SIZE / 1000. : MAX_PAGE_SIZE * 25.4 / 1000, + g_UserUnit == INCHES ? _( "inches" ) : _( "mm" ) ); + + if( wxMessageBox( msg, _( "Warning!" ), wxYES_NO | wxICON_EXCLAMATION, this ) == wxYES ) + { + m_save_flag = false; + return; + } + m_layout_size.x = Clamp( MIN_PAGE_SIZE, m_layout_size.x, MAX_PAGE_SIZE ); + m_layout_size.y = Clamp( MIN_PAGE_SIZE, m_layout_size.y, MAX_PAGE_SIZE ); + } + + PAGE_INFO::SetCustomWidthMils( m_layout_size.x ); + PAGE_INFO::SetCustomHeightMils( m_layout_size.y ); + } } else { - // here we assume translators will keep original paper size spellings - if( !pageInfo.SetType( paperType ) ) - { - wxASSERT_MSG( false, wxT( "the translation for paper size must preserve original spellings" ) ); - } + // search for longest common string first, e.g. A4 before A + if( paperType.Contains( PAGE_INFO::USLetter ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::USLetter ); + else if( paperType.Contains( PAGE_INFO::USLegal ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::USLegal ); + else if( paperType.Contains( PAGE_INFO::USLedger ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::USLedger ); + else if( paperType.Contains( PAGE_INFO::GERBER ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::GERBER ); + else if( paperType.Contains( PAGE_INFO::A4 ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::A4 ); + else if( paperType.Contains( PAGE_INFO::A3 ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::A3 ); + else if( paperType.Contains( PAGE_INFO::A2 ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::A2 ); + else if( paperType.Contains( PAGE_INFO::A1 ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::A1 ); + else if( paperType.Contains( PAGE_INFO::A0 ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::A0 ); + else if( paperType.Contains( PAGE_INFO::A ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::A ); + else if( paperType.Contains( PAGE_INFO::B ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::B ); + else if( paperType.Contains( PAGE_INFO::C ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::C ); + else if( paperType.Contains( PAGE_INFO::D ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::D ); + else if( paperType.Contains( PAGE_INFO::E ) ) + retSuccess = m_pageInfo.SetType( PAGE_INFO::E ); - // set portrait _after_ setting size/type above - int choice = m_orientationComboBox->GetSelection(); - pageInfo.SetPortrait( choice ); + if( retSuccess ) + { + int choice = m_orientationComboBox->GetSelection(); + m_pageInfo.SetPortrait( choice != 0 ); + } } - m_Parent->SetPageSettings( pageInfo ); + if( !retSuccess ) + { + wxASSERT_MSG( false, wxT( "the translation for paper size must preserve original spellings" ) ); + m_pageInfo.SetType( PAGE_INFO::A4 ); + } + + m_Parent->SetPageSettings( m_pageInfo ); + + m_tb.SetRevision( m_TextRevision->GetValue() ); + m_tb.SetCompany( m_TextCompany->GetValue() ); + m_tb.SetTitle( m_TextTitle->GetValue() ); + m_tb.SetComment1( m_TextComment1->GetValue() ); + m_tb.SetComment2( m_TextComment2->GetValue() ); + m_tb.SetComment3( m_TextComment3->GetValue() ); + m_tb.SetComment4( m_TextComment4->GetValue() ); + + m_Parent->SetTitleBlock( m_tb ); #ifdef EESCHEMA // Exports settings to other sheets if requested: @@ -315,25 +474,25 @@ void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event ) TITLE_BLOCK tb2 = screen->GetTitleBlock(); if( m_RevisionExport->IsChecked() ) - tb2.SetRevision( tb.GetRevision() ); + tb2.SetRevision( m_tb.GetRevision() ); if( m_TitleExport->IsChecked() ) - tb2.SetTitle( tb.GetTitle() ); + tb2.SetTitle( m_tb.GetTitle() ); if( m_CompanyExport->IsChecked() ) - tb2.SetCompany( tb.GetCompany() ); + tb2.SetCompany( m_tb.GetCompany() ); if( m_Comment1Export->IsChecked() ) - tb2.SetComment1( tb.GetComment1() ); + tb2.SetComment1( m_tb.GetComment1() ); if( m_Comment2Export->IsChecked() ) - tb2.SetComment2( tb.GetComment2() ); + tb2.SetComment2( m_tb.GetComment2() ); if( m_Comment3Export->IsChecked() ) - tb2.SetComment3( tb.GetComment3() ); + tb2.SetComment3( m_tb.GetComment3() ); if( m_Comment4Export->IsChecked() ) - tb2.SetComment4( tb.GetComment4() ); + tb2.SetComment4( m_tb.GetComment4() ); screen->SetTitleBlock( tb2 ); } @@ -345,12 +504,11 @@ void DIALOG_PAGES_SETTINGS::SavePageSettings( wxCommandEvent& event ) } -void DIALOG_PAGES_SETTINGS::setCurrentPageSizeSelection( const wxString& aPaperSize ) +void DIALOG_PAGES_SETTINGS::SetCurrentPageSizeSelection( const wxString& aPaperSize ) { - // use wxFormBuilder to store the sheet type in the wxRadioButton's label + // use wxChoice to store the sheet type in the wxChoice's choice // i.e. "A4", "A3", etc, anywhere within the text of the label. - - D(printf("m_paperSizeComboBox->GetCount() = %d\n", (int) m_paperSizeComboBox->GetCount() );) + // D(printf("m_paperSizeComboBox->GetCount() = %d\n", (int) m_paperSizeComboBox->GetCount() );) // search all the child wxRadioButtons for a label containing our paper type for( unsigned i = 0; i < m_paperSizeComboBox->GetCount(); ++i ) @@ -369,3 +527,178 @@ void DIALOG_PAGES_SETTINGS::setCurrentPageSizeSelection( const wxString& aPaperS } } + +void DIALOG_PAGES_SETTINGS::UpdatePageLayoutExample() +{ + int lyWidth, lyHeight; + + wxSize clamped_layout_size( Clamp( MIN_PAGE_SIZE, m_layout_size.x, MAX_PAGE_SIZE ), + Clamp( MIN_PAGE_SIZE, m_layout_size.y, MAX_PAGE_SIZE ) ); + + double lyRatio = clamped_layout_size.x < clamped_layout_size.y ? + (double) clamped_layout_size.y / clamped_layout_size.x : + (double) clamped_layout_size.x / clamped_layout_size.y; + + if( clamped_layout_size.x < clamped_layout_size.y ) + { + lyHeight = MAX_PAGE_EXAMPLE_SIZE; + lyWidth = wxRound( (double) lyHeight / lyRatio ); + } + else + { + lyWidth = MAX_PAGE_EXAMPLE_SIZE; + lyHeight = wxRound( (double) lyWidth / lyRatio ); + } + + if( m_page_bitmap ) + { + m_PageLayoutExampleBitmap->SetBitmap( wxNullBitmap ); + delete m_page_bitmap; + } + + m_page_bitmap = new wxBitmap( lyWidth + 1, lyHeight + 1 ); + if( m_page_bitmap->IsOk() ) + { + // Save current clip box and temporary expand it. + EDA_RECT save_clip_box = *m_Parent->GetCanvas()->GetClipBox(); + m_Parent->GetCanvas()->SetClipBox( EDA_RECT( wxPoint( 0, 0 ), + wxSize( INT_MAX / 2, INT_MAX / 2 ) ) ); + // Calculate layout preview scale. + int appScale = m_Parent->GetInternalUnits() / 1000; + double scaleW = (double) lyWidth / clamped_layout_size.x / appScale; + double scaleH = (double) lyHeight / clamped_layout_size.y / appScale; + + // Prepare DC. + wxSize example_size( lyWidth, lyHeight ); + wxMemoryDC memDC; + memDC.SetClippingRegion( wxPoint( 0, 0 ), example_size ); + memDC.SelectObject( *m_page_bitmap ); + memDC.Clear(); + memDC.SetUserScale( scaleW, scaleH ); + + // Get logical page size and margins. + PAGE_INFO pageDUMMY; + + pageDUMMY.SetWidthMils( clamped_layout_size.x ); + pageDUMMY.SetHeightMils( clamped_layout_size.y ); + + wxSize dummySize = pageDUMMY.GetSizeMils(); + wxPoint pointLeftTop( pageDUMMY.GetLeftMarginMils(), pageDUMMY.GetTopMarginMils() ); + wxPoint pointRightBottom( pageDUMMY.GetRightMarginMils(), pageDUMMY.GetBottomMarginMils() ); + + // Draw layout preview. + wxString emptyString; + GRResetPenAndBrush( ( wxDC* ) &memDC ); + + m_Parent->TraceWorkSheet( (wxDC*) &memDC, dummySize, pointLeftTop, pointRightBottom, + emptyString, emptyString, m_tb, m_Screen->m_NumberOfScreen, + m_Screen->m_ScreenNumber, 1, LIGHTGRAY, RED ); + + memDC.SelectObject( wxNullBitmap ); + m_PageLayoutExampleBitmap->SetBitmap( *m_page_bitmap ); + + // Restore current clip box. + m_Parent->GetCanvas()->SetClipBox( save_clip_box ); + + // Refresh the dialog. + Layout(); + Refresh(); + } +} + + +void DIALOG_PAGES_SETTINGS::GetPageLayoutInfoFromDialog() +{ + // wxFormBuilder must use "A4", "A3", etc for choices, in all languages/translations + const wxString paperType = m_paperSizeComboBox->GetStringSelection(); + + // here we assume translators will keep original paper size spellings + if( paperType.Contains( PAGE_INFO::Custom ) ) + { + GetCustomSizeMilsFromDialog(); + if( m_layout_size.x && m_layout_size.y ) + { + if( m_layout_size.x < m_layout_size.y ) + m_orientationComboBox->SetStringSelection( _( "Portrait" ) ); + else + m_orientationComboBox->SetStringSelection( _( "Landscape" ) ); + } + } + else + { + PAGE_INFO pageInfo; // SetType() later to lookup size + + static const wxString* papers[] = { + // longest common string first, since sequential search below + &PAGE_INFO::A4, + &PAGE_INFO::A3, + &PAGE_INFO::A2, + &PAGE_INFO::A1, + &PAGE_INFO::A0, + &PAGE_INFO::A, + &PAGE_INFO::B, + &PAGE_INFO::C, + &PAGE_INFO::D, + &PAGE_INFO::E, + //&PAGE_INFO::GERBER, + &PAGE_INFO::USLetter, + &PAGE_INFO::USLegal, + &PAGE_INFO::USLedger, + }; + + unsigned i; + for( i=0; i < DIM( papers ); ++i ) + { + if( paperType.Contains( *papers[i] ) ) + { + pageInfo.SetType( *papers[i] ); + break; + } + } + + wxASSERT( i != DIM(papers) ); // dialog UI match the above list? + + m_layout_size = pageInfo.GetSizeMils(); + + // swap sizes to match orientation + bool isPortrait = (bool) m_orientationComboBox->GetSelection(); + + if( ( isPortrait && m_layout_size.x >= m_layout_size.y ) || + ( !isPortrait && m_layout_size.x < m_layout_size.y ) ) + { + m_layout_size.Set( m_layout_size.y, m_layout_size.x ); + } + } +} + + +void DIALOG_PAGES_SETTINGS::GetCustomSizeMilsFromDialog() +{ + double customSizeX; + double customSizeY; + wxString msg; + + msg = m_TextUserSizeX->GetValue(); + msg.ToDouble( &customSizeX ); + + msg = m_TextUserSizeY->GetValue(); + msg.ToDouble( &customSizeY ); + + switch( g_UserUnit ) + { + case MILLIMETRES: + customSizeX *= 1000. / 25.4; + customSizeY *= 1000. / 25.4; + break; + + default: + case INCHES: + customSizeX *= 1000.; + customSizeY *= 1000.; + } + + // Prepare to painless double -> int conversion. + customSizeX = Clamp( double( INT_MIN ), customSizeX, double( INT_MAX ) ); + customSizeY = Clamp( double( INT_MIN ), customSizeY, double( INT_MAX ) ); + m_layout_size = wxSize( wxRound( customSizeX ), wxRound( customSizeY ) ); +} diff --git a/common/dialogs/dialog_page_settings.h b/common/dialogs/dialog_page_settings.h index 08439556df..a397589bc5 100644 --- a/common/dialogs/dialog_page_settings.h +++ b/common/dialogs/dialog_page_settings.h @@ -1,12 +1,34 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: setpage.h -///////////////////////////////////////////////////////////////////////////// +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 1992-2010 + * Copyright (C) 1992-2010 Kicad Developers, see AUTHORS.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ #ifndef _DIALOG_PAGES_SETTINGS_H_ #define _DIALOG_PAGES_SETTINGS_H_ #include +#define MAX_PAGE_EXAMPLE_SIZE 200 + /*! * DIALOG_PAGES_SETTINGS class declaration */ @@ -16,10 +38,15 @@ class DIALOG_PAGES_SETTINGS: public DIALOG_PAGES_SETTINGS_BASE private: EDA_DRAW_FRAME* m_Parent; BASE_SCREEN* m_Screen; + bool m_initialized; bool m_modified; - PAGE_INFO m_user_size; ///< instantiated just to get the size + bool m_save_flag; + wxBitmap* m_page_bitmap; /// Temporary bitmap for the page layout example. + wxSize m_layout_size; /// Logical page layout size. + PAGE_INFO m_pageInfo; /// Temporary page info. + TITLE_BLOCK m_tb; /// Temporary title block (basic inscriptions). - static wxSize s_LastSize; ///< last position and size + static wxSize s_LastSize; /// Last position and size. static wxPoint s_LastPos; public: @@ -47,11 +74,51 @@ private: /// wxEVT_COMMAND_BUTTON_CLICKED event handler for wxID_CANCEL void OnCancelClick( wxCommandEvent& event ); - void setCurrentPageSizeSelection( const wxString& aPaperSize ); - void SavePageSettings(wxCommandEvent& event); - void ReturnSizeSelected(wxCommandEvent& event); + /// exEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHICE_PAGE_SIZE + void OnPaperSizeChoice( wxCommandEvent& event ); - void onPaperSizeChoice( wxCommandEvent& event ); + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_USER_PAGE_SIZE_X + void OnUserPageSizeXTextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_USER_PAGE_SIZE_Y + void OnUserPageSizeYTextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_CHOICE_SELECTED event handler for ID_CHOICE_PAGE_ORIENTATION + void OnPageOrientationChoice( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_REVISION + void OnRevisionTextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_TITLE + void OnTitleTextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMPANY + void OnCompanyTextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT1 + void OnComment1TextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT2 + void OnComment2TextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT3 + void OnComment3TextUpdated( wxCommandEvent& event ); + + /// exEVT_COMMAND_TEXT_UPDATED event handler for ID_TEXTCTRL_COMMENT4 + void OnComment4TextUpdated( wxCommandEvent& event ); + + void SetCurrentPageSizeSelection( const wxString& aPaperSize ); + + void SavePageSettings( wxCommandEvent& event ); + + /// Update page layout example + void UpdatePageLayoutExample(); + + /// Get page layout info from selected dialog items + void GetPageLayoutInfoFromDialog(); + + /// Get custom page size in mils from dialog + void GetCustomSizeMilsFromDialog(); }; #endif // _DIALOG_PAGES_SETTINGS_H_ diff --git a/common/dialogs/dialog_page_settings_base.cpp b/common/dialogs/dialog_page_settings_base.cpp index 2bce494be9..776d0d85ef 100644 --- a/common/dialogs/dialog_page_settings_base.cpp +++ b/common/dialogs/dialog_page_settings_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 6 2011) +// C++ code generated with wxFormBuilder (version Feb 9 2012) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -20,65 +20,99 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind bUpperSizerH = new wxBoxSizer( wxHORIZONTAL ); wxFlexGridSizer* LeftColumnSizer; - LeftColumnSizer = new wxFlexGridSizer( 6, 1, 0, 0 ); + LeftColumnSizer = new wxFlexGridSizer( 3, 1, 0, 0 ); LeftColumnSizer->AddGrowableRow( 0 ); LeftColumnSizer->AddGrowableRow( 1 ); LeftColumnSizer->AddGrowableRow( 2 ); LeftColumnSizer->SetFlexibleDirection( wxBOTH ); LeftColumnSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); - wxStaticBoxSizer* sbSizer9; - sbSizer9 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Paper Size:") ), wxVERTICAL ); + wxStaticBoxSizer* PaperSizer; + PaperSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Paper") ), wxVERTICAL ); - wxString m_paperSizeComboBoxChoices[] = { _("A4"), _("A3"), _("A2"), _("A1"), _("A0"), _("A"), _("B"), _("C"), _("D"), _("E"), _("USLetter"), _("USLegal"), _("USLedger"), _("User (Custom)") }; + m_staticText5 = new wxStaticText( this, wxID_ANY, _("Size:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText5->Wrap( -1 ); + PaperSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxString m_paperSizeComboBoxChoices[] = { _("A4 210x297mm"), _("A3 297x420mm"), _("A2 420x594mm"), _("A1 594x841mm"), _("A0 841x1189mm"), _("A 8.5x11in"), _("B 11x17in"), _("C 17x22in"), _("D 22x34in"), _("E 34x44in"), _("USLetter 8.5x11in"), _("USLegal 8.5x14in"), _("USLedger 11x17in"), _("User (Custom)") }; int m_paperSizeComboBoxNChoices = sizeof( m_paperSizeComboBoxChoices ) / sizeof( wxString ); - m_paperSizeComboBox = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_paperSizeComboBoxNChoices, m_paperSizeComboBoxChoices, 0 ); + m_paperSizeComboBox = new wxChoice( this, ID_CHICE_PAGE_SIZE, wxDefaultPosition, wxDefaultSize, m_paperSizeComboBoxNChoices, m_paperSizeComboBoxChoices, 0 ); m_paperSizeComboBox->SetSelection( 0 ); - sbSizer9->Add( m_paperSizeComboBox, 0, wxALL|wxEXPAND, 5 ); + PaperSizer->Add( m_paperSizeComboBox, 0, wxALL|wxEXPAND, 5 ); - LeftColumnSizer->Add( sbSizer9, 0, wxALL|wxEXPAND, 5 ); - - wxStaticBoxSizer* sbSizer8; - sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Orientation:") ), wxVERTICAL ); + m_staticText6 = new wxStaticText( this, wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText6->Wrap( -1 ); + PaperSizer->Add( m_staticText6, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); wxString m_orientationComboBoxChoices[] = { _("Landscape"), _("Portrait") }; int m_orientationComboBoxNChoices = sizeof( m_orientationComboBoxChoices ) / sizeof( wxString ); - m_orientationComboBox = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_orientationComboBoxNChoices, m_orientationComboBoxChoices, 0 ); + m_orientationComboBox = new wxChoice( this, ID_CHOICE_PAGE_ORIENTATION, wxDefaultPosition, wxDefaultSize, m_orientationComboBoxNChoices, m_orientationComboBoxChoices, 0 ); m_orientationComboBox->SetSelection( 0 ); - sbSizer8->Add( m_orientationComboBox, 0, wxALL|wxEXPAND, 5 ); + PaperSizer->Add( m_orientationComboBox, 0, wxEXPAND|wxALL, 5 ); + + + PaperSizer->Add( 0, 10, 0, 0, 5 ); + + wxStaticBoxSizer* CustomPaperSizer; + CustomPaperSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Custom Size") ), wxHORIZONTAL ); + + + CustomPaperSizer->Add( 5, 0, 1, wxEXPAND, 5 ); + + wxStaticBoxSizer* CustomPaperWidth; + CustomPaperWidth = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Width:") ), wxVERTICAL ); + + m_TextUserSizeX = new wxTextCtrl( this, ID_TEXTCTRL_USER_PAGE_SIZE_X, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_LEFT ); + m_TextUserSizeX->SetMaxLength( 6 ); + m_TextUserSizeX->SetToolTip( _("Custom paper width.") ); + + CustomPaperWidth->Add( m_TextUserSizeX, 0, wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxEXPAND, 5 ); + + + CustomPaperSizer->Add( CustomPaperWidth, 0, wxEXPAND, 5 ); + + + CustomPaperSizer->Add( 10, 0, 1, wxEXPAND, 5 ); + + wxStaticBoxSizer* CustomPaperHeight; + CustomPaperHeight = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Height:") ), wxVERTICAL ); + + m_TextUserSizeY = new wxTextCtrl( this, ID_TEXTCTRL_USER_PAGE_SIZE_Y, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_LEFT ); + m_TextUserSizeY->SetMaxLength( 6 ); + m_TextUserSizeY->SetToolTip( _("Custom paper height.") ); + + CustomPaperHeight->Add( m_TextUserSizeY, 0, wxALIGN_TOP|wxALL|wxEXPAND, 5 ); + + + CustomPaperSizer->Add( CustomPaperHeight, 0, wxEXPAND, 5 ); - LeftColumnSizer->Add( sbSizer8, 0, wxALL|wxEXPAND, 5 ); - wxStaticBoxSizer* sbSizer10; - sbSizer10 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Custom Page Size:") ), wxVERTICAL ); + CustomPaperSizer->Add( 5, 50, 0, 0, 5 ); - wxBoxSizer* bSizerXsize; - bSizerXsize = new wxBoxSizer( wxVERTICAL ); - UserPageSizeX = new wxStaticText( this, wxID_ANY, _("Width:"), wxDefaultPosition, wxDefaultSize, 0 ); - UserPageSizeX->Wrap( -1 ); - bSizerXsize->Add( UserPageSizeX, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + PaperSizer->Add( CustomPaperSizer, 1, wxEXPAND, 5 ); - m_TextUserSizeX = new wxTextCtrl( this, ID_TEXTCTRL_USER_PAGE_SIZE_X, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerXsize->Add( m_TextUserSizeX, 0, wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxEXPAND, 5 ); - sbSizer10->Add( bSizerXsize, 1, wxALIGN_TOP|wxALL|wxEXPAND, 5 ); + LeftColumnSizer->Add( PaperSizer, 1, wxALL, 5 ); - wxBoxSizer* bSizerYsize; - bSizerYsize = new wxBoxSizer( wxVERTICAL ); + wxStaticBoxSizer* PageLayoutExampleSizer; + PageLayoutExampleSizer = new wxStaticBoxSizer( new wxStaticBox( this, ID_PAGE_LAYOUT_EXAMPLE_SIZER, _("Layout Preview") ), wxVERTICAL ); - UserPageSizeY = new wxStaticText( this, wxID_ANY, _("Height:"), wxDefaultPosition, wxDefaultSize, 0 ); - UserPageSizeY->Wrap( -1 ); - bSizerYsize->Add( UserPageSizeY, 0, wxALIGN_TOP|wxALL, 5 ); + PageLayoutExampleSizer->SetMinSize( wxSize( 240,-1 ) ); + m_PageLayoutExampleBitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( -1,-1 ), wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER ); + m_PageLayoutExampleBitmap->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); + m_PageLayoutExampleBitmap->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ); - m_TextUserSizeY = new wxTextCtrl( this, ID_TEXTCTRL_USER_PAGE_SIZE_Y, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - bSizerYsize->Add( m_TextUserSizeY, 0, wxALIGN_TOP|wxALL|wxEXPAND, 5 ); + PageLayoutExampleSizer->Add( m_PageLayoutExampleBitmap, 0, wxALIGN_CENTER|wxALL, 5 ); - sbSizer10->Add( bSizerYsize, 1, wxALIGN_TOP|wxALL|wxEXPAND, 5 ); - LeftColumnSizer->Add( sbSizer10, 1, wxALL|wxEXPAND, 5 ); + LeftColumnSizer->Add( PageLayoutExampleSizer, 0, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); - bUpperSizerH->Add( LeftColumnSizer, 0, wxEXPAND, 5 ); + + LeftColumnSizer->Add( 0, 1, 1, wxEXPAND, 5 ); + + + bUpperSizerH->Add( LeftColumnSizer, 0, wxALL|wxEXPAND, 5 ); wxFlexGridSizer* RightColumnSizer; RightColumnSizer = new wxFlexGridSizer( 8, 1, 0, 0 ); @@ -94,6 +128,10 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind RightColumnSizer->SetFlexibleDirection( wxBOTH ); RightColumnSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + wxStaticBoxSizer* BasicInscriptionsSizer; + BasicInscriptionsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Basic Inscriptions") ), wxVERTICAL ); + + BasicInscriptionsSizer->SetMinSize( wxSize( -1,452 ) ); wxBoxSizer* SheetInfoSizer; SheetInfoSizer = new wxBoxSizer( wxHORIZONTAL ); @@ -108,10 +146,11 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_TextSheetNumber->Wrap( -1 ); SheetInfoSizer->Add( m_TextSheetNumber, 0, wxALL, 5 ); - RightColumnSizer->Add( SheetInfoSizer, 1, 0, 5 ); + + BasicInscriptionsSizer->Add( SheetInfoSizer, 0, 0, 5 ); wxStaticBoxSizer* RevisionSizer; - RevisionSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Revision:") ), wxHORIZONTAL ); + RevisionSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Revision") ), wxHORIZONTAL ); m_TextRevision = new wxTextCtrl( this, ID_TEXTCTRL_REVISION, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_TextRevision->SetMinSize( wxSize( 100,-1 ) ); @@ -119,87 +158,98 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind RevisionSizer->Add( m_TextRevision, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_RevisionExport = new wxCheckBox( this, ID_CHECKBOX_REVISION, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); - RevisionSizer->Add( m_RevisionExport, 0, wxALL, 5 ); + RevisionSizer->Add( m_RevisionExport, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - RightColumnSizer->Add( RevisionSizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( RevisionSizer, 1, wxEXPAND, 5 ); wxStaticBoxSizer* TitleSizer; - TitleSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Title:") ), wxHORIZONTAL ); + TitleSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Title") ), wxHORIZONTAL ); m_TextTitle = new wxTextCtrl( this, ID_TEXTCTRL_TITLE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TextTitle->SetMinSize( wxSize( 400,-1 ) ); + m_TextTitle->SetMinSize( wxSize( 360,-1 ) ); TitleSizer->Add( m_TextTitle, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_TitleExport = new wxCheckBox( this, wxID_ANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); TitleSizer->Add( m_TitleExport, 0, wxALL, 5 ); - RightColumnSizer->Add( TitleSizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( TitleSizer, 1, wxEXPAND, 5 ); wxStaticBoxSizer* CompanySizer; - CompanySizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Company:") ), wxHORIZONTAL ); + CompanySizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Company") ), wxHORIZONTAL ); m_TextCompany = new wxTextCtrl( this, ID_TEXTCTRL_COMPANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TextCompany->SetMinSize( wxSize( 400,-1 ) ); + m_TextCompany->SetMinSize( wxSize( 360,-1 ) ); CompanySizer->Add( m_TextCompany, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_CompanyExport = new wxCheckBox( this, ID_CHECKBOX_COMPANY, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); CompanySizer->Add( m_CompanyExport, 0, wxALL, 5 ); - RightColumnSizer->Add( CompanySizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( CompanySizer, 1, wxEXPAND, 5 ); wxStaticBoxSizer* Comment1Sizer; - Comment1Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment1:") ), wxHORIZONTAL ); + Comment1Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment1") ), wxHORIZONTAL ); m_TextComment1 = new wxTextCtrl( this, ID_TEXTCTRL_COMMENT1, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TextComment1->SetMinSize( wxSize( 400,-1 ) ); + m_TextComment1->SetMinSize( wxSize( 360,-1 ) ); Comment1Sizer->Add( m_TextComment1, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_Comment1Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT1, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); Comment1Sizer->Add( m_Comment1Export, 0, wxALL, 5 ); - RightColumnSizer->Add( Comment1Sizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( Comment1Sizer, 1, wxEXPAND, 5 ); wxStaticBoxSizer* Comment2Sizer; - Comment2Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment2:") ), wxHORIZONTAL ); + Comment2Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment2") ), wxHORIZONTAL ); m_TextComment2 = new wxTextCtrl( this, ID_TEXTCTRL_COMMENT2, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TextComment2->SetMinSize( wxSize( 400,-1 ) ); + m_TextComment2->SetMinSize( wxSize( 360,-1 ) ); Comment2Sizer->Add( m_TextComment2, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_Comment2Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT2, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); Comment2Sizer->Add( m_Comment2Export, 0, wxALL, 5 ); - RightColumnSizer->Add( Comment2Sizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( Comment2Sizer, 1, wxEXPAND, 5 ); wxStaticBoxSizer* Comment3Sizer; - Comment3Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment3:") ), wxHORIZONTAL ); + Comment3Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment3") ), wxHORIZONTAL ); m_TextComment3 = new wxTextCtrl( this, ID_TEXTCTRL_COMMENT3, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TextComment3->SetMinSize( wxSize( 400,-1 ) ); + m_TextComment3->SetMinSize( wxSize( 360,-1 ) ); Comment3Sizer->Add( m_TextComment3, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_Comment3Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT3, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); Comment3Sizer->Add( m_Comment3Export, 0, wxALL, 5 ); - RightColumnSizer->Add( Comment3Sizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( Comment3Sizer, 1, wxEXPAND, 5 ); wxStaticBoxSizer* Comment4Sizer; - Comment4Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment4:") ), wxHORIZONTAL ); + Comment4Sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Comment4") ), wxHORIZONTAL ); m_TextComment4 = new wxTextCtrl( this, ID_TEXTCTRL_COMMENT4, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - m_TextComment4->SetMinSize( wxSize( 400,-1 ) ); + m_TextComment4->SetMinSize( wxSize( 360,-1 ) ); Comment4Sizer->Add( m_TextComment4, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_Comment4Export = new wxCheckBox( this, ID_CHECKBOX_COMMENT4, _("Export to other sheets"), wxDefaultPosition, wxDefaultSize, 0 ); Comment4Sizer->Add( m_Comment4Export, 0, wxALL, 5 ); - RightColumnSizer->Add( Comment4Sizer, 1, wxEXPAND, 5 ); + + BasicInscriptionsSizer->Add( Comment4Sizer, 1, wxEXPAND, 5 ); + + + RightColumnSizer->Add( BasicInscriptionsSizer, 1, wxALL|wxEXPAND, 5 ); + bUpperSizerH->Add( RightColumnSizer, 1, wxALL|wxEXPAND, 5 ); @@ -211,18 +261,27 @@ DIALOG_PAGES_SETTINGS_BASE::DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWind m_sdbSizer1Cancel = new wxButton( this, wxID_CANCEL ); m_sdbSizer1->AddButton( m_sdbSizer1Cancel ); m_sdbSizer1->Realize(); - bMainSizer->Add( m_sdbSizer1, 0, wxEXPAND|wxALIGN_RIGHT|wxALL, 5 ); + + bMainSizer->Add( m_sdbSizer1, 0, wxALIGN_RIGHT|wxALL, 5 ); + this->SetSizer( bMainSizer ); this->Layout(); - bMainSizer->Fit( this ); // Connect Events this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCloseWindow ) ); - m_paperSizeComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::onPaperSizeChoice ), NULL, this ); - m_TextUserSizeX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTextctrlUserPageSizeXTextUpdated ), NULL, this ); - m_TextUserSizeY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTextctrlUserPageSizeYTextUpdated ), NULL, this ); + m_paperSizeComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPaperSizeChoice ), NULL, this ); + m_orientationComboBox->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPageOrientationChoice ), NULL, this ); + m_TextUserSizeX->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeXTextUpdated ), NULL, this ); + m_TextUserSizeY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeYTextUpdated ), NULL, this ); + m_TextRevision->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnRevisionTextUpdated ), NULL, this ); + m_TextTitle->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTitleTextUpdated ), NULL, this ); m_TitleExport->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCheckboxTitleClick ), NULL, this ); + m_TextCompany->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCompanyTextUpdated ), NULL, this ); + m_TextComment1->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment1TextUpdated ), NULL, this ); + m_TextComment2->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment2TextUpdated ), NULL, this ); + m_TextComment3->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment3TextUpdated ), NULL, this ); + m_TextComment4->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment4TextUpdated ), NULL, this ); m_sdbSizer1Cancel->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1OK->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this ); } @@ -231,10 +290,18 @@ DIALOG_PAGES_SETTINGS_BASE::~DIALOG_PAGES_SETTINGS_BASE() { // Disconnect Events this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCloseWindow ) ); - m_paperSizeComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::onPaperSizeChoice ), NULL, this ); - m_TextUserSizeX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTextctrlUserPageSizeXTextUpdated ), NULL, this ); - m_TextUserSizeY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTextctrlUserPageSizeYTextUpdated ), NULL, this ); + m_paperSizeComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPaperSizeChoice ), NULL, this ); + m_orientationComboBox->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnPageOrientationChoice ), NULL, this ); + m_TextUserSizeX->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeXTextUpdated ), NULL, this ); + m_TextUserSizeY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnUserPageSizeYTextUpdated ), NULL, this ); + m_TextRevision->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnRevisionTextUpdated ), NULL, this ); + m_TextTitle->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnTitleTextUpdated ), NULL, this ); m_TitleExport->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCheckboxTitleClick ), NULL, this ); + m_TextCompany->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCompanyTextUpdated ), NULL, this ); + m_TextComment1->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment1TextUpdated ), NULL, this ); + m_TextComment2->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment2TextUpdated ), NULL, this ); + m_TextComment3->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment3TextUpdated ), NULL, this ); + m_TextComment4->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnComment4TextUpdated ), NULL, this ); m_sdbSizer1Cancel->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnCancelClick ), NULL, this ); m_sdbSizer1OK->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_PAGES_SETTINGS_BASE::OnOkClick ), NULL, this ); diff --git a/common/dialogs/dialog_page_settings_base.fbp b/common/dialogs/dialog_page_settings_base.fbp index b491921113..4ff5659e2b 100644 --- a/common/dialogs/dialog_page_settings_base.fbp +++ b/common/dialogs/dialog_page_settings_base.fbp @@ -1,11 +1,12 @@ - + C++ 1 source_name + 0 0 res UTF-8 @@ -19,6 +20,7 @@ . 1 + 1 1 0 0 @@ -27,8 +29,11 @@ 1 1 1 + 0 + + @@ -51,7 +56,6 @@ 0 0 wxID_ANY - 0 @@ -65,11 +69,9 @@ 1 - Resizable - 1 - -1,-1 + 748,495 wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER Page Settings @@ -119,7 +121,7 @@ - + -1,-1 bMainSizer wxVERTICAL none @@ -134,7 +136,7 @@ none 5 - wxEXPAND + wxALL|wxEXPAND 0 1 @@ -146,36 +148,38 @@ LeftColumnSizer wxFLEX_GROWMODE_SPECIFIED none - 6 + 3 0 5 - wxALL|wxEXPAND - 0 + wxALL + 1 wxID_ANY - Paper Size: + Paper - sbSizer9 + PaperSizer wxVERTICAL none 5 - wxALL|wxEXPAND + wxTOP|wxRIGHT|wxLEFT 0 - + 1 1 1 1 + + + 1 0 - "A4" "A3" "A2" "A1" "A0" "A" "B" "C" "D" "E" "USLetter" "USLegal" "USLedger" "User (Custom)" 1 1 @@ -190,7 +194,7 @@ 0 0 wxID_ANY - + Size: 0 @@ -198,19 +202,17 @@ 0 1 - m_paperSizeComboBox + m_staticText5 1 protected 1 - Resizable - - 0 1 + 0 @@ -221,8 +223,8 @@ + -1 - onPaperSizeChoice @@ -247,20 +249,6 @@ - - - - 5 - wxALL|wxEXPAND - 0 - - wxID_ANY - Orientation: - - sbSizer8 - wxVERTICAL - none - 5 wxALL|wxEXPAND @@ -270,13 +258,16 @@ 1 1 1 + + + 1 0 - "Landscape" "Portrait" + "A4 210x297mm" "A3 297x420mm" "A2 420x594mm" "A1 594x841mm" "A0 841x1189mm" "A 8.5x11in" "B 11x17in" "C 17x22in" "D 22x34in" "E 34x44in" "USLetter 8.5x11in" "USLegal 8.5x14in" "USLedger 11x17in" "User (Custom)" 1 1 @@ -290,8 +281,7 @@ 0 0 - wxID_ANY - + ID_CHICE_PAGE_SIZE 0 @@ -299,19 +289,18 @@ 0 1 - m_orientationComboBox + m_paperSizeComboBox 1 protected 1 - Resizable - 0 1 + 0 @@ -323,7 +312,7 @@ - + OnPaperSizeChoice @@ -348,29 +337,6 @@ - - - - 5 - wxALL|wxEXPAND - 1 - - wxID_ANY - Custom Page Size: - - sbSizer10 - wxVERTICAL - none - - - 5 - wxALIGN_TOP|wxALL|wxEXPAND - 1 - - - bSizerXsize - wxVERTICAL - none 5 wxTOP|wxRIGHT|wxLEFT @@ -380,7 +346,10 @@ 1 1 1 + + + @@ -400,8 +369,7 @@ 0 0 wxID_ANY - Width: - + Orientation: 0 @@ -409,16 +377,14 @@ 0 1 - UserPageSizeX + m_staticText6 1 protected 1 - Resizable - 1 @@ -460,19 +426,23 @@ 5 - wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxEXPAND + wxEXPAND|wxALL 0 - + 1 1 1 1 + + + 1 0 + "Landscape" "Portrait" 1 1 @@ -486,26 +456,23 @@ 0 0 - ID_TEXTCTRL_USER_PAGE_SIZE_X - + ID_CHOICE_PAGE_ORIENTATION 0 - 0 0 1 - m_TextUserSizeX + m_orientationComboBox 1 protected 1 - Resizable - + 0 1 @@ -516,11 +483,11 @@ wxFILTER_NONE wxDefaultValidator - + OnPageOrientationChoice @@ -542,34 +509,66 @@ - OnTextctrlUserPageSizeXTextUpdated - - - + + 5 + + 0 + + 10 + protected + 0 5 - wxALIGN_TOP|wxALL|wxEXPAND + wxEXPAND 1 - + + wxID_ANY + Custom Size + + CustomPaperSizer + wxHORIZONTAL + none + + + 5 + wxEXPAND + 1 + + 0 + protected + 5 + + + + 5 + wxEXPAND + 0 + + wxID_ANY + Width: - bSizerYsize + CustomPaperWidth wxVERTICAL none + 5 - wxALIGN_TOP|wxALL + wxALIGN_LEFT|wxALIGN_TOP|wxALL|wxEXPAND 0 - + 1 1 1 1 + + + @@ -588,40 +587,37 @@ 0 0 - wxID_ANY - Height: - + ID_TEXTCTRL_USER_PAGE_SIZE_X 0 + 6 0 1 - UserPageSizeY + m_TextUserSizeX 1 protected 1 - Resizable - 1 - + wxTE_LEFT 0 - + Custom paper width. wxFILTER_NONE - wxDefaultValidator + wxTextValidator + - -1 @@ -644,9 +640,37 @@ + OnUserPageSizeXTextUpdated + + + + + + + 5 + wxEXPAND + 1 + + 0 + protected + 10 + + + + 5 + wxEXPAND + 0 + + wxID_ANY + Height: + + CustomPaperHeight + wxVERTICAL + none + 5 wxALIGN_TOP|wxALL|wxEXPAND @@ -656,7 +680,10 @@ 1 1 1 + + + @@ -676,11 +703,10 @@ 0 0 ID_TEXTCTRL_USER_PAGE_SIZE_Y - 0 - 0 + 6 0 @@ -692,15 +718,13 @@ protected 1 - Resizable - 1 - + wxTE_LEFT 0 - + Custom paper height. wxFILTER_NONE wxDefaultValidator @@ -731,7 +755,7 @@ - OnTextctrlUserPageSizeYTextUpdated + OnUserPageSizeYTextUpdated @@ -740,6 +764,127 @@ + + 5 + + 0 + + 50 + protected + 5 + + + + + + + + 5 + wxALIGN_CENTER|wxALL|wxEXPAND + 0 + + ID_PAGE_LAYOUT_EXAMPLE_SIZER + Layout Preview + 240,-1 + PageLayoutExampleSizer + wxVERTICAL + none + + + 5 + wxALIGN_CENTER|wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + wxSYS_COLOUR_WINDOW + Load From Icon Resource; + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + wxSYS_COLOUR_WINDOW + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + -1,-1 + 1 + m_PageLayoutExampleBitmap + 1 + + + protected + 1 + + Resizable + 1 + -1,-1 + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxFULL_REPAINT_ON_RESIZE|wxSIMPLE_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 1 + protected + 0 @@ -762,8 +907,20 @@ 0 5 - + wxALL|wxEXPAND 1 + + wxID_ANY + Basic Inscriptions + -1,452 + BasicInscriptionsSizer + wxVERTICAL + none + + + 5 + + 0 SheetInfoSizer @@ -778,7 +935,10 @@ 1 1 1 + + + @@ -799,7 +959,6 @@ 0 wxID_ANY Number of sheets: %d - 0 @@ -814,9 +973,7 @@ protected 1 - Resizable - 1 @@ -875,7 +1032,10 @@ 1 1 1 + + + @@ -896,7 +1056,6 @@ 0 wxID_ANY Sheet number: %d - 0 @@ -911,9 +1070,7 @@ protected 1 - Resizable - 1 @@ -961,7 +1118,7 @@ 1 wxID_ANY - Revision: + Revision RevisionSizer wxHORIZONTAL @@ -976,7 +1133,10 @@ 1 1 1 + + + @@ -996,7 +1156,6 @@ 0 0 ID_TEXTCTRL_REVISION - 0 @@ -1012,9 +1171,7 @@ protected 1 - Resizable - 1 @@ -1051,7 +1208,7 @@ - + OnRevisionTextUpdated @@ -1060,14 +1217,17 @@ 5 - wxALL + wxBOTTOM|wxRIGHT|wxLEFT 0 1 1 1 1 + + + @@ -1089,7 +1249,6 @@ 0 ID_CHECKBOX_REVISION Export to other sheets - 0 @@ -1104,9 +1263,7 @@ protected 1 - Resizable - 1 @@ -1154,7 +1311,7 @@ 1 wxID_ANY - Title: + Title TitleSizer wxHORIZONTAL @@ -1169,7 +1326,10 @@ 1 1 1 + + + @@ -1189,14 +1349,13 @@ 0 0 ID_TEXTCTRL_TITLE - 0 0 0 - 400,-1 + 360,-1 1 m_TextTitle 1 @@ -1205,9 +1364,7 @@ protected 1 - Resizable - 1 @@ -1244,7 +1401,7 @@ - + OnTitleTextUpdated @@ -1260,7 +1417,10 @@ 1 1 1 + + + @@ -1282,7 +1442,6 @@ 0 wxID_ANY Export to other sheets - 0 @@ -1297,9 +1456,7 @@ protected 1 - Resizable - 1 @@ -1347,7 +1504,7 @@ 1 wxID_ANY - Company: + Company CompanySizer wxHORIZONTAL @@ -1362,7 +1519,10 @@ 1 1 1 + + + @@ -1382,14 +1542,13 @@ 0 0 ID_TEXTCTRL_COMPANY - 0 0 0 - 400,-1 + 360,-1 1 m_TextCompany 1 @@ -1398,9 +1557,7 @@ protected 1 - Resizable - 1 @@ -1437,7 +1594,7 @@ - + OnCompanyTextUpdated @@ -1453,7 +1610,10 @@ 1 1 1 + + + @@ -1475,7 +1635,6 @@ 0 ID_CHECKBOX_COMPANY Export to other sheets - 0 @@ -1490,9 +1649,7 @@ protected 1 - Resizable - 1 @@ -1540,7 +1697,7 @@ 1 wxID_ANY - Comment1: + Comment1 Comment1Sizer wxHORIZONTAL @@ -1555,7 +1712,10 @@ 1 1 1 + + + @@ -1575,14 +1735,13 @@ 0 0 ID_TEXTCTRL_COMMENT1 - 0 0 0 - 400,-1 + 360,-1 1 m_TextComment1 1 @@ -1591,9 +1750,7 @@ protected 1 - Resizable - 1 @@ -1630,7 +1787,7 @@ - + OnComment1TextUpdated @@ -1646,7 +1803,10 @@ 1 1 1 + + + @@ -1668,7 +1828,6 @@ 0 ID_CHECKBOX_COMMENT1 Export to other sheets - 0 @@ -1683,9 +1842,7 @@ protected 1 - Resizable - 1 @@ -1733,7 +1890,7 @@ 1 wxID_ANY - Comment2: + Comment2 Comment2Sizer wxHORIZONTAL @@ -1748,7 +1905,10 @@ 1 1 1 + + + @@ -1768,14 +1928,13 @@ 0 0 ID_TEXTCTRL_COMMENT2 - 0 0 0 - 400,-1 + 360,-1 1 m_TextComment2 1 @@ -1784,9 +1943,7 @@ protected 1 - Resizable - 1 @@ -1823,7 +1980,7 @@ - + OnComment2TextUpdated @@ -1839,7 +1996,10 @@ 1 1 1 + + + @@ -1861,7 +2021,6 @@ 0 ID_CHECKBOX_COMMENT2 Export to other sheets - 0 @@ -1876,9 +2035,7 @@ protected 1 - Resizable - 1 @@ -1926,7 +2083,7 @@ 1 wxID_ANY - Comment3: + Comment3 Comment3Sizer wxHORIZONTAL @@ -1941,7 +2098,10 @@ 1 1 1 + + + @@ -1961,14 +2121,13 @@ 0 0 ID_TEXTCTRL_COMMENT3 - 0 0 0 - 400,-1 + 360,-1 1 m_TextComment3 1 @@ -1977,9 +2136,7 @@ protected 1 - Resizable - 1 @@ -2016,7 +2173,7 @@ - + OnComment3TextUpdated @@ -2032,7 +2189,10 @@ 1 1 1 + + + @@ -2054,7 +2214,6 @@ 0 ID_CHECKBOX_COMMENT3 Export to other sheets - 0 @@ -2069,9 +2228,7 @@ protected 1 - Resizable - 1 @@ -2119,7 +2276,7 @@ 1 wxID_ANY - Comment4: + Comment4 Comment4Sizer wxHORIZONTAL @@ -2134,7 +2291,10 @@ 1 1 1 + + + @@ -2154,14 +2314,13 @@ 0 0 ID_TEXTCTRL_COMMENT4 - 0 0 0 - 400,-1 + 360,-1 1 m_TextComment4 1 @@ -2170,9 +2329,7 @@ protected 1 - Resizable - 1 @@ -2209,7 +2366,7 @@ - + OnComment4TextUpdated @@ -2225,7 +2382,10 @@ 1 1 1 + + + @@ -2247,7 +2407,6 @@ 0 ID_CHECKBOX_COMMENT4 Export to other sheets - 0 @@ -2262,9 +2421,7 @@ protected 1 - Resizable - 1 @@ -2310,9 +2467,11 @@ + + 5 - wxEXPAND|wxALIGN_RIGHT|wxALL + wxALIGN_RIGHT|wxALL 0 0 diff --git a/common/dialogs/dialog_page_settings_base.h b/common/dialogs/dialog_page_settings_base.h index 610269c5f5..a5299e8c2c 100644 --- a/common/dialogs/dialog_page_settings_base.h +++ b/common/dialogs/dialog_page_settings_base.h @@ -1,46 +1,55 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Jun 6 2011) +// C++ code generated with wxFormBuilder (version Feb 9 2012) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -#ifndef __dialog_page_settings_base__ -#define __dialog_page_settings_base__ +#ifndef __DIALOG_PAGE_SETTINGS_BASE_H__ +#define __DIALOG_PAGE_SETTINGS_BASE_H__ +#include +#include #include - #include -#include +#include #include #include #include #include +#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include #include #include #include /////////////////////////////////////////////////////////////////////////// -#define ID_TEXTCTRL_USER_PAGE_SIZE_X 1000 -#define ID_TEXTCTRL_USER_PAGE_SIZE_Y 1001 -#define ID_TEXTCTRL_REVISION 1002 -#define ID_CHECKBOX_REVISION 1003 -#define ID_TEXTCTRL_TITLE 1004 -#define ID_TEXTCTRL_COMPANY 1005 -#define ID_CHECKBOX_COMPANY 1006 -#define ID_TEXTCTRL_COMMENT1 1007 -#define ID_CHECKBOX_COMMENT1 1008 -#define ID_TEXTCTRL_COMMENT2 1009 -#define ID_CHECKBOX_COMMENT2 1010 -#define ID_TEXTCTRL_COMMENT3 1011 -#define ID_CHECKBOX_COMMENT3 1012 -#define ID_TEXTCTRL_COMMENT4 1013 -#define ID_CHECKBOX_COMMENT4 1014 +#define ID_CHICE_PAGE_SIZE 1000 +#define ID_CHOICE_PAGE_ORIENTATION 1001 +#define ID_TEXTCTRL_USER_PAGE_SIZE_X 1002 +#define ID_TEXTCTRL_USER_PAGE_SIZE_Y 1003 +#define ID_PAGE_LAYOUT_EXAMPLE_SIZER 1004 +#define ID_TEXTCTRL_REVISION 1005 +#define ID_CHECKBOX_REVISION 1006 +#define ID_TEXTCTRL_TITLE 1007 +#define ID_TEXTCTRL_COMPANY 1008 +#define ID_CHECKBOX_COMPANY 1009 +#define ID_TEXTCTRL_COMMENT1 1010 +#define ID_CHECKBOX_COMMENT1 1011 +#define ID_TEXTCTRL_COMMENT2 1012 +#define ID_CHECKBOX_COMMENT2 1013 +#define ID_TEXTCTRL_COMMENT3 1014 +#define ID_CHECKBOX_COMMENT3 1015 +#define ID_TEXTCTRL_COMMENT4 1016 +#define ID_CHECKBOX_COMMENT4 1017 /////////////////////////////////////////////////////////////////////////////// /// Class DIALOG_PAGES_SETTINGS_BASE @@ -50,14 +59,14 @@ class DIALOG_PAGES_SETTINGS_BASE : public wxDialog private: protected: + wxStaticText* m_staticText5; wxChoice* m_paperSizeComboBox; + wxStaticText* m_staticText6; wxChoice* m_orientationComboBox; - wxStaticText* UserPageSizeX; wxTextCtrl* m_TextUserSizeX; - wxStaticText* UserPageSizeY; wxTextCtrl* m_TextUserSizeY; + wxStaticBitmap* m_PageLayoutExampleBitmap; wxStaticText* m_TextSheetCount; - wxStaticText* m_TextSheetNumber; wxTextCtrl* m_TextRevision; wxCheckBox* m_RevisionExport; @@ -79,19 +88,27 @@ class DIALOG_PAGES_SETTINGS_BASE : public wxDialog // Virtual event handlers, overide them in your derived class virtual void OnCloseWindow( wxCloseEvent& event ) { event.Skip(); } - virtual void onPaperSizeChoice( wxCommandEvent& event ) { event.Skip(); } - virtual void OnTextctrlUserPageSizeXTextUpdated( wxCommandEvent& event ) { event.Skip(); } - virtual void OnTextctrlUserPageSizeYTextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnPaperSizeChoice( wxCommandEvent& event ) { event.Skip(); } + virtual void OnPageOrientationChoice( wxCommandEvent& event ) { event.Skip(); } + virtual void OnUserPageSizeXTextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnUserPageSizeYTextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnRevisionTextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTitleTextUpdated( wxCommandEvent& event ) { event.Skip(); } virtual void OnCheckboxTitleClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnCompanyTextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnComment1TextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnComment2TextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnComment3TextUpdated( wxCommandEvent& event ) { event.Skip(); } + virtual void OnComment4TextUpdated( wxCommandEvent& event ) { event.Skip(); } virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); } virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); } public: - DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); + DIALOG_PAGES_SETTINGS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Page Settings"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 748,495 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER ); ~DIALOG_PAGES_SETTINGS_BASE(); }; -#endif //__dialog_page_settings_base__ +#endif //__DIALOG_PAGE_SETTINGS_BASE_H__ diff --git a/common/worksheet.cpp b/common/worksheet.cpp index a992fc1afe..95ccb19872 100644 --- a/common/worksheet.cpp +++ b/common/worksheet.cpp @@ -1010,69 +1010,62 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid const PAGE_INFO& pageInfo = GetPageSettings(); wxSize pageSize = pageInfo.GetSizeMils(); - int ii, jj, xg, yg, ipas, gxpas, gypas; + // if not printing, draw the page limits: + if( !screen->m_IsPrinting && g_ShowPageLimits ) + { + int scale = m_internalUnits / 1000; + GRSetDrawMode( DC, GR_COPY ); + GRRect( m_canvas->GetClipBox(), DC, 0, 0, + pageSize.x * scale, pageSize.y * scale, line_width, + g_DrawBgColor == WHITE ? LIGHTGRAY : DARKDARKGRAY ); + } + + wxPoint margin_left_top( pageInfo.GetLeftMarginMils(), pageInfo.GetTopMarginMils() ); + wxPoint margin_right_bottom( pageInfo.GetRightMarginMils(), pageInfo.GetBottomMarginMils() ); + wxString paper = pageInfo.GetType(); + wxString file = screen->GetFileName(); + TITLE_BLOCK t_block = GetTitleBlock(); + int number_of_screens = screen->m_NumberOfScreen; + int screen_to_draw = screen->m_ScreenNumber; + + TraceWorkSheet( ( wxDC* )DC, pageSize, margin_left_top, margin_right_bottom, + paper, file, t_block, number_of_screens, screen_to_draw, + ( int )line_width ); +} + + +void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* aDC, wxSize& aSz, wxPoint& aLT, wxPoint& aRB, + wxString& aType, wxString& aFlNm, TITLE_BLOCK& aTb, + int aNScr, int aScr, int aLnW, EDA_Colors aClr1, + EDA_Colors aClr2 ) +{ wxPoint pos; int refx, refy; - EDA_Colors Color; wxString Line; Ki_WorkSheetData* WsItem; int scale = m_internalUnits / 1000; wxSize size( SIZETEXT * scale, SIZETEXT * scale ); -#if defined(KICAD_GOST) - wxSize size2( SIZETEXT * scale * 2, SIZETEXT * scale * 2); - wxSize size3( SIZETEXT * scale * 3, SIZETEXT * scale * 3); - wxSize size1_5( SIZETEXT * scale * 1.5, SIZETEXT * scale * 1.5); -#endif wxSize size_ref( SIZETEXT_REF * scale, SIZETEXT_REF * scale ); - wxString msg; - int UpperLimit = VARIABLE_BLOCK_START_POSITION; - int width = line_width; - Color = RED; - - // if not printing, draw the page limits: - if( !screen->m_IsPrinting && g_ShowPageLimits ) - { - GRSetDrawMode( DC, GR_COPY ); - GRRect( m_canvas->GetClipBox(), DC, 0, 0, - pageSize.x * scale, pageSize.y * scale, width, - g_DrawBgColor == WHITE ? LIGHTGRAY : DARKDARKGRAY ); - } - - GRSetDrawMode( DC, GR_COPY ); - - // Draw the border. + GRSetDrawMode( aDC, GR_COPY ); // Upper left corner - refx = pageInfo.GetLeftMarginMils(); - refy = pageInfo.GetTopMarginMils(); + refx = aLT.x; + refy = aLT.y; // lower right corner - xg = pageSize.x - pageInfo.GetRightMarginMils(); - yg = pageSize.y - pageInfo.GetBottomMarginMils(); + int xg, yg; + xg = aSz.x - aRB.x; + yg = aSz.y - aRB.y; #if defined(KICAD_GOST) - GRRect( m_canvas->GetClipBox(), DC, refx * scale, refy * scale, - xg * scale, yg * scale, width, Color ); + // Draw the border. + GRRect( m_canvas->GetClipBox(), aDC, refx * scale, refy * scale, + xg * scale, yg * scale, aLnW, aClr1 ); -#else - for( ii = 0; ii < 2; ii++ ) - { - GRRect( m_canvas->GetClipBox(), DC, refx * scale, refy * scale, - xg * scale, yg * scale, width, Color ); - - refx += GRID_REF_W; refy += GRID_REF_W; - xg -= GRID_REF_W; yg -= GRID_REF_W; - } - -#endif - - // Draw the reference legends. - refx = pageInfo.GetLeftMarginMils(); - -#if defined(KICAD_GOST) - refy = pageSize.y - pageInfo.GetBottomMarginMils(); // Lower left corner + refx = aLT.x; + refy = aSz.y - aRB.y; // Lower left corner for( WsItem = &WS_Segm1_LU; WsItem != NULL; WsItem = WsItem->Pnext ) { pos.x = ( refx - WsItem->m_Posx ) * scale; @@ -1086,22 +1079,22 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_PODPIS_LU: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_VERT, size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_BOTTOM, - width, false, false ); + aLnW, false, false ); break; case WS_SEGMENT_LU: - xg = pageInfo.GetLeftMarginMils() - WsItem->m_Endx; - yg = pageSize.y - pageInfo.GetBottomMarginMils() - WsItem->m_Endy; - GRLine( m_canvas->GetClipBox(), DC, pos.x, pos.y, - xg * scale, yg * scale, width, Color ); + xg = aLT.x - WsItem->m_Endx; + yg = aSz.y - aRB.y - WsItem->m_Endy; + GRLine( m_canvas->GetClipBox(), aDC, pos.x, pos.y, + xg * scale, yg * scale, aLnW, aClr1 ); break; } } - refy = pageInfo.GetBottomMarginMils(); // Left Top corner + refy = aRB.y; // Left Top corner for( WsItem = &WS_Segm1_LT; WsItem != NULL; WsItem = WsItem->Pnext ) { pos.x = ( refx + WsItem->m_Posx ) * scale; @@ -1110,98 +1103,22 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid switch( WsItem->m_Type ) { case WS_SEGMENT_LT: - xg = pageInfo.GetLeftMarginMils() + WsItem->m_Endx; - yg = pageInfo.GetBottomMarginMils() + WsItem->m_Endy; - GRLine( m_canvas->GetClipBox(), DC, pos.x, pos.y, - xg * scale, yg * scale, width, Color ); + xg = aLT.x + WsItem->m_Endx; + yg = aRB.y + WsItem->m_Endy; + GRLine( m_canvas->GetClipBox(), aDC, pos.x, pos.y, + xg * scale, yg * scale, aLnW, aClr1 ); break; } } -#else - - // Upper left corner - refy = pageInfo.GetTopMarginMils(); - + wxSize size2( SIZETEXT * scale * 2, SIZETEXT * scale * 2); + wxSize size3( SIZETEXT * scale * 3, SIZETEXT * scale * 3); + wxSize size1_5( SIZETEXT * scale * 1.5, SIZETEXT * scale * 1.5); // lower right corner - xg = pageSize.x - pageInfo.GetRightMarginMils(); - yg = pageSize.y - pageInfo.GetBottomMarginMils(); + refx = aSz.x - aRB.x; + refy = aSz.y - aRB.y; - ipas = ( xg - refx ) / PAS_REF; - gxpas = ( xg - refx ) / ipas; - for( ii = refx + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- ) - { - Line.Printf( wxT( "%d" ), jj ); - - if( ii < xg - PAS_REF / 2 ) - { - GRLine( m_canvas->GetClipBox(), DC, ii * scale, refy * scale, - ii * scale, ( refy + GRID_REF_W ) * scale, width, Color ); - } - DrawGraphicText( m_canvas, DC, - wxPoint( ( ii - gxpas / 2 ) * scale, - ( refy + GRID_REF_W / 2 ) * scale ), - Color, Line, TEXT_ORIENT_HORIZ, size_ref, - GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); - - if( ii < xg - PAS_REF / 2 ) - { - GRLine( m_canvas->GetClipBox(), DC, ii * scale, yg * scale, - ii * scale, ( yg - GRID_REF_W ) * scale, width, Color ); - } - DrawGraphicText( m_canvas, DC, - wxPoint( ( ii - gxpas / 2 ) * scale, - ( yg - GRID_REF_W / 2) * scale ), - Color, Line, TEXT_ORIENT_HORIZ, size_ref, - GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); - } - - ipas = ( yg - refy ) / PAS_REF; - gypas = ( yg - refy ) / ipas; - - for( ii = refy + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- ) - { - if( jj < 26 ) - Line.Printf( wxT( "%c" ), jj + 'A' ); - else // I hope 52 identifiers are enought... - Line.Printf( wxT( "%c" ), 'a' + jj - 26 ); - - if( ii < yg - PAS_REF / 2 ) - { - GRLine( m_canvas->GetClipBox(), DC, refx * scale, ii * scale, - ( refx + GRID_REF_W ) * scale, ii * scale, width, Color ); - } - - DrawGraphicText( m_canvas, DC, - wxPoint( ( refx + GRID_REF_W / 2 ) * scale, - ( ii - gypas / 2 ) * scale ), - Color, Line, TEXT_ORIENT_HORIZ, size_ref, - GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); - - if( ii < yg - PAS_REF / 2 ) - { - GRLine( m_canvas->GetClipBox(), DC, xg * scale, ii * scale, - ( xg - GRID_REF_W ) * scale, ii * scale, width, Color ); - } - DrawGraphicText( m_canvas, DC, - wxPoint( ( xg - GRID_REF_W / 2 ) * scale, - ( ii - gxpas / 2 ) * scale ), - Color, Line, TEXT_ORIENT_HORIZ, size_ref, - GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); - } - -#endif - -#if defined(KICAD_GOST) - // lower right corner - refx = pageSize.x - pageInfo.GetRightMarginMils(); - refy = pageSize.y - pageInfo.GetBottomMarginMils(); - - if( screen->m_ScreenNumber == 1 ) + if( aScr == 1 ) { for( WsItem = &WS_Date; WsItem != NULL; WsItem = WsItem->Pnext ) { @@ -1222,10 +1139,10 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_PODPIS: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); break; case WS_SIZESHEET: @@ -1234,95 +1151,91 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_IDENTSHEET: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - if( screen->m_NumberOfScreen > 1 ) - msg << screen->m_ScreenNumber; - DrawGraphicText( m_canvas, DC, pos, Color, msg, + if( aNScr > 1 ) + msg << aScr; + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, - GR_TEXT_VJUSTIFY_CENTER, width, false, false ); + GR_TEXT_VJUSTIFY_CENTER, aLnW, false, false ); break; case WS_SHEETS: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg << screen->m_NumberOfScreen; - DrawGraphicText( m_canvas, DC, pos, Color, msg, + msg << aNScr; + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, - GR_TEXT_VJUSTIFY_CENTER, width, false, false ); + GR_TEXT_VJUSTIFY_CENTER, aLnW, false, false ); break; case WS_COMPANY_NAME: - msg = GetTitleBlock().GetCompany(); + msg = aTb.GetCompany(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size1_5, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); + aLnW, false, false ); } break; case WS_TITLE: - msg = GetTitleBlock().GetTitle(); + msg = aTb.GetTitle(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size1_5, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); + aLnW, false, false ); } break; case WS_COMMENT1: - msg = GetTitleBlock().GetComment1(); + msg = aTb.GetComment1(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size3, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); - pos.x = (pageInfo.GetLeftMarginMils() + 1260) * scale; - pos.y = (pageInfo.GetTopMarginMils() + 270) * scale; - DrawGraphicText( m_canvas, DC, pos, Color, + aLnW, false, false ); + pos.x = (aLT.x + 1260) * scale; + pos.y = (aLT.y + 270) * scale; + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, 1800, size2, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); + aLnW, false, false ); } break; case WS_COMMENT2: - msg = GetTitleBlock().GetComment2(); + msg = aTb.GetComment2(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); } break; case WS_COMMENT3: - msg = GetTitleBlock().GetComment3(); + msg = aTb.GetComment3(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); } break; case WS_COMMENT4: - msg = GetTitleBlock().GetComment4(); + msg = aTb.GetComment4(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); } break; @@ -1333,12 +1246,10 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid pos.y = ( refy - WsItem->m_Posy ) * scale; case WS_SEGMENT: - xg = pageSize.x - - pageInfo.GetRightMarginMils() - WsItem->m_Endx; - yg = pageSize.y - - pageInfo.GetBottomMarginMils() - WsItem->m_Endy; - GRLine( m_canvas->GetClipBox(), DC, pos.x, pos.y, - xg * scale, yg * scale, width, Color ); + xg = aSz.x - aRB.x - WsItem->m_Endx; + yg = aSz.y - aRB.y - WsItem->m_Endy; + GRLine( m_canvas->GetClipBox(), aDC, pos.x, pos.y, + xg * scale, yg * scale, aLnW, aClr1 ); break; } } @@ -1355,63 +1266,144 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid { case WS_CADRE: // Begin list number > 1 - msg = GetTitleBlock().GetComment1(); + msg = aTb.GetComment1(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size3, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); - pos.x = (pageInfo.GetLeftMarginMils() + 1260) * scale; - pos.y = (pageInfo.GetTopMarginMils() + 270) * scale; - DrawGraphicText( m_canvas, DC, pos, Color, + aLnW, false, false ); + pos.x = (aLT.x + 1260) * scale; + pos.y = (aLT.y + 270) * scale; + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, 1800, size2, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); + aLnW, false, false ); } break; case WS_PODPIS_D: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, - false, false ); + aLnW, false, false ); break; case WS_IDENTSHEET_D: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg << screen->m_ScreenNumber; - DrawGraphicText( m_canvas, DC, pos, Color, + msg << aScr; + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); break; case WS_LEFT_SEGMENT_D: pos.y = ( refy - WsItem->m_Posy ) * scale; case WS_SEGMENT_D: - xg = pageSize.x - - pageInfo.GetRightMarginMils() - WsItem->m_Endx; - yg = pageSize.y - - pageInfo.GetBottomMarginMils() - WsItem->m_Endy; - GRLine( m_canvas->GetClipBox(), DC, pos.x, pos.y, - xg * scale, yg * scale, width, Color ); + xg = aSz.x - aRB.x - WsItem->m_Endx; + yg = aSz.y - aRB.y - WsItem->m_Endy; + GRLine( m_canvas->GetClipBox(), aDC, pos.x, pos.y, + xg * scale, yg * scale, aLnW, aClr1 ); break; } } } #else + // Draw the border. + int ii, jj, ipas, gxpas, gypas; + for( ii = 0; ii < 2; ii++ ) + { + GRRect( m_canvas->GetClipBox(), aDC, refx * scale, refy * scale, + xg * scale, yg * scale, aLnW, aClr1 ); - refx = pageSize.x - pageInfo.GetRightMarginMils() - GRID_REF_W; - refy = pageSize.y - pageInfo.GetBottomMarginMils() - GRID_REF_W; + refx += GRID_REF_W; refy += GRID_REF_W; + xg -= GRID_REF_W; yg -= GRID_REF_W; + } + + // Upper left corner + refx = aLT.x; + refy = aLT.y; + + // lower right corner + xg = aSz.x - aRB.x; + yg = aSz.y - aRB.y; + + ipas = ( xg - refx ) / PAS_REF; + gxpas = ( xg - refx ) / ipas; + for( ii = refx + gxpas, jj = 1; ipas > 0; ii += gxpas, jj++, ipas-- ) + { + Line.Printf( wxT( "%d" ), jj ); + + if( ii < xg - PAS_REF / 2 ) + { + GRLine( m_canvas->GetClipBox(), aDC, ii * scale, refy * scale, + ii * scale, ( refy + GRID_REF_W ) * scale, aLnW, aClr1 ); + } + DrawGraphicText( m_canvas, aDC, + wxPoint( ( ii - gxpas / 2 ) * scale, + ( refy + GRID_REF_W / 2 ) * scale ), + aClr1, Line, TEXT_ORIENT_HORIZ, size_ref, + GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, + aLnW, false, false ); + + if( ii < xg - PAS_REF / 2 ) + { + GRLine( m_canvas->GetClipBox(), aDC, ii * scale, yg * scale, + ii * scale, ( yg - GRID_REF_W ) * scale, aLnW, aClr1 ); + } + DrawGraphicText( m_canvas, aDC, + wxPoint( ( ii - gxpas / 2 ) * scale, + ( yg - GRID_REF_W / 2) * scale ), + aClr1, Line, TEXT_ORIENT_HORIZ, size_ref, + GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, + aLnW, false, false ); + } + + ipas = ( yg - refy ) / PAS_REF; + gypas = ( yg - refy ) / ipas; + + for( ii = refy + gypas, jj = 0; ipas > 0; ii += gypas, jj++, ipas-- ) + { + if( jj < 26 ) + Line.Printf( wxT( "%c" ), jj + 'A' ); + else // I hope 52 identifiers are enought... + Line.Printf( wxT( "%c" ), 'a' + jj - 26 ); + + if( ii < yg - PAS_REF / 2 ) + { + GRLine( m_canvas->GetClipBox(), aDC, refx * scale, ii * scale, + ( refx + GRID_REF_W ) * scale, ii * scale, aLnW, aClr1 ); + } + + DrawGraphicText( m_canvas, aDC, + wxPoint( ( refx + GRID_REF_W / 2 ) * scale, + ( ii - gypas / 2 ) * scale ), + aClr1, Line, TEXT_ORIENT_HORIZ, size_ref, + GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, + aLnW, false, false ); + + if( ii < yg - PAS_REF / 2 ) + { + GRLine( m_canvas->GetClipBox(), aDC, xg * scale, ii * scale, + ( xg - GRID_REF_W ) * scale, ii * scale, aLnW, aClr1 ); + } + DrawGraphicText( m_canvas, aDC, + wxPoint( ( xg - GRID_REF_W / 2 ) * scale, + ( ii - gxpas / 2 ) * scale ), + aClr1, Line, TEXT_ORIENT_HORIZ, size_ref, + GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, + aLnW, false, false ); + } + + int UpperLimit = VARIABLE_BLOCK_START_POSITION; + refx = aSz.x - aRB.x - GRID_REF_W; + refy = aSz.y - aRB.y - GRID_REF_W; for( WsItem = &WS_Date; WsItem != NULL; WsItem = WsItem->Pnext ) { @@ -1424,22 +1416,26 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_DATE: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += GetTitleBlock().GetDate(); - DrawGraphicText( m_canvas, DC, pos, Color, + msg += aTb.GetDate(); + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, true ); + aLnW, false, true ); break; case WS_REV: if( WsItem->m_Legende ) + { msg = WsItem->m_Legende; - msg += GetTitleBlock().GetRevision(); - DrawGraphicText( m_canvas, DC, pos, Color, - msg, TEXT_ORIENT_HORIZ, size, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - GetPenSizeForBold( MIN( size.x, size.y ) ), - false, true ); + GetPenSizeForBold( MIN( size.x, size.y ) ), false, true ); + pos.x += ReturnGraphicTextWidth( msg, size.x, false, false ); + } + msg = aTb.GetRevision(); + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, + GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, + GetPenSizeForBold( MIN( size.x, size.y ) ), false, true ); break; case WS_KICAD_VERSION: @@ -1447,67 +1443,67 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid msg = WsItem->m_Legende; msg += g_ProductName + wxGetApp().GetAppName(); msg += wxT( " " ) + GetBuildVersion(); - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); break; case WS_SIZESHEET: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += pageInfo.GetType(); - DrawGraphicText( m_canvas, DC, pos, Color, + msg += aType; + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); break; case WS_IDENTSHEET: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg << screen->m_ScreenNumber << wxT( "/" ) << screen->m_NumberOfScreen; - DrawGraphicText( m_canvas, DC, pos, Color, + msg << aScr << wxT( "/" ) << aNScr; + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); break; case WS_FILENAME: - { - wxString fname, fext; - wxFileName::SplitPath( screen->GetFileName(), (wxString*) NULL, &fname, &fext ); + { + wxString fname, fext; + wxFileName::SplitPath( aFlNm, (wxString*) NULL, &fname, &fext ); - if( WsItem->m_Legende ) - msg = WsItem->m_Legende; + if( WsItem->m_Legende ) + msg = WsItem->m_Legende; - msg << fname << wxT( "." ) << fext; - DrawGraphicText( m_canvas, DC, pos, Color, - msg, TEXT_ORIENT_HORIZ, size, - GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); - } - break; + msg << fname << wxT( "." ) << fext; + DrawGraphicText( m_canvas, aDC, pos, aClr1, + msg, TEXT_ORIENT_HORIZ, size, + GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, + aLnW, false, false ); + } + break; case WS_FULLSHEETNAME: if( WsItem->m_Legende ) msg = WsItem->m_Legende; msg += GetScreenDesc(); - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); break; case WS_COMPANY_NAME: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += GetTitleBlock().GetCompany(); + msg += aTb.GetCompany(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, GetPenSizeForBold( MIN( size.x, size.y ) ), @@ -1518,25 +1514,29 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_TITLE: if( WsItem->m_Legende ) + { msg = WsItem->m_Legende; - msg += GetTitleBlock().GetTitle(); - DrawGraphicText( m_canvas, DC, pos, Color, - msg, TEXT_ORIENT_HORIZ, size, + DrawGraphicText( m_canvas, aDC, pos, aClr1, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - GetPenSizeForBold( MIN( size.x, size.y ) ), - false, true ); + GetPenSizeForBold( MIN( size.x, size.y ) ), false, true ); + pos.x += ReturnGraphicTextWidth( msg, size.x, false, false ); + } + msg = aTb.GetTitle(); + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, + GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, + GetPenSizeForBold( MIN( size.x, size.y ) ), false, true ); break; case WS_COMMENT1: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += GetTitleBlock().GetComment1(); + msg += aTb.GetComment1(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); UpperLimit = MAX( UpperLimit, WsItem->m_Posy + SIZETEXT ); } break; @@ -1544,13 +1544,13 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_COMMENT2: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += GetTitleBlock().GetComment2(); + msg += aTb.GetComment2(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); UpperLimit = MAX( UpperLimit, WsItem->m_Posy + SIZETEXT ); } break; @@ -1558,13 +1558,13 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_COMMENT3: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += GetTitleBlock().GetComment3(); + msg += aTb.GetComment3(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); UpperLimit = MAX( UpperLimit, WsItem->m_Posy + SIZETEXT ); } break; @@ -1572,13 +1572,13 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid case WS_COMMENT4: if( WsItem->m_Legende ) msg = WsItem->m_Legende; - msg += GetTitleBlock().GetComment4(); + msg += aTb.GetComment4(); if( !msg.IsEmpty() ) { - DrawGraphicText( m_canvas, DC, pos, Color, + DrawGraphicText( m_canvas, aDC, pos, aClr2, msg, TEXT_ORIENT_HORIZ, size, GR_TEXT_HJUSTIFY_LEFT, GR_TEXT_VJUSTIFY_CENTER, - width, false, false ); + aLnW, false, false ); UpperLimit = MAX( UpperLimit, WsItem->m_Posy + SIZETEXT ); } break; @@ -1594,12 +1594,10 @@ void EDA_DRAW_FRAME::TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_wid pos.y = (refy - WsItem->m_Posy) * scale; case WS_SEGMENT: - xg = pageSize.x - - GRID_REF_W - pageInfo.GetRightMarginMils() - WsItem->m_Endx; - yg = pageSize.y - - GRID_REF_W - pageInfo.GetBottomMarginMils() - WsItem->m_Endy; - GRLine( m_canvas->GetClipBox(), DC, pos.x, pos.y, - xg * scale, yg * scale, width, Color ); + xg = aSz.x - GRID_REF_W - aRB.x - WsItem->m_Endx; + yg = aSz.y - GRID_REF_W - aRB.y - WsItem->m_Endy; + GRLine( m_canvas->GetClipBox(), aDC, pos.x, pos.y, + xg * scale, yg * scale, aLnW, aClr1 ); break; } } diff --git a/eeschema/dialogs/dialog_plot_schematic_PS.cpp b/eeschema/dialogs/dialog_plot_schematic_PS.cpp index d932fffe38..b47487756d 100644 --- a/eeschema/dialogs/dialog_plot_schematic_PS.cpp +++ b/eeschema/dialogs/dialog_plot_schematic_PS.cpp @@ -220,10 +220,12 @@ void DIALOG_PLOT_SCHEMATIC_PS::createPSFile() { case PAGE_SIZE_A: plotPage.SetType( wxT( "A" ) ); + plotPage.SetPortrait( actualPage.IsPortrait() ); break; case PAGE_SIZE_A4: plotPage.SetType( wxT( "A4" ) ); + plotPage.SetPortrait( actualPage.IsPortrait() ); break; case PAGE_SIZE_AUTO: diff --git a/eeschema/dialogs/dialog_print_using_printer.cpp b/eeschema/dialogs/dialog_print_using_printer.cpp index a0fc480a29..21c85a7eab 100644 --- a/eeschema/dialogs/dialog_print_using_printer.cpp +++ b/eeschema/dialogs/dialog_print_using_printer.cpp @@ -111,6 +111,24 @@ void DIALOG_PRINT_USING_PRINTER::OnInitDialog( wxInitDialogEvent& event ) { SCH_EDIT_FRAME* parent = GetParent(); + // Initialize page specific print setup dialog settings. + const PAGE_INFO& pageInfo = parent->GetScreen()->GetPageSettings(); + wxPageSetupDialogData& pageSetupDialogData = parent->GetPageSetupData(); + + pageSetupDialogData.SetPaperId( pageInfo.GetPaperId() ); + + if( pageInfo.IsCustom() ) + { + if( pageInfo.IsPortrait() ) + pageSetupDialogData.SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ), + Mils2mm( pageInfo.GetHeightMils() ) ) ); + else + pageSetupDialogData.SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ), + Mils2mm( pageInfo.GetWidthMils() ) ) ); + } + + pageSetupDialogData.GetPrintData().SetOrientation( pageInfo.GetWxOrientation() ); + if ( GetSizer() ) GetSizer()->SetSizeHints( this ); @@ -342,6 +360,11 @@ void SCH_PRINTOUT::DrawPage( SCH_SCREEN* aScreen ) wxLogDebug( wxT( "Fit rectangle: %d, %d, %d, %d" ), fitRect.x, fitRect.y, fitRect.width, fitRect.height ); + int xoffset = ( fitRect.width - pageSizeIU.x ) / 2; + int yoffset = ( fitRect.height - pageSizeIU.y ) / 2; + + OffsetLogicalOrigin( xoffset, yoffset ); + GRResetPenAndBrush( dc ); if( parent->GetPrintMonochrome() ) diff --git a/eeschema/eeschema_config.cpp b/eeschema/eeschema_config.cpp index 1ce4b12561..3394abbc83 100644 --- a/eeschema/eeschema_config.cpp +++ b/eeschema/eeschema_config.cpp @@ -447,8 +447,8 @@ PARAM_CFG_ARRAY& SCH_EDIT_FRAME::GetConfigurationSettings( void ) if( !m_configSettings.empty() ) return m_configSettings; - m_configSettings.push_back( new PARAM_CFG_INT( wxT( "Unite" ), - (int*)&g_UserUnit, 0 ) ); + m_configSettings.push_back( new PARAM_CFG_INT( true, wxT( "Units" ), + (int*)&g_UserUnit, MILLIMETRES ) ); m_configSettings.push_back( new PARAM_CFG_SETCOLOR( true, wxT( "ColWire" ), &g_LayerDescr.LayerColor[LAYER_WIRE], GREEN ) ); diff --git a/eeschema/load_one_schematic_file.cpp b/eeschema/load_one_schematic_file.cpp index a8a2bfa4ce..70b8cd660d 100644 --- a/eeschema/load_one_schematic_file.cpp +++ b/eeschema/load_one_schematic_file.cpp @@ -195,7 +195,7 @@ again." ); case 'T': // It is a text item. if( sscanf( sline, "%s", Name1 ) != 1 ) { - MsgDiag.Printf( wxT( "Eeschema file text load error at line %d" ), + MsgDiag.Printf( _( "Eeschema file text load error at line %d" ), reader.LineNumber() ); itemLoaded = false; } @@ -211,7 +211,7 @@ again." ); default: itemLoaded = false; - MsgDiag.Printf( wxT( "Eeschema file undefined object at line %d, aborted" ), + MsgDiag.Printf( _( "Eeschema file undefined object at line %d, aborted" ), reader.LineNumber() ); MsgDiag << wxT( "\n" ) << FROM_UTF8( line ); } @@ -304,7 +304,7 @@ bool ReadSchemaDescr( LINE_READER* aLine, wxString& aMsgDiag, SCH_SCREEN* aScree if( !pageInfo.SetType( pagename ) ) { - aMsgDiag.Printf( wxT( "Eeschema file dimension definition error \ + aMsgDiag.Printf( _( "Eeschema file dimension definition error \ line %d, \aAbort reading file.\n" ), aLine->LineNumber() ); aMsgDiag << FROM_UTF8( line ); @@ -322,7 +322,7 @@ line %d, \aAbort reading file.\n" ), } } - // portrait only supported in non custom sizes + // non custom size, set portrait if its present else if( orient && !strcmp( orient, "portrait" ) ) { pageInfo.SetPortrait( true ); diff --git a/eeschema/sch_screen.cpp b/eeschema/sch_screen.cpp index e4ae8eb9ab..72afa485a3 100644 --- a/eeschema/sch_screen.cpp +++ b/eeschema/sch_screen.cpp @@ -98,7 +98,7 @@ static GRID_TYPE SchematicGridList[] = { SCH_SCREEN::SCH_SCREEN() : BASE_SCREEN( SCH_SCREEN_T ), - m_paper( wxT( "A4" ) ) + m_paper( wxT( "A4" ), IsGOST() ) { size_t i; diff --git a/eeschema/schframe.cpp b/eeschema/schframe.cpp index 8c75d3dad4..0b9f8364a0 100644 --- a/eeschema/schframe.cpp +++ b/eeschema/schframe.cpp @@ -229,9 +229,11 @@ SCH_EDIT_FRAME::SCH_EDIT_FRAME( wxWindow* father, ReCreateVToolbar(); ReCreateOptToolbar(); - /* Initialize print and page setup dialog settings. */ - m_pageSetupData.GetPrintData().SetQuality( wxPRINT_QUALITY_HIGH ); - m_pageSetupData.GetPrintData().SetOrientation( wxLANDSCAPE ); + // Initialize common print setup dialog settings. + m_pageSetupData.GetPrintData().SetPrintMode( wxPRINT_MODE_PRINTER ); + m_pageSetupData.GetPrintData().SetQuality( wxPRINT_QUALITY_MEDIUM ); + m_pageSetupData.GetPrintData().SetBin( wxPRINTBIN_AUTO ); + m_pageSetupData.GetPrintData().SetNoCopies( 1 ); m_auimgr.SetManagedWindow( this ); @@ -529,7 +531,9 @@ wxString SCH_EDIT_FRAME::GetUniqueFilenameForCurrentSheet() filename.RemoveLast(); #if defined(KICAD_GOST) #ifndef __WINDOWS__ - filename.Remove( 0, 1 ); + wxString newfn; + if( filename.StartsWith( wxT( "-" ), &newfn ) ) + filename = newfn; #endif #endif } diff --git a/include/common.h b/include/common.h index cfb9abd940..4017956a4c 100644 --- a/include/common.h +++ b/include/common.h @@ -39,6 +39,17 @@ #include +#if !wxUSE_PRINTING_ARCHITECTURE +# error "You must use '--enable-printarch' in your wx library configuration." +#endif + +#if defined( __WXGTK__ ) +# if !wxUSE_LIBGNOMEPRINT && !wxUSE_GTKPRINT +# error "You must use '--with-gnomeprint' or '--with-gtkprint' in your wx library configuration." +# endif +#endif + + class wxAboutDialogInfo; // Flag for special keys @@ -106,6 +117,16 @@ enum pseudokeys { #define OFF 0 +/// Convert mm to mils. +inline int Mm2mils( double x ) { return wxRound( x * 1000./25.4 ); } + +/// Convert mils to mm. +inline int Mils2mm( double x ) { return wxRound( x * 25.4 / 1000. ); } + +/// Return whether GOST is in play +bool IsGOST(); + + enum EDA_UNITS_T { INCHES = 0, MILLIMETRES = 1, @@ -131,10 +152,27 @@ class PAGE_INFO { public: - static const wxString Custom; /// "User" defined page type + PAGE_INFO( const wxString& aType = PAGE_INFO::A3, bool IsPortrait = false ); + + // paper size names which are part of the public API, pass to SetType() or + // above constructor. + + static const wxString A4; + static const wxString A3; + static const wxString A2; + static const wxString A1; + static const wxString A0; + static const wxString A; + static const wxString B; + static const wxString C; + static const wxString D; + static const wxString E; + static const wxString GERBER; + static const wxString USLetter; + static const wxString USLegal; + static const wxString USLedger; + static const wxString Custom; ///< "User" defined page type - PAGE_INFO( const wxString& aType = wxT( "A3" ) ); - PAGE_INFO( const wxSize& aSizeMils, const wxString& aName ); /** * Function SetType @@ -150,7 +188,7 @@ public: * * @return bool - true iff @a aStandarePageDescription was a recognized type. */ - bool SetType( const wxString& aStandardPageDescriptionName ); + bool SetType( const wxString& aStandardPageDescriptionName, bool IsPortrait = false ); const wxString& GetType() const { return m_type; } /** @@ -171,6 +209,19 @@ public: void SetPortrait( bool isPortrait ); bool IsPortrait() const { return m_portrait; } + /** + * Function GetWxOrientation. + * @return int - ws' style printing orientation. + */ + int GetWxOrientation() const { return IsPortrait() ? wxPORTRAIT : wxLANDSCAPE; } + + /** + * Function GetPaperId + * @return wxPaperSize - wxPrintData's style paper id associated with + * page type name. + */ + wxPaperSize GetPaperId() const { return m_paper_id; } + void SetWidthMils( int aWidthInMils ); int GetWidthMils() const { return m_size.x; } @@ -196,29 +247,79 @@ public: const wxSize GetSizeIU() const { return wxSize( GetWidthIU(), GetHeightIU() ); } #endif + /** + * Function GetLeftMarginMils. + * @return int - logical page left margin in mils. + */ int GetLeftMarginMils() const { return m_left_margin; } + + /** + * Function GetLeftMarginMils. + * @return int - logical page right margin in mils. + */ int GetRightMarginMils() const { return m_right_margin; } + + /** + * Function GetLeftMarginMils. + * @return int - logical page top margin in mils. + */ int GetTopMarginMils() const { return m_top_margin; } + + /** + * Function GetBottomMarginMils. + * @return int - logical page bottom margin in mils. + */ int GetBottomMarginMils() const { return m_bottom_margin; } + /** + * Function SetLeftMarginMils + * sets left page margin to @a aMargin in mils. + */ void SetLeftMarginMils( int aMargin ) { m_left_margin = aMargin; } + + /** + * Function SetRightMarginMils + * sets right page margin to @a aMargin in mils. + */ void SetRightMarginMils( int aMargin ) { m_right_margin = aMargin; } + + /** + * Function SetTopMarginMils + * sets top page margin to @a aMargin in mils. + */ void SetTopMarginMils( int aMargin ) { m_top_margin = aMargin; } + + /** + * Function SetBottomMarginMils + * sets bottom page margin to @a aMargin in mils. + */ void SetBottomMarginMils( int aMargin ) { m_bottom_margin = aMargin; } /** - * Function SetUserWidthMils - * sets the width of type "User" page in mils, for any type "User" page + * Function SetCustomWidthMils + * sets the width of Custom page in mils, for any custom page * constructed or made via SetType() after making this call. */ - static void SetUserWidthMils( int aWidthInMils ); + static void SetCustomWidthMils( int aWidthInMils ); /** - * Function SetUserHeightMils - * sets the height type "User" page in mils, for any type "User" page + * Function SetCustomHeightMils + * sets the height of Custom page in mils, for any custom page * constructed or made via SetType() after making this call. */ - static void SetUserHeightMils( int aHeightInMils ); + static void SetCustomHeightMils( int aHeightInMils ); + + /** + * Function GetCustomWidthMils. + * @return int - custom paper width in mils. + */ + static int GetCustomWidthMils() { return s_user_width; } + + /** + * Function GetCustomHeightMils. + * @return int - custom paper height in mils. + */ + static int GetCustomHeightMils() { return s_user_height; } /** * Function GetStandardSizes @@ -226,6 +327,11 @@ public: static wxArrayString GetStandardSizes(); */ +protected: + // only the class implementation(s) may use this constructor + PAGE_INFO( const wxSize& aSizeMils, const wxString& aName, wxPaperSize aPaperId ); + + private: // standard pre-defined sizes @@ -252,6 +358,11 @@ private: wxString m_type; ///< paper type: A4, A3, etc. wxSize m_size; ///< mils +/// Min and max page sizes for clamping. +#define MIN_PAGE_SIZE 4000 +#define MAX_PAGE_SIZE 48000 + + int m_left_margin; int m_right_margin; int m_top_margin; @@ -259,10 +370,14 @@ private: bool m_portrait; ///< true if portrait, false if landscape + wxPaperSize m_paper_id; ///< wx' style paper id. + static int s_user_height; static int s_user_width; - void updatePortrait(); + void updatePortrait(); + + void setMargins(); }; diff --git a/include/plot_common.h b/include/plot_common.h index dca0c8c2fe..3da459e1f5 100644 --- a/include/plot_common.h +++ b/include/plot_common.h @@ -412,6 +412,8 @@ public: virtual void SetLayerPolarity( bool aPositive ) {} + void user_to_device_coordinates( wxPoint& pos ); // overload + protected: double plot_scale_adjX, plot_scale_adjY; double plot_width_adj; diff --git a/include/worksheet.h b/include/worksheet.h index 6e7d3ed514..9ed0081f97 100644 --- a/include/worksheet.h +++ b/include/worksheet.h @@ -2,77 +2,79 @@ /* worksheet.h */ /***************/ -/* Values are in 1/1000 inch */ +// Values are in 1/1000 inch -#ifndef __WORKSHEET_H__ -#define __WORKSHEET_H__ +#ifndef WORKSHEET_H_ +#define WORKSHEET_H_ -#define GRID_REF_W 70 /* height of the band reference grid */ -#define SIZETEXT 60 /* worksheet text size */ -#define SIZETEXT_REF 50 /* worksheet frame reference text size */ -#define PAS_REF 2000 /* no reference markings on worksheet frame */ -#define TEXT_VTAB_HEIGHT SIZETEXT * 2 +#include // Mm2mils() + +#define GRID_REF_W 70 // height of the band reference grid +#define SIZETEXT 60 // worksheet text size +#define SIZETEXT_REF 50 // worksheet frame reference text size +#define PAS_REF 2000 // no reference markings on worksheet frame +#define TEXT_VTAB_HEIGHT (SIZETEXT * 2) #if defined(KICAD_GOST) -#define STAMP_OX 185 * 10000 / 254 -#define STAMP_OY 55 * 10000 / 254 +#define STAMP_OX Mm2mils( 185 ) +#define STAMP_OY Mm2mils( 55 ) -#define STAMP_Y_0 0 -#define STAMP_Y_5 5 * 10000 / 254 -#define STAMP_Y_8 8 * 10000 / 254 -#define STAMP_Y_7 7 * 10000 / 254 -#define STAMP_Y_10 10 * 10000 / 254 -#define STAMP_Y_14 14 * 10000 / 254 -#define STAMP_Y_15 15 * 10000 / 254 -#define STAMP_Y_20 20 * 10000 / 254 -#define STAMP_Y_25 25 * 10000 / 254 -#define STAMP_Y_30 30 * 10000 / 254 -#define STAMP_Y_35 35 * 10000 / 254 -#define STAMP_Y_40 40 * 10000 / 254 -#define STAMP_Y_45 45 * 10000 / 254 -#define STAMP_Y_50 50 * 10000 / 254 -#define STAMP_Y_55 55 * 10000 / 254 +#define STAMP_Y_0 0 +#define STAMP_Y_5 Mm2mils( 5 ) +#define STAMP_Y_8 Mm2mils( 8 ) +#define STAMP_Y_7 Mm2mils( 7 ) +#define STAMP_Y_10 Mm2mils( 10 ) +#define STAMP_Y_14 Mm2mils( 14 ) +#define STAMP_Y_15 Mm2mils( 15 ) +#define STAMP_Y_20 Mm2mils( 20 ) +#define STAMP_Y_25 Mm2mils( 25 ) +#define STAMP_Y_30 Mm2mils( 30 ) +#define STAMP_Y_35 Mm2mils( 35 ) +#define STAMP_Y_40 Mm2mils( 40 ) +#define STAMP_Y_45 Mm2mils( 45 ) +#define STAMP_Y_50 Mm2mils( 50 ) +#define STAMP_Y_55 Mm2mils( 55 ) #define STAMP_X_0 0 -#define STAMP_X_10 10 * 10000 / 254 -#define STAMP_X_14 14 * 10000 / 254 -#define STAMP_X_18 18 * 10000 / 254 -#define STAMP_X_30 30 * 10000 / 254 -#define STAMP_X_35 35 * 10000 / 254 -#define STAMP_X_40 40 * 10000 / 254 -#define STAMP_X_45 45 * 10000 / 254 -#define STAMP_X_50 50 * 10000 / 254 -#define STAMP_X_53 53 * 10000 / 254 -#define STAMP_X_65 65 * 10000 / 254 -#define STAMP_X_70 70 * 10000 / 254 -#define STAMP_X_84 84 * 10000 / 254 -#define STAMP_X_85 85 * 10000 / 254 -#define STAMP_X_120 120 * 10000 / 254 -#define STAMP_X_130 130 * 10000 / 254 -#define STAMP_X_137 137 * 10000 / 254 -#define STAMP_X_145 145 * 10000 / 254 -#define STAMP_X_168 168 * 10000 / 254 -#define STAMP_X_178 178 * 10000 / 254 -#define STAMP_X_185 185 * 10000 / 254 +#define STAMP_X_10 Mm2mils( 10 ) +#define STAMP_X_14 Mm2mils( 14 ) +#define STAMP_X_18 Mm2mils( 18 ) +#define STAMP_X_30 Mm2mils( 30 ) +#define STAMP_X_35 Mm2mils( 35 ) +#define STAMP_X_40 Mm2mils( 40 ) +#define STAMP_X_45 Mm2mils( 45 ) +#define STAMP_X_50 Mm2mils( 50 ) +#define STAMP_X_53 Mm2mils( 53 ) +#define STAMP_X_65 Mm2mils( 65 ) +#define STAMP_X_70 Mm2mils( 70 ) +#define STAMP_X_84 Mm2mils( 84 ) +#define STAMP_X_85 Mm2mils( 85 ) +#define STAMP_X_120 Mm2mils( 120 ) +#define STAMP_X_130 Mm2mils( 130 ) +#define STAMP_X_137 Mm2mils( 137 ) +#define STAMP_X_145 Mm2mils( 145 ) +#define STAMP_X_168 Mm2mils( 168 ) +#define STAMP_X_178 Mm2mils( 178 ) +#define STAMP_X_185 Mm2mils( 185 ) -#define STAMP_5 5 * 10000 / 254 -#define STAMP_7 7 * 10000 / 254 -#define STAMP_12 12 * 10000 / 254 +#define STAMP_5 Mm2mils( 5 ) +#define STAMP_7 Mm2mils( 7 ) +#define STAMP_12 Mm2mils( 12 ) -#define STAMP_145 145 * 10000 / 254 -#define STAMP_110 110 * 10000 / 254 -#define STAMP_85 85 * 10000 / 254 -#define STAMP_60 60 * 10000 / 254 -#define STAMP_25 25 * 10000 / 254 +#define STAMP_145 Mm2mils( 145 ) +#define STAMP_110 Mm2mils( 110 ) +#define STAMP_85 Mm2mils( 85 ) +#define STAMP_60 Mm2mils( 60 ) +#define STAMP_25 Mm2mils( 25 ) -#define STAMP_287 287 * 10000 / 254 -#define STAMP_227 227 * 10000 / 254 -#define STAMP_167 167 * 10000 / 254 +#define STAMP_287 Mm2mils( 287 ) +#define STAMP_227 Mm2mils( 227 ) +#define STAMP_167 Mm2mils( 167 ) #endif -/* The coordinates below are relative to the bottom right corner of page and - * will be subtracted from this origin. - */ + +// The coordinates below are relative to the bottom right corner of page and +// will be subtracted from this origin. #define BLOCK_OX 4200 #define BLOCK_KICAD_VERSION_X BLOCK_OX - SIZETEXT #define BLOCK_KICAD_VERSION_Y SIZETEXT @@ -98,6 +100,7 @@ #define BLOCK_COMMENT3_Y (SIZETEXT * 17) #define BLOCK_COMMENT4_Y (SIZETEXT * 19) + struct Ki_WorkSheetData { public: @@ -109,7 +112,8 @@ public: const wxChar* m_Text; }; -/* Work sheet structure type definitions. */ + +/// Work sheet structure type definitions. enum TypeKi_WorkSheetData { WS_DATE, WS_REV, @@ -249,4 +253,4 @@ extern Ki_WorkSheetData WS_Segm4_LT; extern Ki_WorkSheetData WS_Segm5_LT; #endif -#endif /* __WORKSHEET_H__ */ +#endif // WORKSHEET_H_ diff --git a/include/wxstruct.h b/include/wxstruct.h index f2f63d25be..9d84072058 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -447,7 +447,6 @@ protected: */ virtual void unitsChangeRefresh(); - public: EDA_DRAW_FRAME( wxWindow* father, int idtype, const wxString& title, const wxPoint& pos, const wxSize& size, @@ -667,10 +666,32 @@ public: * Function GetZoom * @return The current zoom level. */ - double GetZoom( void ); + double GetZoom(); - void TraceWorkSheet( wxDC* DC, BASE_SCREEN* screen, int line_width ); - void PlotWorkSheet( PLOTTER *plotter, BASE_SCREEN* screen ); + void TraceWorkSheet( wxDC* aDC, BASE_SCREEN* aScreen, int aLineWidth ); + + /** + * Function TraceWorkSheet is a core function for drawing of the page layout with + * the frame and the basic inscriptions. + * @param aDC The device context. + * @param aSz The size of the page layout. + * @param aLT The left top margin of the page layout. + * @param aRB The right bottom margin of the page layout. + * @param aType The paper size type (for basic inscriptions). + * @param aFlNm The file name (for basic inscriptions). + * @param aTb The block of titles (for basic inscriptions). + * @param aNScr The number of screens (for basic inscriptions). + * @param aScr The screen number (for basic inscriptions). + * @param aLnW The line width for drawing. + * @param aClr1 The color for drawing. + * @param aClr2 The colr for inscriptions. + */ + void TraceWorkSheet( wxDC* aDC, wxSize& aSz, wxPoint& aLT, wxPoint& aRB, + wxString& aType, wxString& aFlNm, TITLE_BLOCK& aTb, + int aNScr, int aScr, int aLnW, EDA_Colors aClr1 = RED, + EDA_Colors aClr2 = RED ); + + void PlotWorkSheet( PLOTTER* aPlotter, BASE_SCREEN* aScreen ); /** * Function GetXYSheetReferences diff --git a/pcbnew/CMakeLists.txt b/pcbnew/CMakeLists.txt index 92140becdc..55b0ca2bd8 100644 --- a/pcbnew/CMakeLists.txt +++ b/pcbnew/CMakeLists.txt @@ -205,9 +205,7 @@ set(PCBNEW_SRCS ### # We need some extra sources from common ### -set(PCBNEW_COMMON_SRCS - ../common/dialogs/dialog_page_settings.cpp -) +#set(PCBNEW_COMMON_SRCS ../common/dialogs/dialog_page_settings.cpp ) ### diff --git a/pcbnew/class_board.cpp b/pcbnew/class_board.cpp index 1026464c9a..1d07f19b8a 100644 --- a/pcbnew/class_board.cpp +++ b/pcbnew/class_board.cpp @@ -30,6 +30,7 @@ wxPoint BOARD_ITEM::ZeroOffset( 0, 0 ); BOARD::BOARD() : BOARD_ITEM( (BOARD_ITEM*) NULL, PCB_T ), m_NetInfo( this ), + m_paper( IsGOST() ? PAGE_INFO::A4 : PAGE_INFO::A3, IsGOST() ), m_NetClasses( this ) { // we have not loaded a board yet, assume latest until then. diff --git a/pcbnew/dialogs/dialog_print_using_printer.cpp b/pcbnew/dialogs/dialog_print_using_printer.cpp index 10fa3d12a6..e4985b19ad 100644 --- a/pcbnew/dialogs/dialog_print_using_printer.cpp +++ b/pcbnew/dialogs/dialog_print_using_printer.cpp @@ -96,6 +96,8 @@ void PCB_EDIT_FRAME::ToPrinter( wxCommandEvent& event ) * Display the print dialog */ { + const PAGE_INFO& pageInfo = GetPageSettings(); + if( s_PrintData == NULL ) // First print { s_PrintData = new wxPrintData(); @@ -104,14 +106,33 @@ void PCB_EDIT_FRAME::ToPrinter( wxCommandEvent& event ) { DisplayError( this, _( "Error Init Printer info" ) ); } - s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGHT; + s_PrintData->SetQuality( wxPRINT_QUALITY_HIGH ); // Default resolution = HIGH; } - s_PrintData->SetOrientation( GetPageSettings().IsPortrait() ? wxPORTRAIT : wxLANDSCAPE ); + if( s_pageSetupData == NULL ) + s_pageSetupData = new wxPageSetupDialogData( *s_PrintData ); - DIALOG_PRINT_USING_PRINTER* frame = new DIALOG_PRINT_USING_PRINTER( this ); + s_pageSetupData->SetPaperId( pageInfo.GetPaperId() ); - frame->ShowModal(); frame->Destroy(); + if( pageInfo.IsCustom() ) + { + if( pageInfo.IsPortrait() ) + s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetWidthMils() ), + Mils2mm( pageInfo.GetHeightMils() ) ) ); + else + s_pageSetupData->SetPaperSize( wxSize( Mils2mm( pageInfo.GetHeightMils() ), + Mils2mm( pageInfo.GetWidthMils() ) ) ); + } + + s_pageSetupData->SetMarginTopLeft( wxPoint( 0, 0 ) ); + s_pageSetupData->SetMarginBottomRight( wxPoint( 0, 0 ) ); + s_pageSetupData->GetPrintData().SetOrientation( pageInfo.GetWxOrientation() ); + + *s_PrintData = s_pageSetupData->GetPrintData(); + + DIALOG_PRINT_USING_PRINTER dlg( this ); + + dlg.ShowModal(); } @@ -147,14 +168,6 @@ void DIALOG_PRINT_USING_PRINTER::InitValues( ) int layer_max = NB_LAYERS; wxString msg; BOARD* board = m_Parent->GetBoard(); - if( s_pageSetupData == NULL ) - { - s_pageSetupData = new wxPageSetupDialogData; - // Set initial page margins. - // Margins are already set in Pcbnew, so we cans use 0 - s_pageSetupData->SetMarginTopLeft(wxPoint(0, 0)); - s_pageSetupData->SetMarginBottomRight(wxPoint(0, 0)); - } s_Parameters.m_PageSetupData = s_pageSetupData; @@ -203,7 +216,6 @@ void DIALOG_PRINT_USING_PRINTER::InitValues( ) } } - // Option for excluding contents of "Edges Pcb" layer m_Exclude_Edges_Pcb->Show( true ); @@ -269,10 +281,10 @@ void DIALOG_PRINT_USING_PRINTER::InitValues( ) m_DialogPenWidth->SetValue( ReturnStringFromValue( g_UserUnit, s_Parameters.m_PenDefaultSize, m_Parent->GetInternalUnits() ) ); - // Create scale adjust option msg.Printf( wxT( "%f" ), s_Parameters.m_XScaleAdjust ); m_FineAdjustXscaleOpt->SetValue( msg ); + msg.Printf( wxT( "%f" ), s_Parameters.m_YScaleAdjust ); m_FineAdjustYscaleOpt->SetValue( msg ); @@ -416,11 +428,10 @@ void DIALOG_PRINT_USING_PRINTER::SetPrintParameters( ) /**********************************************/ void DIALOG_PRINT_USING_PRINTER::SetPenWidth() /***********************************************/ - -/* Get the new pen width value, and verify min et max value - * NOTE: s_Parameters.m_PenDefaultSize is in internal units - */ { + // Get the new pen width value, and verify min et max value + // NOTE: s_Parameters.m_PenDefaultSize is in internal units + s_Parameters.m_PenDefaultSize = ReturnValueFromTextCtrl( *m_DialogPenWidth, m_Parent->GetInternalUnits() ); if( s_Parameters.m_PenDefaultSize > WIDTH_MAX_VALUE ) @@ -443,6 +454,7 @@ void DIALOG_PRINT_USING_PRINTER::OnScaleSelectionClick( wxCommandEvent& event ) { double scale = s_ScaleList[m_ScaleOption->GetSelection()]; bool enable = (scale == 1.0); + if( m_FineAdjustXscaleOpt ) m_FineAdjustXscaleOpt->Enable(enable); if( m_FineAdjustYscaleOpt ) @@ -453,12 +465,7 @@ void DIALOG_PRINT_USING_PRINTER::OnScaleSelectionClick( wxCommandEvent& event ) /**********************************************************/ void DIALOG_PRINT_USING_PRINTER::OnPageSetup( wxCommandEvent& event ) /**********************************************************/ - -/* Open a dialog box for printer setup (printer options, page size ...) - */ { - *s_pageSetupData = *s_PrintData; - wxPageSetupDialog pageSetupDialog(this, s_pageSetupData); pageSetupDialog.ShowModal(); @@ -470,9 +477,6 @@ void DIALOG_PRINT_USING_PRINTER::OnPageSetup( wxCommandEvent& event ) /************************************************************/ void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event ) /************************************************************/ - -/* Open and display a previewer frame for printing - */ { SetPrintParameters( ); @@ -499,7 +503,6 @@ void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event ) return; } - // Uses the parent position and size. // @todo uses last position and size ans store them when exit in m_Config wxPoint WPos = m_Parent->GetPosition(); @@ -515,9 +518,6 @@ void DIALOG_PRINT_USING_PRINTER::OnPrintPreview( wxCommandEvent& event ) /***************************************************************************/ void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event ) /***************************************************************************/ - -/* Called on activate Print button - */ { SetPrintParameters( ); @@ -536,7 +536,8 @@ void DIALOG_PRINT_USING_PRINTER::OnPrintButtonClick( wxCommandEvent& event ) wxString title = _( "Print" ); BOARD_PRINTOUT_CONTROLER printout( s_Parameters, m_Parent, title ); -#if !defined(__WINDOWS__) && !wxCHECK_VERSION(2,9,0) + // Alexander's patch had this removed altogether, waiting for testing. +#if 0 && !defined(__WINDOWS__) && !wxCHECK_VERSION(2,9,0) wxDC* dc = printout.GetDC(); ( (wxPostScriptDC*) dc )->SetResolution( 600 ); // Postscript DC resolution is 600 ppi #endif diff --git a/pcbnew/plot_rtn.cpp b/pcbnew/plot_rtn.cpp index 0d3f0ca685..70197e6d06 100644 --- a/pcbnew/plot_rtn.cpp +++ b/pcbnew/plot_rtn.cpp @@ -32,12 +32,6 @@ static void Plot_Edges_Modules( PLOTTER* plotter, BOARD* pcb, int aLayerMask, static void PlotTextModule( PLOTTER* plotter, TEXTE_MODULE* pt_texte, EDA_DRAW_MODE_T trace_mode ); -static int doIntValueFitToBand( int aInt, int aMin, int aMax ) -{ - if( aInt < aMin ) return aMin; - if( aInt > aMax ) return aMax; - return aInt; -} /* Creates the plot for silkscreen layers */ @@ -1024,7 +1018,7 @@ void PCB_BASE_FRAME::PlotDrillMark( PLOTTER* aPlotter, diam.x = diam.y = pts->GetDrillValue(); diam.x -= aPlotter->get_plot_width_adj(); - diam.x = doIntValueFitToBand( diam.x, 1, pts->m_Width - 1 ); + diam.x = Clamp( 1, diam.x, pts->m_Width - 1 ); aPlotter->flash_pad_circle( pos, diam.x, aTraceMode ); } @@ -1042,9 +1036,9 @@ void PCB_BASE_FRAME::PlotDrillMark( PLOTTER* aPlotter, { diam = pad->GetDrillSize(); diam.x -= aPlotter->get_plot_width_adj(); - diam.x = doIntValueFitToBand( diam.x, 1, pad->GetSize().x - 1 ); + diam.x = Clamp( 1, diam.x, pad->GetSize().x - 1 ); diam.y -= aPlotter->get_plot_width_adj(); - diam.y = doIntValueFitToBand( diam.y, 1, pad->GetSize().y - 1 ); + diam.y = Clamp( 1, diam.y, pad->GetSize().y - 1 ); aPlotter->flash_pad_oval( pos, diam, pad->GetOrientation(), aTraceMode ); } else @@ -1052,7 +1046,7 @@ void PCB_BASE_FRAME::PlotDrillMark( PLOTTER* aPlotter, // It is quite possible that the real pad drill value is less then small drill value. diam.x = aSmallDrillShape ? MIN( SMALL_DRILL, pad->GetDrillSize().x ) : pad->GetDrillSize().x; diam.x -= aPlotter->get_plot_width_adj(); - diam.x = doIntValueFitToBand( diam.x, 1, pad->GetSize().x - 1 ); + diam.x = Clamp( 1, diam.x, pad->GetSize().x - 1 ); aPlotter->flash_pad_circle( pos, diam.x, aTraceMode ); } }