From c0eeafa070406c779e43461d48ac03ed631310d4 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Wed, 3 Nov 2010 19:55:51 +0100 Subject: [PATCH 1/2] Fix issue with new layer box, mainly with wxWidgets 2.9.1 --- include/class_layerchoicebox.h | 4 +- pcbnew/class_layerchoicebox.cpp | 179 +++++++++++----------- pcbnew/pcbframe.cpp | 2 +- pcbnew/tool_pcb.cpp | 9 +- pcbnew/toolbars_update_user_interface.cpp | 6 +- 5 files changed, 101 insertions(+), 99 deletions(-) diff --git a/include/class_layerchoicebox.h b/include/class_layerchoicebox.h index 0d8c93b629..53d0620849 100644 --- a/include/class_layerchoicebox.h +++ b/include/class_layerchoicebox.h @@ -10,12 +10,12 @@ class WinEDALayerChoiceBox : public wxBitmapComboBox { public: - WinEDALayerChoiceBox( wxWindow* parent, wxWindowID id, + WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, int n = 0, const wxString choices[] = NULL ); - WinEDALayerChoiceBox( wxWindow* parent, wxWindowID id, + WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, const wxArrayString& choices ); diff --git a/pcbnew/class_layerchoicebox.cpp b/pcbnew/class_layerchoicebox.cpp index 54bde203e7..0e3cda95ce 100644 --- a/pcbnew/class_layerchoicebox.cpp +++ b/pcbnew/class_layerchoicebox.cpp @@ -21,95 +21,100 @@ * */ - WinEDALayerChoiceBox::WinEDALayerChoiceBox( wxWindow* parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, - int n, const wxString choices[] ) : - wxBitmapComboBox( parent, id, wxEmptyString, pos, size, - n, choices, wxCB_READONLY ) +WinEDALayerChoiceBox::WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + int n, const wxString choices[] ) : + wxBitmapComboBox( parent, id, wxEmptyString, pos, size, + n, choices, wxCB_READONLY ) +{ +} + + +WinEDALayerChoiceBox::WinEDALayerChoiceBox( WinEDA_Toolbar* parent, wxWindowID id, + const wxPoint& pos, const wxSize& size, + const wxArrayString& choices ) : + wxBitmapComboBox( parent, id, wxEmptyString, pos, size, + choices, wxCB_READONLY ) +{ +} + + +// Get Current Item # +int WinEDALayerChoiceBox::GetChoice() +{ + return GetSelection(); +} + + +// Get Current Layer +int WinEDALayerChoiceBox::GetLayerChoice() +{ + return (long) GetClientData( GetSelection() ); +} + + +// Set Layer # +int WinEDALayerChoiceBox::SetLayerSelection( int layer ) +{ + int elements = GetCount(); + + for( int i = 0; i < elements; i++ ) { - } - - - WinEDALayerChoiceBox::WinEDALayerChoiceBox( wxWindow* parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, - const wxArrayString& choices ) : - wxBitmapComboBox( parent, id, wxEmptyString, pos, size, - choices, wxCB_READONLY ) - { - } - - // Get Current Item # - int WinEDALayerChoiceBox::GetChoice() - { - return GetSelection(); - } - - // Get Current Layer - int WinEDALayerChoiceBox::GetLayerChoice() - { - return (long) GetClientData(GetSelection()); - } - - // Set Layer # - int WinEDALayerChoiceBox::SetLayerSelection(int layer) - { - int elements = GetCount(); - - for( int i = 0 ; i < elements; i++) - if(GetClientData(i) == (void*)layer) - if(GetSelection() != i) // Element (i) is not selected - { - SetSelection(i); - return i; - } - else - return i; //If element already selected; do nothing - - // Not Found - SetSelection(-1); - return -1; - } - - // Reload the Layers - void WinEDALayerChoiceBox::Resync() - { - BOARD* board = ((WinEDA_BasePcbFrame*)GetParent())->GetBoard(); - wxASSERT(board != NULL); - - Clear(); - - static DECLARE_LAYERS_ORDER_LIST(layertranscode); - static DECLARE_LAYERS_HOTKEY(layerhk); - - for( int i=0 ; i < LAYER_COUNT ; i++) + if( GetClientData( i ) == (void*) layer ) { - wxBitmap layerbmp (20,18); - wxMemoryDC bmpDC; - wxBrush brush; - wxString layername; - - int layerid = layertranscode[i]; - - // Prepare Bitmap - bmpDC.SelectObject(layerbmp); - brush.SetColour( MakeColour(board->GetLayerColor( layerid ) )); - brush.SetStyle( wxSOLID ); - - bmpDC.SetBrush(brush); - bmpDC.DrawRectangle(0,0,layerbmp.GetWidth(), layerbmp.GetHeight()); - bmpDC.SetBrush(*wxTRANSPARENT_BRUSH); - bmpDC.SetPen(*wxBLACK_PEN); - bmpDC.DrawRectangle(0,0,layerbmp.GetWidth(), layerbmp.GetHeight()); - - layername = board->GetLayerName( layerid ); - - layername.Append( wxT( "\t" ) ); - layername = AddHotkeyName( layername, s_Board_Editor_Hokeys_Descr, layerhk[layerid], false ); - - - if(board->IsLayerEnabled(layerid)) - Append(layername, layerbmp, (void*) layerid ); + if( GetSelection() != i ) // Element (i) is not selected + { + SetSelection( i ); + return i; + } + else + return i; //If element already selected; do nothing } - } + // Not Found + SetSelection( -1 ); + return -1; +} + + +// Reload the Layers +void WinEDALayerChoiceBox::Resync() +{ + WinEDA_BasePcbFrame* pcbFrame = (WinEDA_BasePcbFrame*) GetParent()->GetParent(); + BOARD* board = pcbFrame->GetBoard(); + + wxASSERT( board != NULL ); + + Clear(); + + static DECLARE_LAYERS_ORDER_LIST( layertranscode ); + static DECLARE_LAYERS_HOTKEY( layerhk ); + + for( int i = 0; i < LAYER_COUNT; i++ ) + { + wxBitmap layerbmp( 14, 14 ); + wxMemoryDC bmpDC; + wxBrush brush; + wxString layername; + + int layerid = layertranscode[i]; + if( ! board->IsLayerEnabled( layerid ) ) + continue; + + // Prepare Bitmap + bmpDC.SelectObject( layerbmp ); + brush.SetColour( MakeColour( board->GetLayerColor( layerid ) ) ); + brush.SetStyle( wxSOLID ); + + bmpDC.SetBrush( brush ); + bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() ); + bmpDC.SetBrush( *wxTRANSPARENT_BRUSH ); + bmpDC.SetPen( *wxBLACK_PEN ); + bmpDC.DrawRectangle( 0, 0, layerbmp.GetWidth(), layerbmp.GetHeight() ); + + layername = board->GetLayerName( layerid ); + layername = AddHotkeyName( layername, s_Board_Editor_Hokeys_Descr, layerhk[layerid], false ); + Append( layername, layerbmp, (void*) layerid ); + } +} diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index e8934cab22..79e4bfc678 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -342,7 +342,7 @@ WinEDA_PcbFrame::WinEDA_PcbFrame( wxWindow* father, vert.TopDockable( false ).BottomDockable( false ); horiz.LeftDockable( false ).RightDockable( false ); - // Create a template from the horiz wxAuiPaneInfo, specific for horizontal toolbars: + // Create a template from the horiz wxAuiPaneInfo, specific to horizontal toolbars: wxAuiPaneInfo horiz_tb( horiz ); horiz_tb.ToolbarPane().Gripper( false ); diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index 250b054de1..e95d75bb05 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -267,13 +267,13 @@ void WinEDA_PcbFrame::ReCreateHToolbar() _( "Perform design rules check" ) ); m_HToolBar->AddSeparator(); - + if(m_SelLayerBox == NULL) - m_SelLayerBox = new WinEDALayerChoiceBox( this, ID_TOOLBARH_PCB_SELECT_LAYER); + m_SelLayerBox = new WinEDALayerChoiceBox( m_HToolBar, ID_TOOLBARH_PCB_SELECT_LAYER); ReCreateLayerBox( m_HToolBar ); m_HToolBar->AddControl( m_SelLayerBox ); - + PrepareLayerIndicator(); // Initialize the bitmap with current // active layer colors for the next tool m_HToolBar->AddTool( ID_AUX_TOOLBAR_PCB_SELECT_LAYER_PAIR, wxEmptyString, @@ -683,7 +683,6 @@ an existing track use its width\notherwise, use current width setting" ), m_TrackAndViasSizesList_Changed = true; m_AuxiliaryToolBar->AddSeparator(); - ReCreateLayerBox( NULL ); } @@ -698,7 +697,7 @@ void WinEDA_PcbFrame::syncLayerBox() WinEDALayerChoiceBox* WinEDA_PcbFrame::ReCreateLayerBox( WinEDA_Toolbar* parent ) { - if( m_SelLayerBox == NULL ) + if( m_SelLayerBox == NULL ) return NULL; m_SelLayerBox->Resync(); diff --git a/pcbnew/toolbars_update_user_interface.cpp b/pcbnew/toolbars_update_user_interface.cpp index 6f1bdfed36..71148f271f 100644 --- a/pcbnew/toolbars_update_user_interface.cpp +++ b/pcbnew/toolbars_update_user_interface.cpp @@ -184,6 +184,8 @@ void WinEDA_PcbFrame::SetToolbars() state = GetScreen()->GetRedoCommandCount() > 0; m_HToolBar->EnableTool( wxID_REDO, state ); + syncLayerBox(); + PrepareLayerIndicator(); m_HToolBar->Refresh(); if( m_OptionsToolBar ) @@ -276,9 +278,5 @@ void WinEDA_PcbFrame::SetToolbars() if( m_AuxiliaryToolBar ) AuxiliaryToolBar_Update_UI(); - - syncLayerBox(); - - PrepareLayerIndicator(); DisplayUnitsMsg(); } From dfc54fb3a5858121a0be5b11617e04836ff41dba Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Wed, 3 Nov 2010 20:42:38 +0100 Subject: [PATCH 2/2] Fix issue with new layer box, mainly with wxWidgets 2.9.1 --- pcbnew/toolbars_update_user_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pcbnew/toolbars_update_user_interface.cpp b/pcbnew/toolbars_update_user_interface.cpp index 71148f271f..e0cd18a502 100644 --- a/pcbnew/toolbars_update_user_interface.cpp +++ b/pcbnew/toolbars_update_user_interface.cpp @@ -186,7 +186,7 @@ void WinEDA_PcbFrame::SetToolbars() m_HToolBar->EnableTool( wxID_REDO, state ); syncLayerBox(); PrepareLayerIndicator(); - m_HToolBar->Refresh(); + m_HToolBar->Refresh(true); if( m_OptionsToolBar ) {