diff --git a/include/wxPcbStruct.h b/include/wxPcbStruct.h index 5fb8256601..7df4dfb73e 100644 --- a/include/wxPcbStruct.h +++ b/include/wxPcbStruct.h @@ -542,7 +542,15 @@ public: void ReCreateMicrowaveVToolbar(); void ReCreateOptToolbar(); void ReCreateMenuBar(); - PCB_LAYER_BOX_SELECTOR* ReCreateLayerBox( wxAuiToolBar* parent ); + + /** + * Re create the layer Box by clearing the old list, and building + * le new one, from the new layers names and cole layers + * @param aForceResizeToolbar = true to resize the parent toolbar + * false if not needed (mainly in parent toolbar creation, + * or when the layers names are not modified) + */ + void ReCreateLayerBox( bool aForceResizeToolbar = true ); /** * Function OnModify diff --git a/pcbnew/class_pcb_layer_box_selector.cpp b/pcbnew/class_pcb_layer_box_selector.cpp index 30a3f56938..4e4bc1f96d 100644 --- a/pcbnew/class_pcb_layer_box_selector.cpp +++ b/pcbnew/class_pcb_layer_box_selector.cpp @@ -51,10 +51,8 @@ void PCB_LAYER_BOX_SELECTOR::Resync() static DECLARE_LAYERS_HOTKEY( layerhk ); // Tray to fix a minimum width fot the BitmapComboBox - int minwidth, h; + int minwidth = 80, h; wxClientDC dc( GetParent() ); // The DC for "this" is not always initialized - wxString dummyText( wxT("XXXXXXXXXXXX") ); - dc.GetTextExtent ( dummyText, &minwidth, &h ); #define BM_SIZE 14 for( LAYER_NUM i = FIRST_LAYER; i < NB_LAYERS; ++i ) @@ -83,14 +81,11 @@ void PCB_LAYER_BOX_SELECTOR::Resync() Append( layername, layerbmp, (void*)(intptr_t) layerid ); int w; dc.GetTextExtent ( layername, &w, &h ); - minwidth = std::max( minwidth, w ); - } + } - minwidth += BM_SIZE + 12; // Take in account the bitmap size and margins -wxLogMessage( "minw %d min %d", minwidth, GetMinClientSize().x ); -// SetMinClientSize( wxSize( minwidth, -1 ) ); - Layout(); + minwidth += BM_SIZE + 35; // Take in account the bitmap size and margins + SetMinClientSize( wxSize( minwidth, -1 ) ); } diff --git a/pcbnew/class_pcb_layer_widget.cpp b/pcbnew/class_pcb_layer_widget.cpp index a4dc99df80..e78f2043ca 100644 --- a/pcbnew/class_pcb_layer_widget.cpp +++ b/pcbnew/class_pcb_layer_widget.cpp @@ -341,7 +341,7 @@ void PCB_LAYER_WIDGET::ReFill() void PCB_LAYER_WIDGET::OnLayerColorChange( LAYER_NUM aLayer, EDA_COLOR_T aColor ) { myframe->GetBoard()->SetLayerColor( aLayer, aColor ); - myframe->ReCreateLayerBox( NULL ); + myframe->ReCreateLayerBox( false ); myframe->GetCanvas()->Refresh(); } diff --git a/pcbnew/dialogs/dialog_layers_setup.cpp b/pcbnew/dialogs/dialog_layers_setup.cpp index d06f501394..aded0cf5df 100644 --- a/pcbnew/dialogs/dialog_layers_setup.cpp +++ b/pcbnew/dialogs/dialog_layers_setup.cpp @@ -560,7 +560,7 @@ void DIALOG_LAYERS_SETUP::OnOkButtonClick( wxCommandEvent& event ) } m_Parent->OnModify(); - m_Parent->ReCreateLayerBox( NULL ); + m_Parent->ReCreateLayerBox(); m_Parent->ReFillLayerWidget(); EndModal( wxID_OK ); diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index bdd507fae0..e728f64d73 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -141,7 +141,7 @@ void PCB_EDIT_FRAME::Files_io( wxCommandEvent& event ) fn.SetExt( PcbFileExtension ); GetBoard()->SetFileName( fn.GetFullPath() ); UpdateTitle(); - ReCreateLayerBox( NULL ); + ReCreateLayerBox(); } break; @@ -396,8 +396,7 @@ bool PCB_EDIT_FRAME::LoadOnePcbFile( const wxString& aFileName, bool aAppend, // Update info shown by the horizontal toolbars GetBoard()->SetCurrentNetClass( NETCLASS::Default ); ReFillLayerWidget(); - - ReCreateLayerBox( NULL ); + ReCreateLayerBox(); // upate the layer widget to match board visibility states, both layers and render columns. syncLayerVisibilities(); diff --git a/pcbnew/pcbframe.cpp b/pcbnew/pcbframe.cpp index 0c8e065a21..e45b22075b 100644 --- a/pcbnew/pcbframe.cpp +++ b/pcbnew/pcbframe.cpp @@ -589,7 +589,7 @@ void PCB_EDIT_FRAME::ShowDesignRulesEditor( wxCommandEvent& event ) if( returncode == wxID_OK ) // New rules, or others changes. { - ReCreateLayerBox( NULL ); + ReCreateLayerBox(); updateTraceWidthSelectBox(); updateViaSizeSelectBox(); OnModify(); diff --git a/pcbnew/pcbnew.cpp b/pcbnew/pcbnew.cpp index 061f465d4a..aa8887a2f1 100644 --- a/pcbnew/pcbnew.cpp +++ b/pcbnew/pcbnew.cpp @@ -301,7 +301,7 @@ bool EDA_APP::OnInit() frame->Clear_Pcb( false ); // update the layer names in the listbox - frame->ReCreateLayerBox( NULL ); + frame->ReCreateLayerBox( false ); /* For an obscure reason the focus is lost after loading a board file * when starting (i.e. only at this point) diff --git a/pcbnew/tool_pcb.cpp b/pcbnew/tool_pcb.cpp index 4a5e3310dc..d57011f534 100644 --- a/pcbnew/tool_pcb.cpp +++ b/pcbnew/tool_pcb.cpp @@ -281,7 +281,7 @@ void PCB_EDIT_FRAME::ReCreateHToolbar() m_SelLayerBox = new PCB_LAYER_BOX_SELECTOR( m_mainToolBar, ID_TOOLBARH_PCB_SELECT_LAYER ); m_SelLayerBox->SetBoardFrame( this ); } - ReCreateLayerBox( m_mainToolBar ); + ReCreateLayerBox( false ); m_mainToolBar->AddControl( m_SelLayerBox ); PrepareLayerIndicator(); // Initialize the bitmap with current @@ -663,14 +663,19 @@ void PCB_EDIT_FRAME::updateViaSizeSelectBox() } -PCB_LAYER_BOX_SELECTOR* PCB_EDIT_FRAME::ReCreateLayerBox( wxAuiToolBar* parent ) +void PCB_EDIT_FRAME::ReCreateLayerBox( bool aForceResizeToolbar ) { - if( m_SelLayerBox == NULL ) - return NULL; + if( m_SelLayerBox == NULL || m_mainToolBar == NULL ) + return; + m_SelLayerBox->SetToolTip( _( "+/- to switch" ) ); m_SelLayerBox->m_hotkeys = g_Board_Editor_Hokeys_Descr; m_SelLayerBox->Resync(); - m_SelLayerBox->SetToolTip( _( "+/- to switch" ) ); - return m_SelLayerBox; + if( aForceResizeToolbar ) + { + // the layer box can have its size changed + // Update the aui manager, to take in account the new size + m_auimgr.Update(); + } }