diff --git a/common/dialogs/dialog_page_settings.cpp b/common/dialogs/dialog_page_settings.cpp index 2c55b543ec..3d5b7a16c4 100644 --- a/common/dialogs/dialog_page_settings.cpp +++ b/common/dialogs/dialog_page_settings.cpp @@ -89,6 +89,7 @@ DIALOG_PAGES_SETTINGS::DIALOG_PAGES_SETTINGS( EDA_DRAW_FRAME* parent ) : m_modified = false; m_page_bitmap = NULL; m_tb = m_Parent->GetTitleBlock(); + m_customFmt = false; initDialog(); @@ -111,7 +112,7 @@ void DIALOG_PAGES_SETTINGS::initDialog() double customSizeY; // initalize page format choice box and page format list. - // The first shows translated strings, the second contains not tralated strings + // The first shows translated strings, the second contains not translated strings m_paperSizeComboBox->Clear(); for( unsigned ii = 0; ; ii++ ) @@ -146,11 +147,22 @@ void DIALOG_PAGES_SETTINGS::initDialog() wxCommandEvent dummy; OnPaperSizeChoice( dummy ); + if( m_customFmt) // The custom value is defined by the page size + { + customSizeX = m_pageInfo.GetWidthMils(); + customSizeY = m_pageInfo.GetHeightMils(); + } + else // The custom value is set to a default value, or the last defined value + { + customSizeX = m_pageInfo.GetCustomWidthMils(); + customSizeY = m_pageInfo.GetCustomHeightMils(); + } + switch( g_UserUnit ) { case MILLIMETRES: - customSizeX = m_pageInfo.GetCustomWidthMils() * 25.4e-3; - customSizeY = m_pageInfo.GetCustomHeightMils()* 25.4e-3; + customSizeX *= 25.4e-3; + customSizeY *= 25.4e-3; msg.Printf( wxT( "%.2f" ), customSizeX ); m_TextUserSizeX->SetValue( msg ); @@ -161,8 +173,8 @@ void DIALOG_PAGES_SETTINGS::initDialog() default: case INCHES: - customSizeX = m_pageInfo.GetCustomWidthMils() / 1000.0; - customSizeY = m_pageInfo.GetCustomHeightMils() / 1000.0; + customSizeX /= 1000.0; + customSizeY /= 1000.0; msg.Printf( wxT( "%.3f" ), customSizeX ); m_TextUserSizeX->SetValue( msg ); @@ -172,15 +184,6 @@ void DIALOG_PAGES_SETTINGS::initDialog() break; } -#if 0 - m_TextRevision->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Revision ) ); - m_TextTitle->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Title ) ); - m_TextCompany->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Company ) ); - m_TextComment1->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire1 ) ); - m_TextComment2->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire2 ) ); - m_TextComment3->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire3 ) ); - m_TextComment4->SetValidator( wxTextValidator( wxFILTER_NONE, &m_Screen->m_Commentaire4 ) ); -#else m_TextRevision->SetValue( m_tb.GetRevision() ); m_TextTitle->SetValue( m_tb.GetTitle() ); m_TextCompany->SetValue( m_tb.GetCompany() ); @@ -188,7 +191,6 @@ void DIALOG_PAGES_SETTINGS::initDialog() m_TextComment2->SetValue( m_tb.GetComment2() ); m_TextComment3->SetValue( m_tb.GetComment3() ); m_TextComment4->SetValue( m_tb.GetComment4() ); -#endif #ifndef EESCHEMA m_RevisionExport->Show( false ); @@ -248,6 +250,7 @@ void DIALOG_PAGES_SETTINGS::OnPaperSizeChoice( wxCommandEvent& event ) m_orientationComboBox->Enable( false ); m_TextUserSizeX->Enable( true ); m_TextUserSizeY->Enable( true ); + m_customFmt = true; } else { @@ -261,6 +264,7 @@ void DIALOG_PAGES_SETTINGS::OnPaperSizeChoice( wxCommandEvent& event ) m_TextUserSizeX->Enable( false ); m_TextUserSizeY->Enable( false ); + m_customFmt = false; } GetPageLayoutInfoFromDialog(); diff --git a/common/dialogs/dialog_page_settings.h b/common/dialogs/dialog_page_settings.h index 38d02fd988..5bffdb36be 100644 --- a/common/dialogs/dialog_page_settings.h +++ b/common/dialogs/dialog_page_settings.h @@ -1,8 +1,7 @@ /* * 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. + * Copyright (C) 1992-2013 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 @@ -45,6 +44,7 @@ private: 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. + bool m_customFmt; /// true if the page selection is custom TITLE_BLOCK m_tb; /// Temporary title block (basic inscriptions). public: diff --git a/pcbnew/dialogs/dialog_general_options.cpp b/pcbnew/dialogs/dialog_general_options.cpp index d11c0f35b6..5ef7f86559 100644 --- a/pcbnew/dialogs/dialog_general_options.cpp +++ b/pcbnew/dialogs/dialog_general_options.cpp @@ -155,7 +155,7 @@ void DIALOG_GENERALOPTIONS::OnOkClick( wxCommandEvent& event ) void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event ) { int id = event.GetId(); - bool state = m_optionsToolBar->GetToolToggled( id ); + bool state = event.IsChecked(); switch( id ) { @@ -169,16 +169,13 @@ void PCB_EDIT_FRAME::OnSelectOptionToolbar( wxCommandEvent& event ) else m_canvas->SetCursor( wxCURSOR_QUESTION_ARROW ); } - break; case ID_TB_OPTIONS_SHOW_RATSNEST: SetElementVisibility( RATSNEST_VISIBLE, state ); if( state && (GetBoard()->m_Status_Pcb & LISTE_RATSNEST_ITEM_OK) == 0 ) - { Compile_Ratsnest( NULL, true ); - } m_canvas->Refresh(); break; diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 275c416e68..8e9eed8fe1 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -834,32 +834,21 @@ void PCB_EDIT_FRAME::OnSelectAutoPlaceMode( wxCommandEvent& aEvent ) // inside this function (seems happen on some Linux/wxWidgets versions) // when the other tool is selected - int previous_state = m_autoPlaceModeId; switch( aEvent.GetId() ) { case ID_TOOLBARH_PCB_MODE_MODULE: if( aEvent.IsChecked() ) - { m_autoPlaceModeId = ID_TOOLBARH_PCB_MODE_MODULE; - - if( previous_state == ID_TOOLBARH_PCB_MODE_TRACKS ) - m_mainToolBar->ToggleTool( ID_TOOLBARH_PCB_MODE_TRACKS, false ); - } else if( m_autoPlaceModeId == ID_TOOLBARH_PCB_MODE_MODULE ) - // Deselect m_autoPlaceModeId only if it was selected by this tool + // clear m_autoPlaceModeId only if it was activated by this tool m_autoPlaceModeId = 0; break; case ID_TOOLBARH_PCB_MODE_TRACKS: if( aEvent.IsChecked() ) - { m_autoPlaceModeId = ID_TOOLBARH_PCB_MODE_TRACKS; - - if( previous_state == ID_TOOLBARH_PCB_MODE_MODULE ) - m_mainToolBar->ToggleTool( ID_TOOLBARH_PCB_MODE_MODULE, false ); - } else if( m_autoPlaceModeId == ID_TOOLBARH_PCB_MODE_TRACKS ) - // Deselect m_autoPlaceModeId only if it was selected by this tool + // clear m_autoPlaceModeId only if it was activated by this tool m_autoPlaceModeId = 0; break; } diff --git a/pcbnew/toolbars_update_user_interface.cpp b/pcbnew/toolbars_update_user_interface.cpp index 6b37dfd5aa..720fecaa25 100644 --- a/pcbnew/toolbars_update_user_interface.cpp +++ b/pcbnew/toolbars_update_user_interface.cpp @@ -113,7 +113,8 @@ void PCB_EDIT_FRAME::OnUpdateZoneDisplayStyle( wxUpdateUIEvent& aEvent ) void PCB_EDIT_FRAME::OnUpdateDrcEnable( wxUpdateUIEvent& aEvent ) { - aEvent.Check( !Drc_On ); + bool state = !Drc_On; + aEvent.Check( state ); m_optionsToolBar->SetToolShortHelp( ID_TB_OPTIONS_DRC_OFF, Drc_On ? _( "Disable design rule checking" ) : @@ -205,15 +206,12 @@ void PCB_EDIT_FRAME::OnUpdateVerticalToolbar( wxUpdateUIEvent& aEvent ) void PCB_EDIT_FRAME::OnUpdateAutoPlaceTracksMode( wxUpdateUIEvent& aEvent ) -{ +{return; // Automatic placement of modules and tracks is a mutually exclusive operation // So this tool is activated only if // m_autoPlaceModeId == ID_TOOLBARH_PCB_MODE_TRACKS. - // To avoid creating erroneous events (seems happen on some Linux/wxWidgets versions) - // the tool state is changed only when it is incorrect bool state = m_autoPlaceModeId == ID_TOOLBARH_PCB_MODE_TRACKS; - if( aEvent.IsChecked() != state ) - aEvent.Check( state ); + m_mainToolBar->ToggleTool( ID_TOOLBARH_PCB_MODE_TRACKS, state ); } @@ -222,9 +220,6 @@ void PCB_EDIT_FRAME::OnUpdateAutoPlaceModulesMode( wxUpdateUIEvent& aEvent ) // Automatic placement of modules and tracks is a mutually exclusive operation, // So this tool is activated only if // m_autoPlaceModeId == ID_TOOLBARH_PCB_MODE_MODULE. - // To avoid creating erroneous events (seems happen on some Linux/wxWidgets versions) - // the tool state is changed only when it is incorrect bool state = m_autoPlaceModeId == ID_TOOLBARH_PCB_MODE_MODULE; - if( aEvent.IsChecked() != state ) - aEvent.Check( state ); + m_mainToolBar->ToggleTool( ID_TOOLBARH_PCB_MODE_MODULE, state ); }