Gerbview: Set 'Do Not Export' as default for all layers when exporting to PCBNew

CHANGED: Gerbview to Pcbnew export now defaults to setting all layers to Do Not Export

Fixes https://gitlab.com/kicad/code/kicad/-/issues/4753
This commit is contained in:
Peter Montgomery 2020-07-04 01:21:24 +00:00 committed by Ian McInerney
parent 0148c1db84
commit 3c0de2b542
1 changed files with 26 additions and 39 deletions

View File

@ -87,20 +87,19 @@ void LAYERS_MAP_DIALOG::initDialog()
for( int ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii ) for( int ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii )
{ {
// Specify the default value for each member of these arrays. // Specify the default value for each member of these arrays.
m_buttonTable[ii] = -1; m_buttonTable[ii] = -1;
m_layersLookUpTable[ii] = UNSELECTED_LAYER; m_layersLookUpTable[ii] = UNSELECTED_LAYER;
} }
// Ensure we have: // Ensure we have:
// at least 2 copper layers and less than max pacb copper layers count // At least 2 copper layers and less than max pcb copper layers count
// and even layers count because a board *must* have even layers count // Even number of layers because a board *must* have even layers count
normalizeBrdLayersCount(); normalizeBrdLayersCount();
int idx = ( m_exportBoardCopperLayersCount / 2 ) - 1; int idx = ( m_exportBoardCopperLayersCount / 2 ) - 1;
m_comboCopperLayersCount->SetSelection( idx ); m_comboCopperLayersCount->SetSelection( idx );
LAYER_NUM pcb_layer_num = 0; m_gerberActiveLayersCount = 0;
m_gerberActiveLayersCount = 0;
GERBER_FILE_IMAGE_LIST* images = m_Parent->GetGerberLayout()->GetImagesList(); GERBER_FILE_IMAGE_LIST* images = m_Parent->GetGerberLayout()->GetImagesList();
for( unsigned ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii ) for( unsigned ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii )
@ -108,20 +107,12 @@ void LAYERS_MAP_DIALOG::initDialog()
if( images->GetGbrImage( ii ) == NULL ) if( images->GetGbrImage( ii ) == NULL )
break; break;
if( (pcb_layer_num == m_exportBoardCopperLayersCount - 1)
&& (m_exportBoardCopperLayersCount > 1) )
pcb_layer_num = F_Cu;
m_buttonTable[m_gerberActiveLayersCount] = ii; m_buttonTable[m_gerberActiveLayersCount] = ii;
m_layersLookUpTable[ii] = pcb_layer_num;
m_gerberActiveLayersCount++; m_gerberActiveLayersCount++;
++pcb_layer_num;
} }
if( m_gerberActiveLayersCount <= GERBER_DRAWLAYERS_COUNT/2 ) // Only one list is enough if( m_gerberActiveLayersCount <= GERBER_DRAWLAYERS_COUNT / 2 ) // Only one list is enough
{
m_staticlineSep->Hide(); m_staticlineSep->Hide();
}
wxFlexGridSizer* flexColumnBoxSizer = m_flexLeftColumnBoxSizer; wxFlexGridSizer* flexColumnBoxSizer = m_flexLeftColumnBoxSizer;
@ -152,7 +143,7 @@ void LAYERS_MAP_DIALOG::initDialog()
// is nb_items; otherwise, the number of rows is 16 (with two // is nb_items; otherwise, the number of rows is 16 (with two
// separate columns of controls being used if nb_items > 16). // separate columns of controls being used if nb_items > 16).
if( ii == GERBER_DRAWLAYERS_COUNT/2 ) if( ii == GERBER_DRAWLAYERS_COUNT / 2 )
flexColumnBoxSizer = m_flexRightColumnBoxSizer; flexColumnBoxSizer = m_flexRightColumnBoxSizer;
// Provide a text string to identify the Gerber layer // Provide a text string to identify the Gerber layer
@ -161,24 +152,31 @@ void LAYERS_MAP_DIALOG::initDialog()
label = new wxStaticText( this, wxID_STATIC, msg ); label = new wxStaticText( this, wxID_STATIC, msg );
flexColumnBoxSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); flexColumnBoxSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
/* Add file name and extension without path. */ /* Add file name and extension without path. */
wxFileName fn( images->GetGbrImage( ii )->m_FileName ); wxFileName fn( images->GetGbrImage( ii )->m_FileName );
label = new wxStaticText( this, wxID_STATIC, fn.GetFullName() ); label = new wxStaticText( this, wxID_STATIC, fn.GetFullName() );
flexColumnBoxSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); flexColumnBoxSizer->Add( label, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
// Provide a button for this layer (which will invoke a child dialog box) // Provide a button for this layer (which will invoke a child dialog box)
item_ID = ID_BUTTON_0 + ii; item_ID = ID_BUTTON_0 + ii;
wxButton * Button = new wxButton( this, item_ID, wxT( "..." ), wxDefaultPosition, wxButton * Button = new wxButton( this, item_ID, wxT( "..." ), wxDefaultPosition,
wxDefaultSize, wxBU_EXACTFIT ); wxDefaultSize, wxBU_EXACTFIT );
flexColumnBoxSizer->Add( Button, 0, wxALIGN_CENTER_VERTICAL | wxALL ); flexColumnBoxSizer->Add( Button, 0, wxALIGN_CENTER_VERTICAL | wxALL );
// Provide another text string to specify which Pcbnew layer that this // Provide another text string to specify which Pcbnew layer that this
// Gerber layer is initially mapped to, and set the initial text to // Gerber layer is mapped to. All layers initially default to
// specify the appropriate Pcbnew layer, and set the foreground color // "Do NotExport" (which corresponds to UNSELECTED_LAYER). Whenever
// of the text to fuchsia (to indicate that the layer is being exported). // a layer is set to "Do Not Export" it's displayed in blue. When a
// user selects a specific KiCad layer to map to, it's displayed in
// magenta which indicates it will be exported.
item_ID = ID_TEXT_0 + ii; item_ID = ID_TEXT_0 + ii;
// All layers default to "Do Not Export" displayed in blue
msg = _( "Do not export" );
text = new wxStaticText( this, item_ID, msg );
text->SetForegroundColour( *wxBLUE );
// When the first of these text strings is being added, determine what // When the first of these text strings is being added, determine what
// size is necessary to to be able to display any possible string // size is necessary to to be able to display any possible string
// without it being truncated. Then specify that size as the minimum // without it being truncated. Then specify that size as the minimum
@ -186,10 +184,9 @@ void LAYERS_MAP_DIALOG::initDialog()
// determined in this fashion, then it is possible for the display of // determined in this fashion, then it is possible for the display of
// one or more of these strings to be truncated after different Pcbnew // one or more of these strings to be truncated after different Pcbnew
// layers are selected.) // layers are selected.)
if( ii == 0 ) if( ii == 0 )
{ {
msg = _( "Do not export" );
text = new wxStaticText( this, item_ID, msg );
goodSize = text->GetSize(); goodSize = text->GetSize();
for( LAYER_NUM jj = 0; jj < GERBER_DRAWLAYERS_COUNT; ++jj ) for( LAYER_NUM jj = 0; jj < GERBER_DRAWLAYERS_COUNT; ++jj )
@ -199,15 +196,9 @@ void LAYERS_MAP_DIALOG::initDialog()
if( goodSize.x < text->GetSize().x ) if( goodSize.x < text->GetSize().x )
goodSize.x = text->GetSize().x; goodSize.x = text->GetSize().x;
} }
text->SetLabel( msg ); // Reset label to default text
}
msg = GetPCBDefaultLayerName( m_layersLookUpTable[m_buttonTable[ii]] );
text->SetLabel( msg );
}
else
{
msg = GetPCBDefaultLayerName( m_layersLookUpTable[m_buttonTable[ii]] );
text = new wxStaticText( this, item_ID, msg );
}
text->SetMinSize( goodSize ); text->SetMinSize( goodSize );
flexColumnBoxSizer->Add( text, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); flexColumnBoxSizer->Add( text, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 );
@ -245,18 +236,14 @@ void LAYERS_MAP_DIALOG::OnBrdLayersCountSelection( wxCommandEvent& event )
*/ */
void LAYERS_MAP_DIALOG::OnResetClick( wxCommandEvent& event ) void LAYERS_MAP_DIALOG::OnResetClick( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
int ii; int ii;
LAYER_NUM layer; LAYER_NUM layer;
for( ii = 0, layer = 0; ii < m_gerberActiveLayersCount; ii++, ++layer ) for( ii = 0, layer = 0; ii < m_gerberActiveLayersCount; ii++, ++layer )
{ {
if( (layer == m_exportBoardCopperLayersCount - 1) m_layersLookUpTable[ii] = UNSELECTED_LAYER;
&& (m_exportBoardCopperLayersCount > 1) ) m_layersList[ii]->SetLabel( _( "Do not export" ) );
layer = F_Cu; m_layersList[ii]->SetForegroundColour( *wxBLUE );
m_layersLookUpTable[ii] = layer;
msg = GetPCBDefaultLayerName( layer );
m_layersList[ii]->SetLabel( msg );
m_layersList[ii]->SetForegroundColour( wxNullColour );
m_buttonTable[ii] = ii; m_buttonTable[ii] = ii;
} }
} }