From dbb78db7efa1b6db2b9773d287e59b0c509a93c0 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 23 May 2016 17:47:16 +0200 Subject: [PATCH] Gerbview: Shows now in the Layer manager the filename of gerber or drill files loaded. A fex minor compil warnng fixes --- 3d-viewer/3d_canvas.cpp | 10 +++++----- gerbview/class_GERBER.cpp | 12 ++++++++++-- gerbview/class_GERBER.h | 7 ++++++- gerbview/class_gbr_layer_box_selector.cpp | 8 +++++++- gerbview/class_gerbview_layer_widget.cpp | 2 +- gerbview/gerbview_frame.cpp | 8 ++++++-- gerbview/gerbview_frame.h | 6 ++++-- gerbview/toolbars_gerber.cpp | 4 ++-- pcbnew/board_netlist_updater.cpp | 7 +++---- 9 files changed, 44 insertions(+), 20 deletions(-) diff --git a/3d-viewer/3d_canvas.cpp b/3d-viewer/3d_canvas.cpp index 2176aa9c76..a10d3f2f7d 100644 --- a/3d-viewer/3d_canvas.cpp +++ b/3d-viewer/3d_canvas.cpp @@ -699,7 +699,7 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event ) unsigned char* pixelbuffer = (unsigned char*) malloc( viewport.x * viewport.y * 3 ); unsigned char* alphabuffer = (unsigned char*) malloc( viewport.x * viewport.y ); - wxImage image( viewport.x, viewport.y ); + wxImage image_3d( viewport.x, viewport.y ); glPixelStorei( GL_PACK_ALIGNMENT, 1 ); glReadBuffer( GL_BACK_LEFT ); @@ -710,10 +710,10 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event ) viewport.x, viewport.y, GL_ALPHA, GL_UNSIGNED_BYTE, alphabuffer ); - image.SetData( pixelbuffer ); - image.SetAlpha( alphabuffer ); - image = image.Mirror( false ); - wxBitmap bitmap( image ); + image_3d.SetData( pixelbuffer ); + image_3d.SetAlpha( alphabuffer ); + image_3d = image_3d.Mirror( false ); + wxBitmap bitmap( image_3d ); if( event.GetId() == ID_TOOL_SCREENCOPY_TOCLIBBOARD ) { diff --git a/gerbview/class_GERBER.cpp b/gerbview/class_GERBER.cpp index 59d7615035..a1b39dd37c 100644 --- a/gerbview/class_GERBER.cpp +++ b/gerbview/class_GERBER.cpp @@ -460,20 +460,28 @@ const wxString GERBER_IMAGE_LIST::GetDisplayName( int aIdx ) if( aIdx >= 0 && aIdx < (int)m_GERBER_List.size() ) gerber = m_GERBER_List[aIdx]; + // if a file is loaded, build the name: + // if a X2 FileFunction info is found + // or (if no FileFunction info) + // * if( gerber && IsUsed(aIdx ) ) { + wxFileName fn( gerber->m_FileName ); + if( gerber->m_FileFunction ) { if( gerber->m_FileFunction->IsCopper() ) { - name.Printf( _( "Layer %d (%s, %s, %s)" ), aIdx + 1, + name.Printf( "%d %s (%s, %s, %s)", aIdx + 1, + fn.GetFullName().GetData(), GetChars( gerber->m_FileFunction->GetFileType() ), GetChars( gerber->m_FileFunction->GetBrdLayerId() ), GetChars( gerber->m_FileFunction->GetBrdLayerSide() ) ); } else { - name.Printf( _( "Layer %d (%s, %s)" ), aIdx + 1, + name.Printf( "%d %s (%s, %s)", aIdx + 1, + fn.GetFullName().GetData(), GetChars( gerber->m_FileFunction->GetFileType() ), GetChars( gerber->m_FileFunction->GetBrdLayerId() ) ); } diff --git a/gerbview/class_GERBER.h b/gerbview/class_GERBER.h index 1f72c1c488..1916ce7418 100644 --- a/gerbview/class_GERBER.h +++ b/gerbview/class_GERBER.h @@ -353,7 +353,12 @@ public: /** * @return a name for image aIdx which can be used in layers manager * and layer selector - * is is "Layer n" (n = aIdx+1), followed by file attribute info (if X2 format) + * if a file is loaded, the name is: + * " if a X2 FileFunction info is found" + * or (if no FileFunction info) + * " *" + * if no file loaded, the name is: + * "Layer n" with n = aIdx+1 * @param aIdx = the index ( 0 ... GERBER_DRAWLAYERS_COUNT-1 ) */ const wxString GetDisplayName( int aIdx ); diff --git a/gerbview/class_gbr_layer_box_selector.cpp b/gerbview/class_gbr_layer_box_selector.cpp index f148306c77..5c6e1b571a 100644 --- a/gerbview/class_gbr_layer_box_selector.cpp +++ b/gerbview/class_gbr_layer_box_selector.cpp @@ -40,12 +40,13 @@ void GBR_LAYER_BOX_SELECTOR::Resync() { + #define BM_SIZE 14 Freeze(); Clear(); for( int layerid = 0; layerid < GERBER_DRAWLAYERS_COUNT; ++layerid ) { - wxBitmap layerbmp( 14, 14 ); + wxBitmap layerbmp( BM_SIZE, BM_SIZE ); wxString layername; if( !IsLayerEnabled( layerid ) ) @@ -59,6 +60,11 @@ void GBR_LAYER_BOX_SELECTOR::Resync() Append( layername, layerbmp, (void*)(intptr_t) layerid ); } + // Ensure the width of the widget is enough to show the text and the icon + SetMinSize( wxSize( -1, -1 ) ); + int minwidth = GetBestSize().x + BM_SIZE + 10; + SetMinSize( wxSize( minwidth, -1 ) ); + Thaw(); } diff --git a/gerbview/class_gerbview_layer_widget.cpp b/gerbview/class_gerbview_layer_widget.cpp index f2108ac58a..600e3d36fe 100644 --- a/gerbview/class_gerbview_layer_widget.cpp +++ b/gerbview/class_gerbview_layer_widget.cpp @@ -212,7 +212,7 @@ void GERBER_LAYER_WIDGET::onPopupSelection( wxCommandEvent& event ) case ID_SORT_GBR_LAYERS: g_GERBER_List.SortImagesByZOrder( myframe->GetItemsList() ); myframe->ReFillLayerWidget(); - myframe->syncLayerBox(); + myframe->syncLayerBox( true ); myframe->GetCanvas()->Refresh(); break; } diff --git a/gerbview/gerbview_frame.cpp b/gerbview/gerbview_frame.cpp index 4a5852b915..6aa3d5b3f7 100644 --- a/gerbview/gerbview_frame.cpp +++ b/gerbview/gerbview_frame.cpp @@ -313,10 +313,12 @@ void GERBVIEW_FRAME::SaveSettings( wxConfigBase* aCfg ) void GERBVIEW_FRAME::ReFillLayerWidget() { m_LayersManager->ReFill(); + m_SelLayerBox->Resync(); wxAuiPaneInfo& lyrs = m_auimgr.GetPane( m_LayersManager ); wxSize bestz = m_LayersManager->GetBestSize(); + bestz.x += 5; // gives a little margin lyrs.MinSize( bestz ); lyrs.BestSize( bestz ); @@ -384,9 +386,11 @@ void GERBVIEW_FRAME::syncLayerWidget() } -void GERBVIEW_FRAME::syncLayerBox() +void GERBVIEW_FRAME::syncLayerBox( bool aRebuildLayerBox ) { - m_SelLayerBox->Resync(); + if( aRebuildLayerBox ) + m_SelLayerBox->Resync(); + m_SelLayerBox->SetSelection( getActiveLayer() ); int dcodeSelected = -1; diff --git a/gerbview/gerbview_frame.h b/gerbview/gerbview_frame.h index 6bac9ff96e..5946880b73 100644 --- a/gerbview/gerbview_frame.h +++ b/gerbview/gerbview_frame.h @@ -438,9 +438,11 @@ public: * Function syncLayerBox * updates the currently "selected" layer within m_SelLayerBox * The currently active layer, as defined by the return value of - * getActiveLayer(). And updates the colored icon in the toolbar. + * getActiveLayer(). + * @param aRebuildLayerBox = true to rebuild the layer box + * false to just updates the selection. */ - void syncLayerBox(); + void syncLayerBox( bool aRebuildLayerBox = false ); /** * Function UpdateTitleAndInfo diff --git a/gerbview/toolbars_gerber.cpp b/gerbview/toolbars_gerber.cpp index 330790a15a..d6c4490e57 100644 --- a/gerbview/toolbars_gerber.cpp +++ b/gerbview/toolbars_gerber.cpp @@ -90,7 +90,7 @@ void GERBVIEW_FRAME::ReCreateHToolbar( void ) m_SelLayerBox = new GBR_LAYER_BOX_SELECTOR( m_mainToolBar, ID_TOOLBARH_GERBVIEW_SELECT_ACTIVE_LAYER, - wxDefaultPosition, wxSize( 150, -1 ), 0,NULL); + wxDefaultPosition, wxDefaultSize, 0,NULL); m_SelLayerBox->Resync(); m_mainToolBar->AddControl( m_SelLayerBox ); @@ -114,7 +114,7 @@ void GERBVIEW_FRAME::ReCreateHToolbar( void ) m_mainToolBar->AddControl( m_DCodeSelector ); m_TextInfo = new wxTextCtrl( m_mainToolBar, wxID_ANY, wxEmptyString, wxDefaultPosition, - wxSize(150,-1), wxTE_READONLY ); + wxDefaultSize, wxTE_READONLY ); m_mainToolBar->AddControl( m_TextInfo ); // after adding the buttons to the toolbar, must call Realize() to reflect the changes diff --git a/pcbnew/board_netlist_updater.cpp b/pcbnew/board_netlist_updater.cpp index 2aebf13fcb..3780e6b43b 100644 --- a/pcbnew/board_netlist_updater.cpp +++ b/pcbnew/board_netlist_updater.cpp @@ -485,10 +485,9 @@ bool BOARD_NETLIST_UPDATER::deleteSinglePadNets() std::vector padlist = m_board->GetPads(); - for( unsigned ii = 0; ii < padlist.size(); ii++ ) - { - pad = padlist[ii]; - + for( unsigned kk = 0; kk < padlist.size(); kk++ ) + { + pad = padlist[kk]; if( pad->GetNetname().IsEmpty() ) continue;