7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-04-21 00:21:25 +00:00

ADDED: user layer types.

This allows a user to define user layers to be front
or back (and therefore to flip with the board view).

Fixes https://gitlab.com/kicad/code/kicad/-/issues/8455
This commit is contained in:
Jeff Young 2024-06-26 11:35:44 +01:00
parent 7f6ab7043b
commit aa5a370b3a
28 changed files with 364 additions and 208 deletions

View File

@ -261,6 +261,8 @@ public:
// Derived classes which support multiple layers must implement this
}
bool IsSideSpecific() const;
/**
* Set the layer this item is on.
*

View File

@ -99,6 +99,8 @@ BOARD::BOARD() :
if( IsCopperLayer( layer ) )
m_layers[layer].m_type = LT_SIGNAL;
else if( layer >= User_1 && layer <= User_9 )
m_layers[layer].m_type = LT_AUX;
else
m_layers[layer].m_type = LT_UNDEFINED;
}
@ -600,21 +602,20 @@ bool BOARD::SetLayerName( PCB_LAYER_ID aLayer, const wxString& aLayerName )
LAYER_T BOARD::GetLayerType( PCB_LAYER_ID aLayer ) const
{
if( !IsCopperLayer( aLayer ) )
return LT_SIGNAL;
if( IsLayerEnabled( aLayer ) )
return m_layers[aLayer].m_type;
return LT_SIGNAL;
if( aLayer >= User_1 && aLayer <= User_9 )
return LT_AUX;
else if( IsCopperLayer( aLayer ) )
return LT_SIGNAL;
else
return LT_UNDEFINED;
}
bool BOARD::SetLayerType( PCB_LAYER_ID aLayer, LAYER_T aLayerType )
{
if( !IsCopperLayer( aLayer ) )
return false;
if( IsLayerEnabled( aLayer ) )
{
m_layers[aLayer].m_type = aLayerType;
@ -634,22 +635,56 @@ const char* LAYER::ShowType( LAYER_T aType )
case LT_POWER: return "power";
case LT_MIXED: return "mixed";
case LT_JUMPER: return "jumper";
case LT_AUX: return "auxillary";
case LT_FRONT: return "front";
case LT_BACK: return "back";
}
}
LAYER_T LAYER::ParseType( const char* aType )
{
if( strcmp( aType, "signal" ) == 0 )
return LT_SIGNAL;
else if( strcmp( aType, "power" ) == 0 )
return LT_POWER;
else if( strcmp( aType, "mixed" ) == 0 )
return LT_MIXED;
else if( strcmp( aType, "jumper" ) == 0 )
return LT_JUMPER;
else
return LT_UNDEFINED;
if( strcmp( aType, "signal" ) == 0 ) return LT_SIGNAL;
else if( strcmp( aType, "power" ) == 0 ) return LT_POWER;
else if( strcmp( aType, "mixed" ) == 0 ) return LT_MIXED;
else if( strcmp( aType, "jumper" ) == 0 ) return LT_JUMPER;
else if( strcmp( aType, "auxillary" ) == 0 ) return LT_AUX;
else if( strcmp( aType, "front" ) == 0 ) return LT_FRONT;
else if( strcmp( aType, "back" ) == 0 ) return LT_BACK;
else return LT_UNDEFINED;
}
PCB_LAYER_ID BOARD::FlipLayer( PCB_LAYER_ID aLayer ) const
{
LAYER_T layerType = m_layers[aLayer].m_type;
if( aLayer >= User_1 && aLayer <= User_9 && ( layerType == LT_FRONT || layerType == LT_BACK ) )
{
LAYER_T opposite = layerType == LT_FRONT ? LT_BACK : LT_FRONT;
// See if there is a similarly-named layer
wxString principalName = m_layers[aLayer].m_userName.AfterFirst( '.' );
for( int ii = User_1; ii <= User_9; ++ii )
{
if( ii == aLayer || m_layers[ii].m_type != opposite )
continue;
wxString candidate = m_layers[ii].m_userName.AfterFirst( '.' );
if( candidate == principalName )
return ToLAYER_ID( ii );
}
// If not, see if there are consecutive front/back pairs
if( layerType == LT_FRONT && aLayer < User_9 && m_layers[aLayer+1].m_type == opposite )
return ToLAYER_ID( aLayer+1 );
else if( layerType == LT_BACK && aLayer > User_1 && m_layers[aLayer-1].m_type == opposite )
return ToLAYER_ID( aLayer-1 );
}
return ::FlipLayer( aLayer, GetCopperLayerCount() );
}

View File

@ -152,7 +152,10 @@ enum LAYER_T
LT_SIGNAL,
LT_POWER,
LT_MIXED,
LT_JUMPER
LT_JUMPER,
LT_AUX,
LT_FRONT,
LT_BACK
};
@ -555,6 +558,8 @@ public:
int GetCopperLayerCount() const;
void SetCopperLayerCount( int aCount );
PCB_LAYER_ID FlipLayer( PCB_LAYER_ID aLayer ) const;
int LayerDepth( PCB_LAYER_ID aStartLayer, PCB_LAYER_ID aEndLayer ) const;
/**

View File

@ -102,9 +102,7 @@ const KIFONT::METRICS& BOARD_ITEM::GetFontMetrics() const
wxString BOARD_ITEM::GetLayerName() const
{
const BOARD* board = GetBoard();
if( board )
if( const BOARD* board = GetBoard() )
return board->GetLayerName( m_layer );
// If no parent, return standard name
@ -112,6 +110,23 @@ wxString BOARD_ITEM::GetLayerName() const
}
bool BOARD_ITEM::IsSideSpecific() const
{
if( ( GetLayerSet() & LSET::SideSpecificMask() ).any() )
return true;
if( const BOARD* board = GetBoard() )
{
LAYER_T principalLayerType = board->GetLayerType( m_layer );
if( principalLayerType == LT_FRONT || principalLayerType == LT_BACK )
return true;
}
return false;
}
wxString BOARD_ITEM::layerMaskDescribe() const
{
const BOARD* board = GetBoard();

View File

@ -140,6 +140,7 @@ PANEL_SETUP_LAYERS_CTLs PANEL_SETUP_LAYERS::getCTLs( int aLayerNumber )
#define RETURN_COPPER( x ) return PANEL_SETUP_LAYERS_CTLs( x##Name, x##CheckBox, x##Choice )
#define RETURN_AUX( x ) return PANEL_SETUP_LAYERS_CTLs( x##Name, x##CheckBox, x##StaticText )
#define RETURN_MANDATORY( x ) return PANEL_SETUP_LAYERS_CTLs( x##Name, nullptr, x##StaticText )
#define RETURN_USER( x ) return PANEL_SETUP_LAYERS_CTLs( x##Name, x##CheckBox, x##Type )
switch( aLayerNumber )
{
@ -198,15 +199,15 @@ PANEL_SETUP_LAYERS_CTLs PANEL_SETUP_LAYERS::getCTLs( int aLayerNumber )
case Cmts_User: RETURN_AUX( m_Comments );
case Dwgs_User: RETURN_AUX( m_Drawings );
case User_1: RETURN_AUX( m_User1 );
case User_2: RETURN_AUX( m_User2 );
case User_3: RETURN_AUX( m_User3 );
case User_4: RETURN_AUX( m_User4 );
case User_5: RETURN_AUX( m_User5 );
case User_6: RETURN_AUX( m_User6 );
case User_7: RETURN_AUX( m_User7 );
case User_8: RETURN_AUX( m_User8 );
case User_9: RETURN_AUX( m_User9 );
case User_1: RETURN_USER( m_User1 );
case User_2: RETURN_USER( m_User2 );
case User_3: RETURN_USER( m_User3 );
case User_4: RETURN_USER( m_User4 );
case User_5: RETURN_USER( m_User5 );
case User_6: RETURN_USER( m_User6 );
case User_7: RETURN_USER( m_User7 );
case User_8: RETURN_USER( m_User8 );
case User_9: RETURN_USER( m_User9 );
default:
wxASSERT_MSG( 0, wxT( "bad layer id" ) );
@ -335,12 +336,21 @@ void PANEL_SETUP_LAYERS::showSelectedLayerCheckBoxes( LSET enabledLayers )
void PANEL_SETUP_LAYERS::showLayerTypes()
{
for( LSEQ seq = LSET::AllCuMask().Seq(); seq; ++seq )
for( PCB_LAYER_ID cu_layer : LSET::AllCuMask().Seq() )
{
PCB_LAYER_ID cu_layer = *seq;
wxChoice* ctl = getChoice( cu_layer );
ctl->SetSelection( m_pcb->GetLayerType( cu_layer ) );
ctl->SetStringSelection( LAYER::ShowType( m_pcb->GetLayerType( cu_layer ) ) );
}
for( int ii = User_1; ii <= User_9; ++ii )
{
switch( m_pcb->GetLayerType( ToLAYER_ID( ii ) ) )
{
case LT_AUX: getChoice( ii )->SetSelection( 0 ); break;
case LT_FRONT: getChoice( ii )->SetSelection( 1 ); break;
case LT_BACK: getChoice( ii )->SetSelection( 2 ); break;
default: getChoice( ii )->SetSelection( 0 ); break;
}
}
}
@ -586,10 +596,36 @@ bool PANEL_SETUP_LAYERS::TransferDataFromWindow()
modified = true;
}
// Only copper layers have a definable type.
if( LSET::AllCuMask().Contains( layer ) )
if( IsCopperLayer( layer ) )
{
LAYER_T t = (LAYER_T) getLayerTypeIndex( layer );
LAYER_T t;
switch( getChoice( layer )->GetCurrentSelection() )
{
case 0: t = LT_SIGNAL; break;
case 1: t = LT_POWER; break;
case 2: t = LT_MIXED; break;
case 3: t = LT_JUMPER; break;
default: t = LT_UNDEFINED; break;
}
if( m_pcb->GetLayerType( layer ) != t )
{
m_pcb->SetLayerType( layer, t );
modified = true;
}
}
else if( layer >= User_1 && layer <= User_9 )
{
LAYER_T t;
switch( getChoice( layer )->GetCurrentSelection() )
{
case 0: t = LT_AUX; break;
case 1: t = LT_FRONT; break;
case 2: t = LT_BACK; break;
default: t = LT_UNDEFINED; break;
}
if( m_pcb->GetLayerType( layer ) != t )
{
@ -624,14 +660,6 @@ bool PANEL_SETUP_LAYERS::TransferDataFromWindow()
}
int PANEL_SETUP_LAYERS::getLayerTypeIndex( int aLayer )
{
wxChoice* ctl = getChoice( aLayer );
int ret = ctl->GetCurrentSelection(); // Indices must have same sequence as LAYER_T
return ret;
}
wxString PANEL_SETUP_LAYERS::GetLayerName( int aLayer )
{
wxControl* control = getName( aLayer );
@ -896,19 +924,24 @@ void PANEL_SETUP_LAYERS::addUserDefinedLayer( wxCommandEvent& aEvent )
// All user-defined layers should have a checkbox
wxASSERT( ctl.checkbox );
ctl.checkbox->SetValue( true );
wxTextCtrl* textCtrl = dynamic_cast<wxTextCtrl*>( ctl.name );
wxCHECK( textCtrl, /* void */ );
textCtrl->ChangeValue( LSET::Name( *seq ) );
wxChoice* userLayerType = dynamic_cast<wxChoice*>( ctl.choice );
wxCHECK( userLayerType, /* void */ );
userLayerType->SetSelection( 0 );
ctl.name->Show( true );
ctl.checkbox->Show( true );
ctl.choice->Show( true );
wxSizeEvent evt_size( m_LayersListPanel->GetSize() );
m_LayersListPanel->GetEventHandler()->ProcessEvent( evt_size );
setLayerCheckBox( *seq, true );
}

View File

@ -103,8 +103,6 @@ private:
void showSelectedLayerCheckBoxes( LSET enableLayerMask );
void showLayerTypes();
int getLayerTypeIndex( int layer );
void OnCheckBox( wxCommandEvent& event ) override;
void DenyChangeCheckBox( wxCommandEvent& event ) override;
bool TransferDataToWindow() override;

View File

@ -542,7 +542,7 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
wxString m_In29ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In29ChoiceNChoices = sizeof( m_In29ChoiceChoices ) / sizeof( wxString );
m_In29Choice = new wxChoice( m_LayersListPanel, ID_IN29CHOICE, wxDefaultPosition, wxDefaultSize, m_In29ChoiceNChoices, m_In29ChoiceChoices, 0 );
m_In29Choice->SetSelection( 1 );
m_In29Choice->SetSelection( 0 );
m_In29Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In29Choice, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
@ -556,7 +556,7 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
wxString m_In30ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In30ChoiceNChoices = sizeof( m_In30ChoiceChoices ) / sizeof( wxString );
m_In30Choice = new wxChoice( m_LayersListPanel, ID_IN30CHOICE, wxDefaultPosition, wxDefaultSize, m_In30ChoiceNChoices, m_In30ChoiceChoices, 0 );
m_In30Choice->SetSelection( 3 );
m_In30Choice->SetSelection( 0 );
m_In30Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In30Choice, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
@ -574,7 +574,7 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
wxString m_BackChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_BackChoiceNChoices = sizeof( m_BackChoiceChoices ) / sizeof( wxString );
m_BackChoice = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_BackChoiceNChoices, m_BackChoiceChoices, 0 );
m_BackChoice->SetSelection( 3 );
m_BackChoice->SetSelection( 0 );
m_BackChoice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_BackChoice, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
@ -665,7 +665,7 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_MarginName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Margin"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_MarginName, 0, wxEXPAND|wxRIGHT, 5 );
m_MarginStaticText = new wxStaticText( m_LayersListPanel, ID_ECO2CHOICE, _("Edge_Cuts setback"), wxDefaultPosition, wxDefaultSize, 0 );
m_MarginStaticText = new wxStaticText( m_LayersListPanel, ID_ECO2CHOICE, _("Board contour setback"), wxDefaultPosition, wxDefaultSize, 0 );
m_MarginStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_MarginStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
@ -719,9 +719,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User1Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User1"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User1Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User1StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User1StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User1StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User1TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User1TypeNChoices = sizeof( m_User1TypeChoices ) / sizeof( wxString );
m_User1Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User1TypeNChoices, m_User1TypeChoices, 0 );
m_User1Type->SetSelection( 0 );
m_User1Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User1Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User2CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User2CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -729,9 +733,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User2Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User2"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User2Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User2StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User2StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User2StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User2TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User2TypeNChoices = sizeof( m_User2TypeChoices ) / sizeof( wxString );
m_User2Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User2TypeNChoices, m_User2TypeChoices, 0 );
m_User2Type->SetSelection( 0 );
m_User2Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User2Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User3CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User3CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -739,9 +747,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User3Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User3"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User3Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User3StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User3StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User3StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User3TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User3TypeNChoices = sizeof( m_User3TypeChoices ) / sizeof( wxString );
m_User3Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User3TypeNChoices, m_User3TypeChoices, 0 );
m_User3Type->SetSelection( 0 );
m_User3Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User3Type, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
m_User4CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User4CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -749,9 +761,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User4Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User4"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User4Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User4StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User4StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User4StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User4TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User4TypeNChoices = sizeof( m_User4TypeChoices ) / sizeof( wxString );
m_User4Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User4TypeNChoices, m_User4TypeChoices, 0 );
m_User4Type->SetSelection( 0 );
m_User4Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User4Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User5CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User5CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -759,9 +775,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User5Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User5"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User5Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User5StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User5StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User5StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User5TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User5TypeNChoices = sizeof( m_User5TypeChoices ) / sizeof( wxString );
m_User5Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User5TypeNChoices, m_User5TypeChoices, 0 );
m_User5Type->SetSelection( 0 );
m_User5Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User5Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User6CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User6CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -769,9 +789,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User6Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User6"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User6Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User6StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User6StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User6StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User6TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User6TypeNChoices = sizeof( m_User6TypeChoices ) / sizeof( wxString );
m_User6Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User6TypeNChoices, m_User6TypeChoices, 0 );
m_User6Type->SetSelection( 0 );
m_User6Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User6Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User7CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User7CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -779,9 +803,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User7Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User7"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User7Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User7StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User7StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User7StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User7TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User7TypeNChoices = sizeof( m_User7TypeChoices ) / sizeof( wxString );
m_User7Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User7TypeNChoices, m_User7TypeChoices, 0 );
m_User7Type->SetSelection( 0 );
m_User7Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User7Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User8CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User8CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -789,9 +817,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User8Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User8"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User8Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User8StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User8StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User8StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User8TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User8TypeNChoices = sizeof( m_User8TypeChoices ) / sizeof( wxString );
m_User8Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User8TypeNChoices, m_User8TypeChoices, 0 );
m_User8Type->SetSelection( 0 );
m_User8Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User8Type, 0, wxRIGHT|wxLEFT|wxEXPAND, 5 );
m_User9CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User9CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
@ -799,9 +831,13 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_User9Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User9"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User9Name, 0, wxEXPAND|wxRIGHT, 5 );
m_User9StaticText = new wxStaticText( m_LayersListPanel, wxID_ANY, _("User defined layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_User9StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_User9StaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
wxString m_User9TypeChoices[] = { _("Auxillary"), _(" Off-board, front"), _("Off-board, back") };
int m_User9TypeNChoices = sizeof( m_User9TypeChoices ) / sizeof( wxString );
m_User9Type = new wxChoice( m_LayersListPanel, ID_BACKCHOICE, wxDefaultPosition, wxDefaultSize, m_User9TypeNChoices, m_User9TypeChoices, 0 );
m_User9Type->SetSelection( 0 );
m_User9Type->SetToolTip( _("Auxillary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User9Type, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
m_LayersListPanel->SetSizer( m_LayerListFlexGridSizer );

View File

@ -7288,7 +7288,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">1</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
@ -7484,7 +7484,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">3</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
@ -7680,7 +7680,7 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">3</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
@ -9099,7 +9099,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">ID_ECO2CHOICE</property>
<property name="label">Edge_Cuts setback</property>
<property name="label">Board contour setback</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
@ -10033,9 +10033,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -10049,6 +10049,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -10063,9 +10064,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -10073,7 +10072,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User1StaticText</property>
<property name="name">m_User1Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -10081,16 +10080,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -10226,9 +10229,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -10242,6 +10245,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -10256,9 +10260,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -10266,7 +10268,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User2StaticText</property>
<property name="name">m_User2Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -10274,16 +10276,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -10419,9 +10425,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -10435,6 +10441,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -10449,9 +10456,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -10459,7 +10464,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User3StaticText</property>
<property name="name">m_User3Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -10467,16 +10472,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -10612,9 +10621,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -10628,6 +10637,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -10642,9 +10652,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -10652,7 +10660,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User4StaticText</property>
<property name="name">m_User4Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -10660,16 +10668,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -10805,9 +10817,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -10821,6 +10833,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -10835,9 +10848,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -10845,7 +10856,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User5StaticText</property>
<property name="name">m_User5Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -10853,16 +10864,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -10998,9 +11013,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -11014,6 +11029,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -11028,9 +11044,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -11038,7 +11052,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User6StaticText</property>
<property name="name">m_User6Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -11046,16 +11060,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -11191,9 +11209,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -11207,6 +11225,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -11221,9 +11240,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -11231,7 +11248,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User7StaticText</property>
<property name="name">m_User7Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -11239,16 +11256,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -11384,9 +11405,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxRIGHT|wxLEFT|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -11400,6 +11421,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -11414,9 +11436,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -11424,7 +11444,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User8StaticText</property>
<property name="name">m_User8Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -11432,16 +11452,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
<object class="sizeritem" expanded="true">
@ -11577,9 +11601,9 @@
</object>
<object class="sizeritem" expanded="true">
<property name="border">5</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT</property>
<property name="flag">wxEXPAND|wxRIGHT|wxLEFT</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="true">
<object class="wxChoice" expanded="true">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
@ -11593,6 +11617,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices">&quot;Auxillary&quot; &quot; Off-board, front&quot; &quot;Off-board, back&quot;</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
@ -11607,9 +11632,7 @@
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">User defined layer</property>
<property name="markup">0</property>
<property name="id">ID_BACKCHOICE</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
@ -11617,7 +11640,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_User9StaticText</property>
<property name="name">m_User9Type</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
@ -11625,16 +11648,20 @@
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="tooltip">Auxillary layers do not flip with board side, while back and front layers do.</property>
<property name="validator_data_type"></property>
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
</object>
</object>
</object>

View File

@ -319,31 +319,31 @@ class PANEL_SETUP_LAYERS_BASE : public wxPanel
wxStaticText* m_DrawingsStaticText;
wxCheckBox* m_User1CheckBox;
wxTextCtrl* m_User1Name;
wxStaticText* m_User1StaticText;
wxChoice* m_User1Type;
wxCheckBox* m_User2CheckBox;
wxTextCtrl* m_User2Name;
wxStaticText* m_User2StaticText;
wxChoice* m_User2Type;
wxCheckBox* m_User3CheckBox;
wxTextCtrl* m_User3Name;
wxStaticText* m_User3StaticText;
wxChoice* m_User3Type;
wxCheckBox* m_User4CheckBox;
wxTextCtrl* m_User4Name;
wxStaticText* m_User4StaticText;
wxChoice* m_User4Type;
wxCheckBox* m_User5CheckBox;
wxTextCtrl* m_User5Name;
wxStaticText* m_User5StaticText;
wxChoice* m_User5Type;
wxCheckBox* m_User6CheckBox;
wxTextCtrl* m_User6Name;
wxStaticText* m_User6StaticText;
wxChoice* m_User6Type;
wxCheckBox* m_User7CheckBox;
wxTextCtrl* m_User7Name;
wxStaticText* m_User7StaticText;
wxChoice* m_User7Type;
wxCheckBox* m_User8CheckBox;
wxTextCtrl* m_User8Name;
wxStaticText* m_User8StaticText;
wxChoice* m_User8Type;
wxCheckBox* m_User9CheckBox;
wxTextCtrl* m_User9Name;
wxStaticText* m_User9StaticText;
wxChoice* m_User9Type;
// Virtual event handlers, override them in your derived class
virtual void addUserDefinedLayer( wxCommandEvent& event ) { event.Skip(); }

View File

@ -2290,7 +2290,7 @@ void FOOTPRINT::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
SetPosition( finalPos );
// Flip layer
BOARD_ITEM::SetLayer( FlipLayer( GetLayer() ) );
BOARD_ITEM::SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
// Calculate the new orientation, and then clear it for pad flipping.
EDA_ANGLE newOrientation = -m_orient;

View File

@ -363,7 +363,7 @@ void PCB_DIMENSION_BASE::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
{
Mirror( aCentre );
SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
}
@ -394,7 +394,7 @@ void PCB_DIMENSION_BASE::Mirror( const VECTOR2I& axis_pos, bool aMirrorLeftRight
INVERT( m_end.y );
}
if( ( GetLayerSet() & LSET::SideSpecificMask() ).any() )
if( IsSideSpecific() )
SetMirrored( !IsMirrored() );
Update();

View File

@ -142,7 +142,7 @@ void PCB_GENERATOR::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
else
MIRROR( m_origin.y, aCentre.y );
SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
PCB_GROUP::Flip( aCentre, aFlipLeftRight );
}

View File

@ -2062,7 +2062,7 @@ bool FABMASTER::loadFootprints( BOARD* aBoard )
if( src->mirror )
{
txt->SetLayer( FlipLayer( layer ) );
txt->SetLayer( aBoard->FlipLayer( layer ) );
txt->SetTextPos( VECTOR2I( lsrc->start_x,
2 * src->y - ( lsrc->start_y - lsrc->height / 2 ) ) );
}
@ -2121,7 +2121,7 @@ bool FABMASTER::loadFootprints( BOARD* aBoard )
if( src->mirror )
{
line->SetLayer( FlipLayer( layer ) );
line->SetLayer( aBoard->FlipLayer( layer ) );
line->SetStart( VECTOR2I( lsrc->start_x, 2 * src->y - lsrc->start_y ) );
line->SetEnd( VECTOR2I( lsrc->end_x, 2 * src->y - lsrc->end_y ) );
}
@ -2190,7 +2190,7 @@ bool FABMASTER::loadFootprints( BOARD* aBoard )
if( src->mirror )
{
rect->SetLayer( FlipLayer( layer ) );
rect->SetLayer( aBoard->FlipLayer( layer ) );
rect->SetStart( VECTOR2I( lsrc->start_x, 2 * src->y - lsrc->start_y ) );
rect->SetEnd( VECTOR2I( lsrc->end_x, 2 * src->y - lsrc->end_y ) );
}
@ -2215,7 +2215,7 @@ bool FABMASTER::loadFootprints( BOARD* aBoard )
if( src->mirror )
{
txt->SetLayer( FlipLayer( layer ) );
txt->SetLayer( aBoard->FlipLayer( layer ) );
txt->SetTextPos( VECTOR2I( lsrc->start_x,
2 * src->y - ( lsrc->start_y - lsrc->height / 2 ) ) );
}

View File

@ -659,7 +659,8 @@ void PCB_IO_KICAD_SEXPR::formatBoardLayers( const BOARD* aBoard, int aNestLevel
{
PCB_LAYER_ID layer = *cu;
m_out->Print( aNestLevel+1, "(%d %s %s", layer,
m_out->Print( aNestLevel+1, "(%d %s %s",
layer,
m_out->Quotew( LSET::Name( layer ) ).c_str(),
LAYER::ShowType( aBoard->GetLayerType( layer ) ) );
@ -706,9 +707,15 @@ void PCB_IO_KICAD_SEXPR::formatBoardLayers( const BOARD* aBoard, int aNestLevel
{
PCB_LAYER_ID layer = *seq;
m_out->Print( aNestLevel+1, "(%d %s user", layer,
m_out->Print( aNestLevel+1, "(%d %s",
layer,
m_out->Quotew( LSET::Name( layer ) ).c_str() );
if( layer >= User_1 && layer <= User_9 )
m_out->Print( 0, " %s", LAYER::ShowType( aBoard->GetLayerType( layer ) ) );
else
m_out->Print( 0, " user" );
if( m_board->GetLayerName( layer ) != LSET::Name( layer ) )
m_out->Print( 0, " %s", m_out->Quotew( m_board->GetLayerName( layer ) ).c_str() );

View File

@ -155,7 +155,8 @@ class PCB_IO_KICAD_SEXPR; // forward decl
//#define SEXPR_BOARD_FILE_VERSION 20240202 // Tables
//#define SEXPR_BOARD_FILE_VERSION 20240225 // Rationalization of solder_paste_margin
//#define SEXPR_BOARD_FILE_VERSION 20240609 // Add 'tenting' keyword
#define SEXPR_BOARD_FILE_VERSION 20240617 // Table angles
//#define SEXPR_BOARD_FILE_VERSION 20240617 // Table angles
#define SEXPR_BOARD_FILE_VERSION 20240703 // User layer types
#define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag
#define LEGACY_ARC_FORMATTING 20210925 ///< These were the last to use old arc formatting

View File

@ -168,7 +168,7 @@ void PCAD_ARC::Flip()
m_StartX = -m_StartX;
m_Angle = -m_Angle;
m_KiCadLayer = FlipLayer( m_KiCadLayer );
m_KiCadLayer = m_board->FlipLayer( m_KiCadLayer );
}

View File

@ -525,7 +525,7 @@ void PCAD_FOOTPRINT::AddToBoard( FOOTPRINT* aFootprint )
ref_text->SetMirrored( m_Name.mirror );
ref_text->SetVisible( m_Name.textIsVisible );
ref_text->SetLayer( m_Mirror ? FlipLayer( m_KiCadLayer ) : m_KiCadLayer );
ref_text->SetLayer( m_Mirror ? m_board->FlipLayer( m_KiCadLayer ) : m_KiCadLayer );
// value text
PCB_FIELD* val_text = &footprint->Value();
@ -550,7 +550,7 @@ void PCAD_FOOTPRINT::AddToBoard( FOOTPRINT* aFootprint )
val_text->SetMirrored( m_Value.mirror );
val_text->SetVisible( m_Value.textIsVisible );
val_text->SetLayer( m_Value.mirror ? FlipLayer( m_KiCadLayer ) : m_KiCadLayer );
val_text->SetLayer( m_Value.mirror ? m_board->FlipLayer( m_KiCadLayer ) : m_KiCadLayer );
// TEXTS
for( i = 0; i < (int) m_FootprintItems.GetCount(); i++ )

View File

@ -110,7 +110,7 @@ void PCAD_LINE::Flip()
PCAD_PCB_COMPONENT::Flip();
m_ToX = -m_ToX;
m_KiCadLayer = FlipLayer( m_KiCadLayer );
m_KiCadLayer = m_board->FlipLayer( m_KiCadLayer );
}

View File

@ -187,7 +187,7 @@ void PCAD_PAD::Flip()
m_Rotation = -m_Rotation;
for( i = 0; i < (int)m_Shapes.GetCount(); i++ )
m_Shapes[i]->m_KiCadLayer = FlipLayer( m_Shapes[i]->m_KiCadLayer );
m_Shapes[i]->m_KiCadLayer = m_board->FlipLayer( m_Shapes[i]->m_KiCadLayer );
}

View File

@ -230,7 +230,7 @@ void PCAD_POLYGON::Flip()
{
PCAD_PCB_COMPONENT::Flip();
m_KiCadLayer = FlipLayer( m_KiCadLayer );
m_KiCadLayer = m_board->FlipLayer( m_KiCadLayer );
}

View File

@ -2149,7 +2149,7 @@ void PCB_PAINTER::draw( const PCB_TEXT* aText, int aLayer )
else
attrs.m_StrokeWidth = getLineThickness( aText->GetEffectiveTextPenWidth() );
if( m_gal->IsFlippedX() && !( aText->GetLayerSet() & LSET::SideSpecificMask() ).any() )
if( m_gal->IsFlippedX() && !aText->IsSideSpecific() )
{
VECTOR2I textPos = aText->GetTextPos();
VECTOR2I textWidth = VECTOR2I( aText->GetTextBox().GetWidth(), 0 );
@ -2307,7 +2307,7 @@ void PCB_PAINTER::draw( const PCB_TEXTBOX* aTextBox, int aLayer )
TEXT_ATTRIBUTES attrs = aTextBox->GetAttributes();
attrs.m_StrokeWidth = getLineThickness( aTextBox->GetEffectiveTextPenWidth() );
if( m_gal->IsFlippedX() && !( aTextBox->GetLayerSet() & LSET::SideSpecificMask() ).any() )
if( m_gal->IsFlippedX() && !aTextBox->IsSideSpecific() )
{
attrs.m_Mirrored = !attrs.m_Mirrored;
strokeText( resolvedText, aTextBox->GetDrawPos( true ), attrs, metrics );
@ -2786,7 +2786,7 @@ void PCB_PAINTER::draw( const PCB_DIMENSION_BASE* aDimension, int aLayer )
wxString resolvedText = aDimension->GetShownText( true );
TEXT_ATTRIBUTES attrs = aDimension->GetAttributes();
if( m_gal->IsFlippedX() && !( aDimension->GetLayerSet() & LSET::SideSpecificMask() ).any() )
if( m_gal->IsFlippedX() && !aDimension->IsSideSpecific() )
attrs.m_Mirrored = !attrs.m_Mirrored;
if( outline_mode )

View File

@ -532,7 +532,7 @@ void PCB_SHAPE::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
{
flip( aCentre, aFlipLeftRight );
SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
}

View File

@ -227,7 +227,7 @@ void PCB_TABLE::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
rowOffset += GetColCount();
}
SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
Normalize();
}

View File

@ -97,7 +97,7 @@ void PCB_TARGET::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
else
m_pos.y = aCentre.y - ( m_pos.y - aCentre.y );
SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
}

View File

@ -475,9 +475,9 @@ void PCB_TEXT::Flip( const VECTOR2I& aCentre, bool aFlipLeftRight )
SetTextAngle( ANGLE_180 - GetTextAngle() );
}
SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
SetLayer( GetBoard()->FlipLayer( GetLayer() ) );
if( ( GetLayerSet() & LSET::SideSpecificMask() ).any() )
if( IsSideSpecific() )
SetMirrored( !IsMirrored() );
}

Some files were not shown because too many files have changed in this diff Show More