7
mirror of https://gitlab.com/kicad/code/kicad.git synced 2025-03-30 05:16:58 +00:00

Set base user layer count

Default colors cycle through repetition for unknown layers.  Allows
importing from complex Altium/CADSTAR boards with more than 10
documentation layers
This commit is contained in:
Seth Hillbrand 2024-11-03 10:26:10 -08:00
parent 33a8425d3d
commit 6c2a559cbe
24 changed files with 1044 additions and 13007 deletions

View File

@ -37,36 +37,6 @@ wxString LayerName( int aLayer )
// Copper
case PCB_LAYER_ID::F_Cu: return wxT( "F.Cu" );
case PCB_LAYER_ID::In1_Cu: return wxT( "In1.Cu" );
case PCB_LAYER_ID::In2_Cu: return wxT( "In2.Cu" );
case PCB_LAYER_ID::In3_Cu: return wxT( "In3.Cu" );
case PCB_LAYER_ID::In4_Cu: return wxT( "In4.Cu" );
case PCB_LAYER_ID::In5_Cu: return wxT( "In5.Cu" );
case PCB_LAYER_ID::In6_Cu: return wxT( "In6.Cu" );
case PCB_LAYER_ID::In7_Cu: return wxT( "In7.Cu" );
case PCB_LAYER_ID::In8_Cu: return wxT( "In8.Cu" );
case PCB_LAYER_ID::In9_Cu: return wxT( "In9.Cu" );
case PCB_LAYER_ID::In10_Cu: return wxT( "In10.Cu" );
case PCB_LAYER_ID::In11_Cu: return wxT( "In11.Cu" );
case PCB_LAYER_ID::In12_Cu: return wxT( "In12.Cu" );
case PCB_LAYER_ID::In13_Cu: return wxT( "In13.Cu" );
case PCB_LAYER_ID::In14_Cu: return wxT( "In14.Cu" );
case PCB_LAYER_ID::In15_Cu: return wxT( "In15.Cu" );
case PCB_LAYER_ID::In16_Cu: return wxT( "In16.Cu" );
case PCB_LAYER_ID::In17_Cu: return wxT( "In17.Cu" );
case PCB_LAYER_ID::In18_Cu: return wxT( "In18.Cu" );
case PCB_LAYER_ID::In19_Cu: return wxT( "In19.Cu" );
case PCB_LAYER_ID::In20_Cu: return wxT( "In20.Cu" );
case PCB_LAYER_ID::In21_Cu: return wxT( "In21.Cu" );
case PCB_LAYER_ID::In22_Cu: return wxT( "In22.Cu" );
case PCB_LAYER_ID::In23_Cu: return wxT( "In23.Cu" );
case PCB_LAYER_ID::In24_Cu: return wxT( "In24.Cu" );
case PCB_LAYER_ID::In25_Cu: return wxT( "In25.Cu" );
case PCB_LAYER_ID::In26_Cu: return wxT( "In26.Cu" );
case PCB_LAYER_ID::In27_Cu: return wxT( "In27.Cu" );
case PCB_LAYER_ID::In28_Cu: return wxT( "In28.Cu" );
case PCB_LAYER_ID::In29_Cu: return wxT( "In29.Cu" );
case PCB_LAYER_ID::In30_Cu: return wxT( "In30.Cu" );
case PCB_LAYER_ID::B_Cu: return wxT( "B.Cu" );
// Technicals
@ -93,21 +63,6 @@ wxString LayerName( int aLayer )
case PCB_LAYER_ID::F_Fab: return wxT( "F.Fab" );
case PCB_LAYER_ID::B_Fab: return wxT( "B.Fab" );
// User definable layers.
case PCB_LAYER_ID::User_1: return wxT( "User.1" );
case PCB_LAYER_ID::User_2: return wxT( "User.2" );
case PCB_LAYER_ID::User_3: return wxT( "User.3" );
case PCB_LAYER_ID::User_4: return wxT( "User.4" );
case PCB_LAYER_ID::User_5: return wxT( "User.5" );
case PCB_LAYER_ID::User_6: return wxT( "User.6" );
case PCB_LAYER_ID::User_7: return wxT( "User.7" );
case PCB_LAYER_ID::User_8: return wxT( "User.8" );
case PCB_LAYER_ID::User_9: return wxT( "User.9" );
case 57: return wxT( "User.10" );
case 59: return wxT( "User.11" );
case 61: return wxT( "User.12" );
case 63: return wxT( "User.13" );
// Rescue
case PCB_LAYER_ID::Rescue: return _( "Rescue" );
@ -202,7 +157,11 @@ wxString LayerName( int aLayer )
case LAYER_VIA_NETNAMES: return _( "Via net names" );
default:
wxCHECK_MSG( false, wxEmptyString, wxString::Format( "Unknown layer ID %d", aLayer ) );
// Catch the general board layers that have numerically increasing names
if( aLayer > 0 && aLayer < PCB_LAYER_ID_COUNT && aLayer & 1 )
return wxString::Format( wxT( "User.%d" ), ( aLayer - PCB_LAYER_ID::User_1 ) / 2 + 1 );
return wxString::Format( wxT( "In%d.Cu" ), ( aLayer - PCB_LAYER_ID::In1_Cu ) / 2 + 1 );
}
}

View File

@ -224,7 +224,9 @@ wxString LSET::Name( PCB_LAYER_ID aLayerId )
default:
if( static_cast<int>( aLayerId ) & 1 )
if( aLayerId < 0 )
txt = wxT( "UNDEFINED" );
else if( static_cast<int>( aLayerId ) & 1 )
{
int offset = ( aLayerId - Rescue ) / 2;
txt = wxString::Format( wxT( "User.%d" ), offset );
@ -572,7 +574,11 @@ LSET LSET::AllCuMask( int aCuLayerCount )
LSET LSET::AllNonCuMask()
{
static const LSET saved = LSET().set() & ~AllCuMask();
LSET saved = LSET().set();
for( auto it = saved.copper_layers_begin(); it != saved.copper_layers_end(); ++it )
saved.reset( *it );
return saved;
}
@ -651,7 +657,12 @@ LSET LSET::PhysicalLayersMask()
LSET LSET::UserDefinedLayers()
{
static const LSET saved(
{ User_1, User_2, User_3, User_4, User_5, User_6, User_7, User_8, User_9 } );
{ User_1, User_2, User_3, User_4, User_5, User_6, User_7, User_8, User_9,
User_10, User_11, User_12, User_13, User_14, User_15, User_16, User_17, User_18,
User_19, User_20, User_21, User_22, User_23, User_24, User_25, User_26, User_27,
User_28, User_29, User_30, User_31, User_32, User_33, User_34, User_35, User_36,
User_37, User_38, User_39, User_40, User_41, User_42, User_43, User_44, User_45 } );
return saved;
}
@ -882,4 +893,21 @@ LSET::non_copper_layers_iterator LSET::non_copper_layers_end() const
}
LSET& LSET::ClearCopperLayers()
{
for( size_t ii = 0; ii < size(); ii += 2 )
reset( ii );
return *this;
}
LSET& LSET::ClearNonCopperLayers()
{
for( size_t ii = 1; ii < size(); ii += 2 )
reset( ii );
return *this;
}
#endif

View File

@ -235,6 +235,42 @@ static const std::map<int, COLOR4D> s_defaultTheme =
{ User_7, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_8, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_9, CSS_COLOR( 232, 178, 167, 1 ) },
{ User_10, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_11, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_12, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_13, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_14, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_15, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_16, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_17, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_18, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_19, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_20, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_21, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_22, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_23, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_24, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_25, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_26, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_27, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_28, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_29, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_30, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_31, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_32, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_33, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_34, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_35, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_36, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_37, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_38, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_39, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_40, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_41, CSS_COLOR( 194, 194, 194, 1 ) },
{ User_42, CSS_COLOR( 89, 148, 220, 1 ) },
{ User_43, CSS_COLOR( 180, 219, 210, 1 ) },
{ User_44, CSS_COLOR( 216, 200, 82, 1 ) },
{ User_45, CSS_COLOR( 194, 194, 194, 1 ) },
{ LAYER_3D_BACKGROUND_BOTTOM, COLOR4D( 0.4, 0.4, 0.5, 1.0 ) },
{ LAYER_3D_BACKGROUND_TOP, COLOR4D( 0.8, 0.8, 0.9, 1.0 ) },
@ -247,6 +283,26 @@ static const std::map<int, COLOR4D> s_defaultTheme =
{ LAYER_3D_SOLDERPASTE, COLOR4D( 0.5, 0.5, 0.5, 1.0 ) }
};
// These are looping colors used higher-order copper layers
static const std::vector<COLOR4D> s_copperColors =
{
{ CSS_COLOR( 237, 124, 51, 1 ) },
{ CSS_COLOR( 91, 195, 235, 1 ) },
{ CSS_COLOR( 247, 111, 142, 1 ) },
{ CSS_COLOR( 167, 165, 198, 1 ) },
{ CSS_COLOR( 40, 204, 217, 1 ) },
{ CSS_COLOR( 232, 178, 167, 1 ) },
{ CSS_COLOR( 242, 237, 161, 1 ) }
};
// These are looping colors used for user colors
static const std::vector<COLOR4D> s_userColors =
{
{ CSS_COLOR( 89, 148, 220, 1 ) },
{ CSS_COLOR( 180, 219, 210, 1 ) },
{ CSS_COLOR( 216, 200, 82, 1 ) },
{ CSS_COLOR( 194, 194, 194, 1 ) },
};
static const std::map<int, COLOR4D> s_classicTheme =
{
@ -453,6 +509,42 @@ static const std::map<int, COLOR4D> s_classicTheme =
{ User_7, COLOR4D( BLUE ) },
{ User_8, COLOR4D( BLUE ) },
{ User_9, COLOR4D( BLUE ) },
{ User_10, COLOR4D( BLUE ) },
{ User_11, COLOR4D( BLUE ) },
{ User_12, COLOR4D( BLUE ) },
{ User_13, COLOR4D( BLUE ) },
{ User_14, COLOR4D( BLUE ) },
{ User_15, COLOR4D( BLUE ) },
{ User_16, COLOR4D( BLUE ) },
{ User_17, COLOR4D( BLUE ) },
{ User_18, COLOR4D( BLUE ) },
{ User_19, COLOR4D( BLUE ) },
{ User_20, COLOR4D( BLUE ) },
{ User_21, COLOR4D( BLUE ) },
{ User_22, COLOR4D( BLUE ) },
{ User_23, COLOR4D( BLUE ) },
{ User_24, COLOR4D( BLUE ) },
{ User_25, COLOR4D( BLUE ) },
{ User_26, COLOR4D( BLUE ) },
{ User_27, COLOR4D( BLUE ) },
{ User_28, COLOR4D( BLUE ) },
{ User_29, COLOR4D( BLUE ) },
{ User_30, COLOR4D( BLUE ) },
{ User_31, COLOR4D( BLUE ) },
{ User_32, COLOR4D( BLUE ) },
{ User_33, COLOR4D( BLUE ) },
{ User_34, COLOR4D( BLUE ) },
{ User_35, COLOR4D( BLUE ) },
{ User_36, COLOR4D( BLUE ) },
{ User_37, COLOR4D( BLUE ) },
{ User_38, COLOR4D( BLUE ) },
{ User_39, COLOR4D( BLUE ) },
{ User_40, COLOR4D( BLUE ) },
{ User_41, COLOR4D( BLUE ) },
{ User_42, COLOR4D( BLUE ) },
{ User_43, COLOR4D( BLUE ) },
{ User_44, COLOR4D( BLUE ) },
{ User_45, COLOR4D( BLUE ) },
{ LAYER_3D_BACKGROUND_BOTTOM, COLOR4D( 0.4, 0.4, 0.5, 1.0 ) },
{ LAYER_3D_BACKGROUND_TOP, COLOR4D( 0.8, 0.8, 0.9, 1.0 ) },

View File

@ -110,6 +110,12 @@ COLOR_SETTINGS::COLOR_SETTINGS( const wxString& aFilename, bool aAbsolutePath )
for( int i = 0, id = GERBVIEW_LAYER_ID_START;
id < GERBER_DRAWLAYERS_COUNT + GERBVIEW_LAYER_ID_START; ++i, ++id )
{
if( !s_defaultTheme.count( id ) )
{
wxLogTrace( "colors", "Missing default color for gerbview layer %d", id );
continue;
}
m_params.emplace_back( new COLOR_MAP_PARAM( "gerbview.layers." + std::to_string( i ), id,
s_defaultTheme.at( id ), &m_colors ) );
}
@ -196,6 +202,42 @@ COLOR_SETTINGS::COLOR_SETTINGS( const wxString& aFilename, bool aAbsolutePath )
CLR( "board.user_7", User_7 );
CLR( "board.user_8", User_8 );
CLR( "board.user_9", User_9 );
CLR( "board.user_10", User_10 );
CLR( "board.user_11", User_11 );
CLR( "board.user_12", User_12 );
CLR( "board.user_13", User_13 );
CLR( "board.user_14", User_14 );
CLR( "board.user_15", User_15 );
CLR( "board.user_16", User_16 );
CLR( "board.user_17", User_17 );
CLR( "board.user_18", User_18 );
CLR( "board.user_19", User_19 );
CLR( "board.user_20", User_20 );
CLR( "board.user_21", User_21 );
CLR( "board.user_22", User_22 );
CLR( "board.user_23", User_23 );
CLR( "board.user_24", User_24 );
CLR( "board.user_25", User_25 );
CLR( "board.user_26", User_26 );
CLR( "board.user_27", User_27 );
CLR( "board.user_28", User_28 );
CLR( "board.user_29", User_29 );
CLR( "board.user_30", User_30 );
CLR( "board.user_31", User_31 );
CLR( "board.user_32", User_32 );
CLR( "board.user_33", User_33 );
CLR( "board.user_34", User_34 );
CLR( "board.user_35", User_35 );
CLR( "board.user_36", User_36 );
CLR( "board.user_37", User_37 );
CLR( "board.user_38", User_38 );
CLR( "board.user_39", User_39 );
CLR( "board.user_40", User_40 );
CLR( "board.user_41", User_41 );
CLR( "board.user_42", User_42 );
CLR( "board.user_43", User_43 );
CLR( "board.user_44", User_44 );
CLR( "board.user_45", User_45 );
// Colors for 3D viewer, which are used as defaults unless overridden by the board
CLR( "3d_viewer.background_bottom", LAYER_3D_BACKGROUND_BOTTOM );
@ -369,8 +411,10 @@ COLOR4D COLOR_SETTINGS::GetDefaultColor( int aLayer )
if( p )
m_defaultColors[aLayer] = p->GetDefault();
else if( IsCopperLayer( aLayer ) )
m_defaultColors[aLayer] = s_copperColors[aLayer % s_copperColors.size()];
else
m_defaultColors[aLayer] = COLOR4D::UNSPECIFIED;
m_defaultColors[aLayer] = s_userColors[aLayer % s_userColors.size()];
}
return m_defaultColors.at( aLayer );

View File

@ -42,7 +42,7 @@ enum RENDER_TARGET
};
// Used in view.h to initialize VIEW_MAX_LAYERS and graphic_abstraction_layer.cpp
#define MAX_LAYERS_FOR_VIEW 1024
#define MAX_LAYERS_FOR_VIEW 2048
} // namespace KIGFX
#endif /* DEFINITIONS_H_ */

View File

@ -130,9 +130,45 @@ enum PCB_LAYER_ID: int
User_7 = 51,
User_8 = 53,
User_9 = 55,
User_10 = 57,
User_11 = 59,
User_12 = 61,
User_13 = 63,
User_14 = 65,
User_15 = 67,
User_16 = 69,
User_17 = 71,
User_18 = 73,
User_19 = 75,
User_20 = 77,
User_21 = 79,
User_22 = 81,
User_23 = 83,
User_24 = 85,
User_25 = 87,
User_26 = 89,
User_27 = 91,
User_28 = 93,
User_29 = 95,
User_30 = 97,
User_31 = 99,
User_32 = 101,
User_33 = 103,
User_34 = 105,
User_35 = 107,
User_36 = 109,
User_37 = 111,
User_38 = 113,
User_39 = 115,
User_40 = 117,
User_41 = 119,
User_42 = 121,
User_43 = 123,
User_44 = 125,
User_45 = 127,
PCB_LAYER_ID_COUNT = 64
PCB_LAYER_ID_COUNT = 128
};
constexpr PCB_LAYER_ID PCBNEW_LAYER_ID_START = F_Cu;
@ -661,7 +697,8 @@ inline bool IsSolderMaskLayer( int aLayer )
*/
inline bool IsUserLayer( PCB_LAYER_ID aLayerId )
{
return aLayerId >= Dwgs_User && aLayerId <= Eco2_User;
return aLayerId == Dwgs_User || aLayerId == Cmts_User || aLayerId == Eco1_User
|| aLayerId == Eco2_User || ( aLayerId >= User_1 && !IsCopperLayer( aLayerId ) );
}

View File

@ -284,6 +284,16 @@ public:
*/
static int LayerCount( PCB_LAYER_ID aStart, PCB_LAYER_ID aEnd, int aCopperLayerCount );
/**
* Clear the copper layers in this set.
*/
LSET& ClearCopperLayers();
/**
* Clear the non-copper layers in this set.
*/
LSET& ClearNonCopperLayers();
#ifndef SWIG
// Custom iterator to iterate over all set bits
class KICOMMON_API all_set_layers_iterator : public BASE_SET::set_bits_iterator

View File

@ -102,7 +102,7 @@ BOARD::BOARD() :
if( IsCopperLayer( layer ) )
m_layers[layer].m_type = LT_SIGNAL;
else if( layer >= User_1 && layer <= User_9 )
else if( layer >= User_1 && layer & 1 )
m_layers[layer].m_type = LT_AUX;
else
m_layers[layer].m_type = LT_UNDEFINED;
@ -661,7 +661,7 @@ LAYER_T BOARD::GetLayerType( PCB_LAYER_ID aLayer ) const
return it->second.m_type;
}
if( aLayer >= User_1 && aLayer <= User_9 )
if( aLayer >= User_1 && !IsCopperLayer( aLayer ) )
return LT_AUX;
else if( IsCopperLayer( aLayer ) )
return LT_SIGNAL;
@ -714,29 +714,29 @@ LAYER_T LAYER::ParseType( const char* aType )
void BOARD::recalcOpposites()
{
for( int layer = F_Cu; layer < User_9; ++layer )
for( int layer = F_Cu; layer < PCB_LAYER_ID_COUNT; ++layer )
m_layers[layer].m_opposite = ::FlipLayer( ToLAYER_ID( layer ), GetCopperLayerCount() );
// Match up similary-named front/back user layers
for( int layer = User_1; layer <= User_9; ++layer )
for( int layer = User_1; layer <= PCB_LAYER_ID_COUNT; layer += 2 )
{
if( m_layers[layer].m_opposite != layer ) // already paired
continue;
if( m_layers[layer].m_type != LT_FRONT )
if( m_layers[layer].m_type != LT_FRONT && m_layers[layer].m_type != LT_BACK )
continue;
wxString principalName = m_layers[layer].m_userName.AfterFirst( '.' );
for( int ii = User_1; ii <= User_9; ++ii )
for( int ii = layer + 2; ii <= PCB_LAYER_ID_COUNT; ii += 2 )
{
if( ii == layer ) // can't pair with self
continue;
if( m_layers[ii].m_opposite != ii ) // already paired
continue;
if( m_layers[ii].m_type != LT_BACK )
if( m_layers[ii].m_type != LT_FRONT && m_layers[ii].m_type != LT_BACK )
continue;
if( m_layers[layer].m_type == m_layers[ii].m_type )
continue;
wxString candidate = m_layers[ii].m_userName.AfterFirst( '.' );
@ -751,9 +751,9 @@ void BOARD::recalcOpposites()
}
// Match up non-custom-named consecutive front/back user layer pairs
for( int layer = User_1; layer < User_9; ++layer )
for( int layer = User_1; layer < PCB_LAYER_ID_COUNT - 2; layer += 2 )
{
int next = layer + 1;
int next = layer + 2;
// ignore already-matched layers
if( m_layers[layer].m_opposite != layer || m_layers[next].m_opposite != next )

View File

@ -1432,7 +1432,7 @@ void BOARD_DESIGN_SETTINGS::SetCopperLayerCount( int aNewLayerCount )
m_copperLayerCount = aNewLayerCount;
// Update only enabled copper layers mask
m_enabledLayers &= ~LSET::AllCuMask();
m_enabledLayers.ClearCopperLayers();
if( aNewLayerCount > 0 )
m_enabledLayers |= LSET::AllCuMask( aNewLayerCount );
@ -1450,7 +1450,7 @@ void BOARD_DESIGN_SETTINGS::SetEnabledLayers( LSET aMask )
m_enabledLayers = aMask;
// update m_CopperLayerCount to ensure its consistency with m_EnabledLayers
m_copperLayerCount = ( aMask & LSET::AllCuMask() ).count();
m_copperLayerCount = aMask.ClearNonCopperLayers().count();
}

View File

@ -609,8 +609,8 @@ void PANEL_SETUP_BOARD_STACKUP::updateCopperLayerCount()
wxASSERT( copperCount >= 2 );
m_enabledLayers |= LSET::ExternalCuMask();
m_enabledLayers &= ~LSET::InternalCuMask();
m_enabledLayers.ClearCopperLayers();
m_enabledLayers |= F_Cu | B_Cu;
// F_Cu and B_Cu are already enabled. Enable internal cu layers
int internal_cu_count = copperCount - 2;

View File

@ -722,7 +722,7 @@ void DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAddLayer( wxCommandEvent& event )
PCB_LAYER_ID nextLayer = User_1;
while( alg::contains( *m_privateLayers, nextLayer ) && nextLayer < User_9 )
while( alg::contains( *m_privateLayers, nextLayer ) && nextLayer < User_45 )
nextLayer = ToLAYER_ID( nextLayer + 1 );
m_privateLayers->push_back( nextLayer );

File diff suppressed because it is too large Load Diff

View File

@ -40,14 +40,15 @@ class PANEL_SETUP_BOARD_STACKUP;
*/
struct PANEL_SETUP_LAYERS_CTLs
{
PANEL_SETUP_LAYERS_CTLs( wxControl* aName, wxCheckBox* aCheckBox, wxControl* aChoiceOrDesc )
PANEL_SETUP_LAYERS_CTLs() : name( nullptr ), checkbox( nullptr ), choice( nullptr ) {}
PANEL_SETUP_LAYERS_CTLs( wxTextCtrl* aName, wxCheckBox* aCheckBox, wxControl* aChoiceOrDesc )
{
name = aName;
checkbox = aCheckBox;
choice = aChoiceOrDesc;
}
wxControl* name;
wxTextCtrl* name;
wxCheckBox* checkbox;
wxControl* choice;
};
@ -76,9 +77,6 @@ public:
///< @return the selected layer mask within the UI checkboxes
LSET GetUILayerMask();
///< @return the layer name within the UI wxTextCtrl
wxString GetLayerName( int layer );
/**
* Called when switching to this tab to make sure that any changes to the copper layer count
* made on the physical stackup page are reflected here
@ -94,17 +92,14 @@ public:
bool IsInitialized() const { return m_initialized; }
private:
void setLayerCheckBox( int layer, bool isChecked );
void setLayerCheckBox( PCB_LAYER_ID layer, bool isChecked );
void setCopperLayerCheckBoxes( int copperCount );
void setMandatoryLayerCheckBoxes();
void setUserDefinedLayerCheckBoxes();
void showBoardLayerNames();
void showSelectedLayerCheckBoxes( LSET enableLayerMask );
void showLayerTypes();
void OnCheckBox( wxCommandEvent& event ) override;
void DenyChangeCheckBox( wxCommandEvent& event ) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
virtual void addUserDefinedLayer( wxCommandEvent& aEvent ) override;
@ -122,10 +117,15 @@ private:
*/
LSEQ getNonRemovableLayers();
PANEL_SETUP_LAYERS_CTLs getCTLs( int aLayerNumber );
wxControl* getName( int aLayer );
wxCheckBox* getCheckBox( int aLayer );
wxChoice* getChoice( int aLayer );
wxTextCtrl* getName( PCB_LAYER_ID aLayer );
wxCheckBox* getCheckBox( PCB_LAYER_ID aLayer );
wxChoice* getChoice( PCB_LAYER_ID aLayer );
void initialize_front_tech_layers();
void initialize_layers_controls();
void initialize_back_tech_layers();
void append_user_layer( PCB_LAYER_ID aLayer );
private:
PCB_EDIT_FRAME* m_frame;
@ -133,6 +133,81 @@ private:
BOARD* m_pcb;
LSET m_enabledLayers;
bool m_initialized;
std::map<PCB_LAYER_ID, PANEL_SETUP_LAYERS_CTLs> m_layersControls;
wxCheckBox* m_CrtYdFrontCheckBox;
wxTextCtrl* m_CrtYdFrontName;
wxStaticText* m_CrtYdFrontStaticText;
wxCheckBox* m_FabFrontCheckBox;
wxTextCtrl* m_FabFrontName;
wxStaticText* m_FabFrontStaticText;
wxCheckBox* m_AdhesFrontCheckBox;
wxTextCtrl* m_AdhesFrontName;
wxStaticText* m_AdhesFrontStaticText;
wxCheckBox* m_SoldPFrontCheckBox;
wxTextCtrl* m_SoldPFrontName;
wxStaticText* m_SoldPFrontStaticText;
wxCheckBox* m_SilkSFrontCheckBox;
wxTextCtrl* m_SilkSFrontName;
wxStaticText* m_SilkSFrontStaticText;
wxCheckBox* m_MaskFrontCheckBox;
wxTextCtrl* m_MaskFrontName;
wxStaticText* m_MaskFrontStaticText;
wxCheckBox* m_MaskBackCheckBox;
wxTextCtrl* m_MaskBackName;
wxStaticText* m_MaskBackStaticText;
wxCheckBox* m_SilkSBackCheckBox;
wxTextCtrl* m_SilkSBackName;
wxStaticText* m_SilkSBackStaticText;
wxCheckBox* m_SoldPBackCheckBox;
wxTextCtrl* m_SoldPBackName;
wxStaticText* m_SoldPBackStaticText;
wxCheckBox* m_AdhesBackCheckBox;
wxTextCtrl* m_AdhesBackName;
wxStaticText* m_AdhesBackStaticText;
wxCheckBox* m_FabBackCheckBox;
wxTextCtrl* m_FabBackName;
wxStaticText* m_FabBackStaticText;
wxCheckBox* m_CrtYdBackCheckBox;
wxTextCtrl* m_CrtYdBackName;
wxStaticText* m_CrtYdBackStaticText;
wxCheckBox* m_PCBEdgesCheckBox;
wxTextCtrl* m_PCBEdgesName;
wxStaticText* m_PCBEdgesStaticText;
wxCheckBox* m_MarginCheckBox;
wxTextCtrl* m_MarginName;
wxStaticText* m_MarginStaticText;
wxCheckBox* m_Eco1CheckBox;
wxTextCtrl* m_Eco1Name;
wxStaticText* m_Eco1StaticText;
wxCheckBox* m_Eco2CheckBox;
wxTextCtrl* m_Eco2Name;
wxStaticText* m_Eco2StaticText;
wxCheckBox* m_CommentsCheckBox;
wxTextCtrl* m_CommentsName;
wxStaticText* m_CommentsStaticText;
wxCheckBox* m_DrawingsCheckBox;
wxTextCtrl* m_DrawingsName;
wxStaticText* m_DrawingsStaticText;
};

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6a-dirty)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@ -34,806 +34,16 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
m_LayersListPanel = new wxScrolledWindow( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxTAB_TRAVERSAL|wxVSCROLL );
m_LayersListPanel->SetScrollRate( 0, 5 );
m_LayerListFlexGridSizer = new wxFlexGridSizer( 0, 3, 2, 8 );
m_LayerListFlexGridSizer->AddGrowableCol( 1 );
m_LayerListFlexGridSizer->AddGrowableCol( 2 );
m_LayerListFlexGridSizer->SetFlexibleDirection( wxHORIZONTAL );
m_LayerListFlexGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
m_LayersSizer = new wxFlexGridSizer( 0, 3, 2, 8 );
m_LayersSizer->AddGrowableCol( 1 );
m_LayersSizer->AddGrowableCol( 2 );
m_LayersSizer->SetFlexibleDirection( wxHORIZONTAL );
m_LayersSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_NONE );
m_LayerListFlexGridSizer->Add( 0, 0, 1, wxEXPAND, 5 );
m_CrtYdFrontName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("CrtYd_Front"), wxDefaultPosition, wxDefaultSize, 0 );
m_CrtYdFrontName->SetMinSize( wxSize( 160,-1 ) );
m_LayerListFlexGridSizer->Add( m_CrtYdFrontName, 0, wxRIGHT|wxEXPAND, 5 );
m_CrtYdFrontStaticText = new wxStaticText( m_LayersListPanel, ID_CRTYDFRONTCHOICE, _("Off-board, testing"), wxDefaultPosition, wxDefaultSize, 0 );
m_CrtYdFrontStaticText->Wrap( -1 );
m_CrtYdFrontStaticText->SetMinSize( wxSize( 150,-1 ) );
m_LayerListFlexGridSizer->Add( m_CrtYdFrontStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_FabFrontCheckBox = new wxCheckBox( m_LayersListPanel, ID_FABFRONTCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_FabFrontCheckBox->SetToolTip( _("If you want a fabrication layer for the front side of the board") );
m_LayerListFlexGridSizer->Add( m_FabFrontCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_FabFrontName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Fab_Front"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_FabFrontName, 0, wxEXPAND|wxRIGHT, 5 );
m_FabFrontStaticText = new wxStaticText( m_LayersListPanel, ID_FABFRONTCHOICE, _("Off-board, manufacturing"), wxDefaultPosition, wxDefaultSize, 0 );
m_FabFrontStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_FabFrontStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_AdhesFrontCheckBox = new wxCheckBox( m_LayersListPanel, ID_ADHESFRONTCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_AdhesFrontCheckBox->SetToolTip( _("If you want an adhesive template for the front side of the board") );
m_LayerListFlexGridSizer->Add( m_AdhesFrontCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_AdhesFrontName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Adhes_Front"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_AdhesFrontName, 0, wxEXPAND|wxRIGHT, 5 );
m_AdhesFrontStaticText = new wxStaticText( m_LayersListPanel, ID_ADHESFRONTCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_AdhesFrontStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_AdhesFrontStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_SoldPFrontCheckBox = new wxCheckBox( m_LayersListPanel, ID_SOLDPFRONTCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_SoldPFrontCheckBox->SetToolTip( _("If you want a solder paste layer for front side of the board") );
m_LayerListFlexGridSizer->Add( m_SoldPFrontCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_SoldPFrontName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("SoldP_Front"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_SoldPFrontName, 0, wxEXPAND|wxRIGHT, 5 );
m_SoldPFrontStaticText = new wxStaticText( m_LayersListPanel, ID_SOLDPFRONTCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_SoldPFrontStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_SoldPFrontStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_SilkSFrontCheckBox = new wxCheckBox( m_LayersListPanel, ID_SILKSFRONTCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_SilkSFrontCheckBox->SetToolTip( _("If you want a silk screen layer for the front side of the board") );
m_LayerListFlexGridSizer->Add( m_SilkSFrontCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_SilkSFrontName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("SilkS_Front"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_SilkSFrontName, 0, wxEXPAND|wxRIGHT, 5 );
m_SilkSFrontStaticText = new wxStaticText( m_LayersListPanel, ID_SILKSFRONTCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_SilkSFrontStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_SilkSFrontStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_MaskFrontCheckBox = new wxCheckBox( m_LayersListPanel, ID_MASKFRONTCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_MaskFrontCheckBox->SetToolTip( _("If you want a solder mask layer for the front of the board") );
m_LayerListFlexGridSizer->Add( m_MaskFrontCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_MaskFrontName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Mask_Front"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_MaskFrontName, 0, wxEXPAND|wxRIGHT, 5 );
m_MaskFrontStaticText = new wxStaticText( m_LayersListPanel, ID_MASKFRONTCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_MaskFrontStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_MaskFrontStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_FrontCheckBox = new wxCheckBox( m_LayersListPanel, ID_FRONTCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_FrontCheckBox->SetToolTip( _("If you want a front copper layer") );
m_LayerListFlexGridSizer->Add( m_FrontCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_FrontName = new wxTextCtrl( m_LayersListPanel, ID_FRONTNAME, _("Front_layer"), wxDefaultPosition, wxDefaultSize, 0 );
m_FrontName->SetToolTip( _("Layer name of front (top) copper layer") );
m_LayerListFlexGridSizer->Add( m_FrontName, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_FrontChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_FrontChoiceNChoices = sizeof( m_FrontChoiceChoices ) / sizeof( wxString );
m_FrontChoice = new wxChoice( m_LayersListPanel, ID_FRONTCHOICE, wxDefaultPosition, wxDefaultSize, m_FrontChoiceNChoices, m_FrontChoiceChoices, 0 );
m_FrontChoice->SetSelection( 0 );
m_FrontChoice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_FrontChoice, 0, wxRIGHT|wxEXPAND, 5 );
m_In1CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN1CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In1CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In1Name = new wxTextCtrl( m_LayersListPanel, ID_IN1NAME, _("In1"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In1Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In1ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In1ChoiceNChoices = sizeof( m_In1ChoiceChoices ) / sizeof( wxString );
m_In1Choice = new wxChoice( m_LayersListPanel, ID_IN1CHOICE, wxDefaultPosition, wxDefaultSize, m_In1ChoiceNChoices, m_In1ChoiceChoices, 0 );
m_In1Choice->SetSelection( 0 );
m_In1Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In1Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In2CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN2CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In2CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In2Name = new wxTextCtrl( m_LayersListPanel, ID_IN2NAME, _("In2"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In2Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In2ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In2ChoiceNChoices = sizeof( m_In2ChoiceChoices ) / sizeof( wxString );
m_In2Choice = new wxChoice( m_LayersListPanel, ID_IN2CHOICE, wxDefaultPosition, wxDefaultSize, m_In2ChoiceNChoices, m_In2ChoiceChoices, 0 );
m_In2Choice->SetSelection( 0 );
m_In2Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In2Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In3CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN3CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In3CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In3Name = new wxTextCtrl( m_LayersListPanel, ID_IN3NAME, _("In3"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In3Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In3ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In3ChoiceNChoices = sizeof( m_In3ChoiceChoices ) / sizeof( wxString );
m_In3Choice = new wxChoice( m_LayersListPanel, ID_IN3CHOICE, wxDefaultPosition, wxDefaultSize, m_In3ChoiceNChoices, m_In3ChoiceChoices, 0 );
m_In3Choice->SetSelection( 0 );
m_In3Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In3Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In4CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN4CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In4CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In4Name = new wxTextCtrl( m_LayersListPanel, ID_IN4NAME, _("In4"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In4Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In4ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In4ChoiceNChoices = sizeof( m_In4ChoiceChoices ) / sizeof( wxString );
m_In4Choice = new wxChoice( m_LayersListPanel, ID_IN4CHOICE, wxDefaultPosition, wxDefaultSize, m_In4ChoiceNChoices, m_In4ChoiceChoices, 0 );
m_In4Choice->SetSelection( 0 );
m_In4Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In4Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In5CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN5CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In5CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In5Name = new wxTextCtrl( m_LayersListPanel, ID_IN5NAME, _("In5"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In5Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In5ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In5ChoiceNChoices = sizeof( m_In5ChoiceChoices ) / sizeof( wxString );
m_In5Choice = new wxChoice( m_LayersListPanel, ID_IN5CHOICE, wxDefaultPosition, wxDefaultSize, m_In5ChoiceNChoices, m_In5ChoiceChoices, 0 );
m_In5Choice->SetSelection( 0 );
m_In5Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In5Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In6CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN6CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In6CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In6Name = new wxTextCtrl( m_LayersListPanel, ID_IN6NAME, _("In6"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In6Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In6ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In6ChoiceNChoices = sizeof( m_In6ChoiceChoices ) / sizeof( wxString );
m_In6Choice = new wxChoice( m_LayersListPanel, ID_IN6CHOICE, wxDefaultPosition, wxDefaultSize, m_In6ChoiceNChoices, m_In6ChoiceChoices, 0 );
m_In6Choice->SetSelection( 0 );
m_In6Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In6Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In7CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN7CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In7CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In7Name = new wxTextCtrl( m_LayersListPanel, ID_IN7NAME, _("In7"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In7Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In7ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In7ChoiceNChoices = sizeof( m_In7ChoiceChoices ) / sizeof( wxString );
m_In7Choice = new wxChoice( m_LayersListPanel, ID_IN7CHOICE, wxDefaultPosition, wxDefaultSize, m_In7ChoiceNChoices, m_In7ChoiceChoices, 0 );
m_In7Choice->SetSelection( 0 );
m_In7Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In7Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In8CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN8CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In8CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In8Name = new wxTextCtrl( m_LayersListPanel, ID_IN8NAME, _("In8"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In8Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In8ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In8ChoiceNChoices = sizeof( m_In8ChoiceChoices ) / sizeof( wxString );
m_In8Choice = new wxChoice( m_LayersListPanel, ID_IN8CHOICE, wxDefaultPosition, wxDefaultSize, m_In8ChoiceNChoices, m_In8ChoiceChoices, 0 );
m_In8Choice->SetSelection( 0 );
m_In8Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In8Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In9CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN9CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In9CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In9Name = new wxTextCtrl( m_LayersListPanel, ID_IN9NAME, _("In9"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In9Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In9ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In9ChoiceNChoices = sizeof( m_In9ChoiceChoices ) / sizeof( wxString );
m_In9Choice = new wxChoice( m_LayersListPanel, ID_IN9CHOICE, wxDefaultPosition, wxDefaultSize, m_In9ChoiceNChoices, m_In9ChoiceChoices, 0 );
m_In9Choice->SetSelection( 0 );
m_In9Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In9Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In10CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN10CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In10CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In10Name = new wxTextCtrl( m_LayersListPanel, ID_IN10NAME, _("In10"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In10Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In10ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In10ChoiceNChoices = sizeof( m_In10ChoiceChoices ) / sizeof( wxString );
m_In10Choice = new wxChoice( m_LayersListPanel, ID_IN10CHOICE, wxDefaultPosition, wxDefaultSize, m_In10ChoiceNChoices, m_In10ChoiceChoices, 0 );
m_In10Choice->SetSelection( 0 );
m_In10Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In10Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In11CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN11CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In11CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In11Name = new wxTextCtrl( m_LayersListPanel, ID_IN11NAME, _("In11"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In11Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In11ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In11ChoiceNChoices = sizeof( m_In11ChoiceChoices ) / sizeof( wxString );
m_In11Choice = new wxChoice( m_LayersListPanel, ID_IN11CHOICE, wxDefaultPosition, wxDefaultSize, m_In11ChoiceNChoices, m_In11ChoiceChoices, 0 );
m_In11Choice->SetSelection( 0 );
m_In11Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In11Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In12CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN12CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In12CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In12Name = new wxTextCtrl( m_LayersListPanel, ID_IN12NAME, _("In12"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In12Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In12ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In12ChoiceNChoices = sizeof( m_In12ChoiceChoices ) / sizeof( wxString );
m_In12Choice = new wxChoice( m_LayersListPanel, ID_IN12CHOICE, wxDefaultPosition, wxDefaultSize, m_In12ChoiceNChoices, m_In12ChoiceChoices, 0 );
m_In12Choice->SetSelection( 0 );
m_In12Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In12Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In13CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN13CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In13CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In13Name = new wxTextCtrl( m_LayersListPanel, ID_IN13NAME, _("In13"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In13Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In13ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In13ChoiceNChoices = sizeof( m_In13ChoiceChoices ) / sizeof( wxString );
m_In13Choice = new wxChoice( m_LayersListPanel, ID_IN13CHOICE, wxDefaultPosition, wxDefaultSize, m_In13ChoiceNChoices, m_In13ChoiceChoices, 0 );
m_In13Choice->SetSelection( 0 );
m_In13Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In13Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In14CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN14CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In14CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In14Name = new wxTextCtrl( m_LayersListPanel, ID_IN14NAME, _("In14"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In14Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In14ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In14ChoiceNChoices = sizeof( m_In14ChoiceChoices ) / sizeof( wxString );
m_In14Choice = new wxChoice( m_LayersListPanel, ID_IN14CHOICE, wxDefaultPosition, wxDefaultSize, m_In14ChoiceNChoices, m_In14ChoiceChoices, 0 );
m_In14Choice->SetSelection( 0 );
m_In14Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In14Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In15CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN15CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In15CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In15Name = new wxTextCtrl( m_LayersListPanel, ID_IN15NAME, _("In15"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In15Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In15ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In15ChoiceNChoices = sizeof( m_In15ChoiceChoices ) / sizeof( wxString );
m_In15Choice = new wxChoice( m_LayersListPanel, ID_IN15CHOICE, wxDefaultPosition, wxDefaultSize, m_In15ChoiceNChoices, m_In15ChoiceChoices, 0 );
m_In15Choice->SetSelection( 0 );
m_In15Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In15Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In16CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN16CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In16CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In16Name = new wxTextCtrl( m_LayersListPanel, ID_IN16NAME, _("In16"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In16Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In16ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In16ChoiceNChoices = sizeof( m_In16ChoiceChoices ) / sizeof( wxString );
m_In16Choice = new wxChoice( m_LayersListPanel, ID_IN16CHOICE, wxDefaultPosition, wxDefaultSize, m_In16ChoiceNChoices, m_In16ChoiceChoices, 0 );
m_In16Choice->SetSelection( 0 );
m_In16Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In16Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In17CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN17CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In17CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In17Name = new wxTextCtrl( m_LayersListPanel, ID_IN17NAME, _("In17"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In17Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In17ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In17ChoiceNChoices = sizeof( m_In17ChoiceChoices ) / sizeof( wxString );
m_In17Choice = new wxChoice( m_LayersListPanel, ID_IN17CHOICE, wxDefaultPosition, wxDefaultSize, m_In17ChoiceNChoices, m_In17ChoiceChoices, 0 );
m_In17Choice->SetSelection( 0 );
m_In17Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In17Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In18CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN18CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In18CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In18Name = new wxTextCtrl( m_LayersListPanel, ID_IN18NAME, _("In18"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In18Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In18ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In18ChoiceNChoices = sizeof( m_In18ChoiceChoices ) / sizeof( wxString );
m_In18Choice = new wxChoice( m_LayersListPanel, ID_IN18CHOICE, wxDefaultPosition, wxDefaultSize, m_In18ChoiceNChoices, m_In18ChoiceChoices, 0 );
m_In18Choice->SetSelection( 0 );
m_In18Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In18Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In19CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN19CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In19CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In19Name = new wxTextCtrl( m_LayersListPanel, ID_IN19NAME, _("In19"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In19Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In19ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In19ChoiceNChoices = sizeof( m_In19ChoiceChoices ) / sizeof( wxString );
m_In19Choice = new wxChoice( m_LayersListPanel, ID_IN19CHOICE, wxDefaultPosition, wxDefaultSize, m_In19ChoiceNChoices, m_In19ChoiceChoices, 0 );
m_In19Choice->SetSelection( 0 );
m_In19Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In19Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In20CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN20CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In20CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In20Name = new wxTextCtrl( m_LayersListPanel, ID_IN20NAME, _("In20"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In20Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In20ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In20ChoiceNChoices = sizeof( m_In20ChoiceChoices ) / sizeof( wxString );
m_In20Choice = new wxChoice( m_LayersListPanel, ID_IN20CHOICE, wxDefaultPosition, wxDefaultSize, m_In20ChoiceNChoices, m_In20ChoiceChoices, 0 );
m_In20Choice->SetSelection( 0 );
m_In20Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In20Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In21CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN21CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In21CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In21Name = new wxTextCtrl( m_LayersListPanel, ID_IN21NAME, _("In21"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In21Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In21ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In21ChoiceNChoices = sizeof( m_In21ChoiceChoices ) / sizeof( wxString );
m_In21Choice = new wxChoice( m_LayersListPanel, ID_IN21CHOICE, wxDefaultPosition, wxDefaultSize, m_In21ChoiceNChoices, m_In21ChoiceChoices, 0 );
m_In21Choice->SetSelection( 0 );
m_In21Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In21Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In22CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN22CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In22CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In22Name = new wxTextCtrl( m_LayersListPanel, ID_IN22NAME, _("In22"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In22Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In22ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In22ChoiceNChoices = sizeof( m_In22ChoiceChoices ) / sizeof( wxString );
m_In22Choice = new wxChoice( m_LayersListPanel, ID_IN22CHOICE, wxDefaultPosition, wxDefaultSize, m_In22ChoiceNChoices, m_In22ChoiceChoices, 0 );
m_In22Choice->SetSelection( 0 );
m_In22Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In22Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In23CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN23CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In23CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In23Name = new wxTextCtrl( m_LayersListPanel, ID_IN23NAME, _("In23"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In23Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In23ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In23ChoiceNChoices = sizeof( m_In23ChoiceChoices ) / sizeof( wxString );
m_In23Choice = new wxChoice( m_LayersListPanel, ID_IN22CHOICE, wxDefaultPosition, wxDefaultSize, m_In23ChoiceNChoices, m_In23ChoiceChoices, 0 );
m_In23Choice->SetSelection( 0 );
m_In23Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In23Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In24CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN24CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In24CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In24Name = new wxTextCtrl( m_LayersListPanel, ID_IN24NAME, _("In24"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In24Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In24ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In24ChoiceNChoices = sizeof( m_In24ChoiceChoices ) / sizeof( wxString );
m_In24Choice = new wxChoice( m_LayersListPanel, ID_IN24CHOICE, wxDefaultPosition, wxDefaultSize, m_In24ChoiceNChoices, m_In24ChoiceChoices, 0 );
m_In24Choice->SetSelection( 0 );
m_In24Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In24Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In25CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN25CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In25CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In25Name = new wxTextCtrl( m_LayersListPanel, ID_IN25NAME, _("In25"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In25Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In25ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In25ChoiceNChoices = sizeof( m_In25ChoiceChoices ) / sizeof( wxString );
m_In25Choice = new wxChoice( m_LayersListPanel, ID_IN25CHOICE, wxDefaultPosition, wxDefaultSize, m_In25ChoiceNChoices, m_In25ChoiceChoices, 0 );
m_In25Choice->SetSelection( 0 );
m_In25Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In25Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In26CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN26CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In26CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In26Name = new wxTextCtrl( m_LayersListPanel, ID_IN26NAME, _("In26"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In26Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In26ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In26ChoiceNChoices = sizeof( m_In26ChoiceChoices ) / sizeof( wxString );
m_In26Choice = new wxChoice( m_LayersListPanel, ID_IN26CHOICE, wxDefaultPosition, wxDefaultSize, m_In26ChoiceNChoices, m_In26ChoiceChoices, 0 );
m_In26Choice->SetSelection( 0 );
m_In26Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In26Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In27CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN27CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In27CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In27Name = new wxTextCtrl( m_LayersListPanel, ID_IN27NAME, _("In27"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In27Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In27ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In27ChoiceNChoices = sizeof( m_In27ChoiceChoices ) / sizeof( wxString );
m_In27Choice = new wxChoice( m_LayersListPanel, ID_IN27CHOICE, wxDefaultPosition, wxDefaultSize, m_In27ChoiceNChoices, m_In27ChoiceChoices, 0 );
m_In27Choice->SetSelection( 0 );
m_In27Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In27Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In28CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN28CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In28CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In28Name = new wxTextCtrl( m_LayersListPanel, ID_IN28NAME, _("In28"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In28Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_In28ChoiceChoices[] = { _("signal"), _("power plane"), _("mixed"), _("jumper") };
int m_In28ChoiceNChoices = sizeof( m_In28ChoiceChoices ) / sizeof( wxString );
m_In28Choice = new wxChoice( m_LayersListPanel, ID_IN28CHOICE, wxDefaultPosition, wxDefaultSize, m_In28ChoiceNChoices, m_In28ChoiceChoices, 0 );
m_In28Choice->SetSelection( 0 );
m_In28Choice->SetToolTip( _("Copper layer type for Freerouter and other external routers.\nPower plane layers are removed from Freerouter's layer menus.") );
m_LayerListFlexGridSizer->Add( m_In28Choice, 0, wxEXPAND|wxRIGHT, 5 );
m_In29CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN29CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In29CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In29Name = new wxTextCtrl( m_LayersListPanel, ID_IN29NAME, _("In29"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In29Name, 0, wxEXPAND|wxRIGHT, 5 );
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( 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, 5 );
m_In30CheckBox = new wxCheckBox( m_LayersListPanel, ID_IN30CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In30CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_In30Name = new wxTextCtrl( m_LayersListPanel, ID_IN30NAME, _("In30"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_In30Name, 0, wxEXPAND|wxRIGHT, 5 );
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( 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, 5 );
m_BackCheckBox = new wxCheckBox( m_LayersListPanel, ID_BACKCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_BackCheckBox->SetToolTip( _("If you want a back copper layer") );
m_LayerListFlexGridSizer->Add( m_BackCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_BackName = new wxTextCtrl( m_LayersListPanel, ID_BACKNAME, _("Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_BackName->SetToolTip( _("Layer name of back (bottom) copper layer") );
m_LayerListFlexGridSizer->Add( m_BackName, 0, wxEXPAND|wxRIGHT, 5 );
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( 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, 5 );
m_MaskBackCheckBox = new wxCheckBox( m_LayersListPanel, ID_MASKBACKCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_MaskBackCheckBox->SetToolTip( _("If you want a solder mask layer for the back side of the board") );
m_LayerListFlexGridSizer->Add( m_MaskBackCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_MaskBackName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("SoldM_Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_MaskBackName, 0, wxEXPAND|wxRIGHT, 5 );
m_MaskBackStaticText = new wxStaticText( m_LayersListPanel, ID_MASKBACKCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_MaskBackStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_MaskBackStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_SilkSBackCheckBox = new wxCheckBox( m_LayersListPanel, ID_SILKSBACKCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_SilkSBackCheckBox->SetToolTip( _("If you want a silk screen layer for the back side of the board") );
m_LayerListFlexGridSizer->Add( m_SilkSBackCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_SilkSBackName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("SilkS_Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_SilkSBackName, 0, wxEXPAND|wxRIGHT, 5 );
m_SilkSBackStaticText = new wxStaticText( m_LayersListPanel, ID_SILKSBACKCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_SilkSBackStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_SilkSBackStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_SoldPBackCheckBox = new wxCheckBox( m_LayersListPanel, ID_SOLDPBACKCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_SoldPBackCheckBox->SetToolTip( _("If you want a solder paste layer for the back side of the board") );
m_LayerListFlexGridSizer->Add( m_SoldPBackCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_SoldPBackName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("SoldP_Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_SoldPBackName, 0, wxEXPAND|wxRIGHT, 5 );
m_SoldPBackStaticText = new wxStaticText( m_LayersListPanel, ID_SOLDPBACKCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_SoldPBackStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_SoldPBackStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_AdhesBackCheckBox = new wxCheckBox( m_LayersListPanel, ID_ADHESBACKCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_AdhesBackCheckBox->SetToolTip( _("If you want an adhesive layer for the back side of the board") );
m_LayerListFlexGridSizer->Add( m_AdhesBackCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_AdhesBackName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Adhes_Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_AdhesBackName, 0, wxEXPAND|wxRIGHT, 5 );
m_AdhesBackStaticText = new wxStaticText( m_LayersListPanel, ID_ADHESBACKCHOICE, _("On-board, non-copper"), wxDefaultPosition, wxDefaultSize, 0 );
m_AdhesBackStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_AdhesBackStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_FabBackCheckBox = new wxCheckBox( m_LayersListPanel, ID_FABBACKCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_FabBackCheckBox->SetToolTip( _("If you want a fabrication layer for the back side of the board") );
m_LayerListFlexGridSizer->Add( m_FabBackCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_FabBackName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Fab_Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_FabBackName, 0, wxEXPAND|wxRIGHT, 5 );
m_FabBackStaticText = new wxStaticText( m_LayersListPanel, ID_FABBACKCHOICE, _("Off-board, manufacturing"), wxDefaultPosition, wxDefaultSize, 0 );
m_FabBackStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_FabBackStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_LayerListFlexGridSizer->Add( 0, 0, 1, wxEXPAND, 5 );
m_CrtYdBackName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("CrtYd_Back"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_CrtYdBackName, 0, wxEXPAND|wxRIGHT, 5 );
m_CrtYdBackStaticText = new wxStaticText( m_LayersListPanel, ID_CRTYDBACKCHOICE, _("Off-board, testing"), wxDefaultPosition, wxDefaultSize, 0 );
m_CrtYdBackStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_CrtYdBackStaticText, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
m_LayerListFlexGridSizer->Add( 0, 0, 1, wxEXPAND, 5 );
m_PCBEdgesName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Pcb_Edges"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_PCBEdgesName, 0, wxEXPAND|wxRIGHT, 5 );
m_PCBEdgesStaticText = new wxStaticText( m_LayersListPanel, ID_PCBEDGESCHOICE, _("Board contour"), wxDefaultPosition, wxDefaultSize, 0 );
m_PCBEdgesStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_PCBEdgesStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_MarginCheckBox = new wxCheckBox( m_LayersListPanel, ID_MARGINCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_MarginCheckBox, 0, wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );
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, _("Board contour setback"), wxDefaultPosition, wxDefaultSize, 0 );
m_MarginStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_MarginStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_Eco1CheckBox = new wxCheckBox( m_LayersListPanel, ID_ECO2CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_Eco1CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Eco1Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Eco1"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_Eco1Name, 0, wxEXPAND|wxRIGHT, 5 );
m_Eco1StaticText = new wxStaticText( m_LayersListPanel, ID_ECO2CHOICE, _("Auxiliary"), wxDefaultPosition, wxDefaultSize, 0 );
m_Eco1StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_Eco1StaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_Eco2CheckBox = new wxCheckBox( m_LayersListPanel, ID_ECO1CHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_Eco2CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_Eco2Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Eco2"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_Eco2Name, 0, wxEXPAND|wxRIGHT, 5 );
m_Eco2StaticText = new wxStaticText( m_LayersListPanel, ID_ECO1CHOICE, _("Auxiliary"), wxDefaultPosition, wxDefaultSize, 0 );
m_Eco2StaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_Eco2StaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_CommentsCheckBox = new wxCheckBox( m_LayersListPanel, ID_COMMENTSCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_CommentsCheckBox->SetToolTip( _("If you want a separate layer for comments or notes") );
m_LayerListFlexGridSizer->Add( m_CommentsCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_CommentsName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Comments"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_CommentsName, 0, wxEXPAND|wxRIGHT, 5 );
m_CommentsStaticText = new wxStaticText( m_LayersListPanel, ID_COMMENTSCHOICE, _("Auxiliary"), wxDefaultPosition, wxDefaultSize, 0 );
m_CommentsStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_CommentsStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_DrawingsCheckBox = new wxCheckBox( m_LayersListPanel, ID_DRAWINGSCHECKBOX, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_DrawingsCheckBox->SetToolTip( _("If you want a layer for documentation drawings") );
m_LayerListFlexGridSizer->Add( m_DrawingsCheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_DrawingsName = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("Drawings"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_DrawingsName, 0, wxEXPAND|wxRIGHT, 5 );
m_DrawingsStaticText = new wxStaticText( m_LayersListPanel, ID_DRAWINGSCHOICE, _("Auxiliary"), wxDefaultPosition, wxDefaultSize, 0 );
m_DrawingsStaticText->Wrap( -1 );
m_LayerListFlexGridSizer->Add( m_DrawingsStaticText, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_User1CheckBox = new wxCheckBox( m_LayersListPanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User1CheckBox, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
m_User1Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User1"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User1Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User1TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User1Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User2Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User2"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User2Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User2TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User2Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User3Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User3"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User3Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User3TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User3Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User4Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User4"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User4Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User4TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User4Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User5Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User5"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User5Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User5TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User5Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User6Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User6"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User6Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User6TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User6Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User7Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User7"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User7Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User7TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User7Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User8Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User8"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User8Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User8TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User8Type, 0, wxEXPAND|wxRIGHT, 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 );
m_User9Name = new wxTextCtrl( m_LayersListPanel, wxID_ANY, _("User9"), wxDefaultPosition, wxDefaultSize, 0 );
m_LayerListFlexGridSizer->Add( m_User9Name, 0, wxEXPAND|wxRIGHT, 5 );
wxString m_User9TypeChoices[] = { _("Auxiliary"), _("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( _("Auxiliary layers do not flip with board side, while back and front layers do.") );
m_LayerListFlexGridSizer->Add( m_User9Type, 0, wxEXPAND|wxRIGHT, 5 );
m_LayersListPanel->SetSizer( m_LayerListFlexGridSizer );
m_LayersListPanel->SetSizer( m_LayersSizer );
m_LayersListPanel->Layout();
m_LayerListFlexGridSizer->Fit( m_LayersListPanel );
m_LayersSizer->Fit( m_LayersListPanel );
bSizerMargins->Add( m_LayersListPanel, 1, wxEXPAND|wxTOP, 5 );
@ -842,127 +52,14 @@ PANEL_SETUP_LAYERS_BASE::PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID i
this->SetSizer( bMainSizer );
this->Layout();
bMainSizer->Fit( this );
// Connect Events
m_addUserDefinedLayerButton->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::addUserDefinedLayer ), NULL, this );
m_FabFrontCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_AdhesFrontCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SoldPFrontCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SilkSFrontCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_MaskFrontCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_FrontCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In1CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In2CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In3CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In4CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In5CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In6CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In7CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In8CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In9CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In10CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In11CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In12CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In13CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In14CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In15CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In16CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In17CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In18CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In19CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In20CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In21CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In22CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In23CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In24CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In25CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In26CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In27CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In28CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In29CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In30CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_BackCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_MaskBackCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SilkSBackCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SoldPBackCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_AdhesBackCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_FabBackCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_MarginCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_Eco1CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_Eco2CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_CommentsCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_DrawingsCheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User1CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User2CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User3CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User4CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User5CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User6CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User7CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User8CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User9CheckBox->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
}
PANEL_SETUP_LAYERS_BASE::~PANEL_SETUP_LAYERS_BASE()
{
// Disconnect Events
m_addUserDefinedLayerButton->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::addUserDefinedLayer ), NULL, this );
m_FabFrontCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_AdhesFrontCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SoldPFrontCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SilkSFrontCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_MaskFrontCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_FrontCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In1CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In2CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In3CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In4CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In5CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In6CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In7CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In8CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In9CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In10CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In11CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In12CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In13CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In14CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In15CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In16CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In17CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In18CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In19CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In20CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In21CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In22CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In23CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In24CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In25CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In26CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In27CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In28CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In29CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_In30CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_BackCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::DenyChangeCheckBox ), NULL, this );
m_MaskBackCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SilkSBackCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_SoldPBackCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_AdhesBackCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_FabBackCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_MarginCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_Eco1CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_Eco2CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_CommentsCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_DrawingsCheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User1CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User2CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User3CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User4CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User5CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User6CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User7CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User8CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
m_User9CheckBox->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( PANEL_SETUP_LAYERS_BASE::OnCheckBox ), NULL, this );
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6)
// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6a-dirty)
// http://www.wxformbuilder.org/
//
// PLEASE DO *NOT* EDIT THIS FILE!
@ -21,143 +21,11 @@
#include <wx/settings.h>
#include <wx/sizer.h>
#include <wx/statline.h>
#include <wx/textctrl.h>
#include <wx/stattext.h>
#include <wx/checkbox.h>
#include <wx/choice.h>
#include <wx/scrolwin.h>
#include <wx/panel.h>
///////////////////////////////////////////////////////////////////////////
#define ID_CRTYDFRONTCHOICE 6000
#define ID_FABFRONTCHECKBOX 6001
#define ID_FABFRONTCHOICE 6002
#define ID_ADHESFRONTCHECKBOX 6003
#define ID_ADHESFRONTCHOICE 6004
#define ID_SOLDPFRONTCHECKBOX 6005
#define ID_SOLDPFRONTCHOICE 6006
#define ID_SILKSFRONTCHECKBOX 6007
#define ID_SILKSFRONTCHOICE 6008
#define ID_MASKFRONTCHECKBOX 6009
#define ID_MASKFRONTCHOICE 6010
#define ID_FRONTCHECKBOX 6011
#define ID_FRONTNAME 6012
#define ID_FRONTCHOICE 6013
#define ID_IN1CHECKBOX 6014
#define ID_IN1NAME 6015
#define ID_IN1CHOICE 6016
#define ID_IN2CHECKBOX 6017
#define ID_IN2NAME 6018
#define ID_IN2CHOICE 6019
#define ID_IN3CHECKBOX 6020
#define ID_IN3NAME 6021
#define ID_IN3CHOICE 6022
#define ID_IN4CHECKBOX 6023
#define ID_IN4NAME 6024
#define ID_IN4CHOICE 6025
#define ID_IN5CHECKBOX 6026
#define ID_IN5NAME 6027
#define ID_IN5CHOICE 6028
#define ID_IN6CHECKBOX 6029
#define ID_IN6NAME 6030
#define ID_IN6CHOICE 6031
#define ID_IN7CHECKBOX 6032
#define ID_IN7NAME 6033
#define ID_IN7CHOICE 6034
#define ID_IN8CHECKBOX 6035
#define ID_IN8NAME 6036
#define ID_IN8CHOICE 6037
#define ID_IN9CHECKBOX 6038
#define ID_IN9NAME 6039
#define ID_IN9CHOICE 6040
#define ID_IN10CHECKBOX 6041
#define ID_IN10NAME 6042
#define ID_IN10CHOICE 6043
#define ID_IN11CHECKBOX 6044
#define ID_IN11NAME 6045
#define ID_IN11CHOICE 6046
#define ID_IN12CHECKBOX 6047
#define ID_IN12NAME 6048
#define ID_IN12CHOICE 6049
#define ID_IN13CHECKBOX 6050
#define ID_IN13NAME 6051
#define ID_IN13CHOICE 6052
#define ID_IN14CHECKBOX 6053
#define ID_IN14NAME 6054
#define ID_IN14CHOICE 6055
#define ID_IN15CHECKBOX 6056
#define ID_IN15NAME 6057
#define ID_IN15CHOICE 6058
#define ID_IN16CHECKBOX 6059
#define ID_IN16NAME 6060
#define ID_IN16CHOICE 6061
#define ID_IN17CHECKBOX 6062
#define ID_IN17NAME 6063
#define ID_IN17CHOICE 6064
#define ID_IN18CHECKBOX 6065
#define ID_IN18NAME 6066
#define ID_IN18CHOICE 6067
#define ID_IN19CHECKBOX 6068
#define ID_IN19NAME 6069
#define ID_IN19CHOICE 6070
#define ID_IN20CHECKBOX 6071
#define ID_IN20NAME 6072
#define ID_IN20CHOICE 6073
#define ID_IN21CHECKBOX 6074
#define ID_IN21NAME 6075
#define ID_IN21CHOICE 6076
#define ID_IN22CHECKBOX 6077
#define ID_IN22NAME 6078
#define ID_IN22CHOICE 6079
#define ID_IN23CHECKBOX 6080
#define ID_IN23NAME 6081
#define ID_IN24CHECKBOX 6082
#define ID_IN24NAME 6083
#define ID_IN24CHOICE 6084
#define ID_IN25CHECKBOX 6085
#define ID_IN25NAME 6086
#define ID_IN25CHOICE 6087
#define ID_IN26CHECKBOX 6088
#define ID_IN26NAME 6089
#define ID_IN26CHOICE 6090
#define ID_IN27CHECKBOX 6091
#define ID_IN27NAME 6092
#define ID_IN27CHOICE 6093
#define ID_IN28CHECKBOX 6094
#define ID_IN28NAME 6095
#define ID_IN28CHOICE 6096
#define ID_IN29CHECKBOX 6097
#define ID_IN29NAME 6098
#define ID_IN29CHOICE 6099
#define ID_IN30CHECKBOX 6100
#define ID_IN30NAME 6101
#define ID_IN30CHOICE 6102
#define ID_BACKCHECKBOX 6103
#define ID_BACKNAME 6104
#define ID_BACKCHOICE 6105
#define ID_MASKBACKCHECKBOX 6106
#define ID_MASKBACKCHOICE 6107
#define ID_SILKSBACKCHECKBOX 6108
#define ID_SILKSBACKCHOICE 6109
#define ID_SOLDPBACKCHECKBOX 6110
#define ID_SOLDPBACKCHOICE 6111
#define ID_ADHESBACKCHECKBOX 6112
#define ID_ADHESBACKCHOICE 6113
#define ID_FABBACKCHECKBOX 6114
#define ID_FABBACKCHOICE 6115
#define ID_CRTYDBACKCHOICE 6116
#define ID_PCBEDGESCHOICE 6117
#define ID_MARGINCHECKBOX 6118
#define ID_ECO2CHOICE 6119
#define ID_ECO2CHECKBOX 6120
#define ID_ECO1CHECKBOX 6121
#define ID_ECO1CHOICE 6122
#define ID_COMMENTSCHECKBOX 6123
#define ID_COMMENTSCHOICE 6124
#define ID_DRAWINGSCHECKBOX 6125
#define ID_DRAWINGSCHOICE 6126
///////////////////////////////////////////////////////////////////////////////
/// Class PANEL_SETUP_LAYERS_BASE
///////////////////////////////////////////////////////////////////////////////
@ -169,191 +37,15 @@ class PANEL_SETUP_LAYERS_BASE : public wxPanel
wxButton* m_addUserDefinedLayerButton;
wxStaticLine* m_staticline2;
wxScrolledWindow* m_LayersListPanel;
wxFlexGridSizer* m_LayerListFlexGridSizer;
wxTextCtrl* m_CrtYdFrontName;
wxStaticText* m_CrtYdFrontStaticText;
wxCheckBox* m_FabFrontCheckBox;
wxTextCtrl* m_FabFrontName;
wxStaticText* m_FabFrontStaticText;
wxCheckBox* m_AdhesFrontCheckBox;
wxTextCtrl* m_AdhesFrontName;
wxStaticText* m_AdhesFrontStaticText;
wxCheckBox* m_SoldPFrontCheckBox;
wxTextCtrl* m_SoldPFrontName;
wxStaticText* m_SoldPFrontStaticText;
wxCheckBox* m_SilkSFrontCheckBox;
wxTextCtrl* m_SilkSFrontName;
wxStaticText* m_SilkSFrontStaticText;
wxCheckBox* m_MaskFrontCheckBox;
wxTextCtrl* m_MaskFrontName;
wxStaticText* m_MaskFrontStaticText;
wxCheckBox* m_FrontCheckBox;
wxTextCtrl* m_FrontName;
wxChoice* m_FrontChoice;
wxCheckBox* m_In1CheckBox;
wxTextCtrl* m_In1Name;
wxChoice* m_In1Choice;
wxCheckBox* m_In2CheckBox;
wxTextCtrl* m_In2Name;
wxChoice* m_In2Choice;
wxCheckBox* m_In3CheckBox;
wxTextCtrl* m_In3Name;
wxChoice* m_In3Choice;
wxCheckBox* m_In4CheckBox;
wxTextCtrl* m_In4Name;
wxChoice* m_In4Choice;
wxCheckBox* m_In5CheckBox;
wxTextCtrl* m_In5Name;
wxChoice* m_In5Choice;
wxCheckBox* m_In6CheckBox;
wxTextCtrl* m_In6Name;
wxChoice* m_In6Choice;
wxCheckBox* m_In7CheckBox;
wxTextCtrl* m_In7Name;
wxChoice* m_In7Choice;
wxCheckBox* m_In8CheckBox;
wxTextCtrl* m_In8Name;
wxChoice* m_In8Choice;
wxCheckBox* m_In9CheckBox;
wxTextCtrl* m_In9Name;
wxChoice* m_In9Choice;
wxCheckBox* m_In10CheckBox;
wxTextCtrl* m_In10Name;
wxChoice* m_In10Choice;
wxCheckBox* m_In11CheckBox;
wxTextCtrl* m_In11Name;
wxChoice* m_In11Choice;
wxCheckBox* m_In12CheckBox;
wxTextCtrl* m_In12Name;
wxChoice* m_In12Choice;
wxCheckBox* m_In13CheckBox;
wxTextCtrl* m_In13Name;
wxChoice* m_In13Choice;
wxCheckBox* m_In14CheckBox;
wxTextCtrl* m_In14Name;
wxChoice* m_In14Choice;
wxCheckBox* m_In15CheckBox;
wxTextCtrl* m_In15Name;
wxChoice* m_In15Choice;
wxCheckBox* m_In16CheckBox;
wxTextCtrl* m_In16Name;
wxChoice* m_In16Choice;
wxCheckBox* m_In17CheckBox;
wxTextCtrl* m_In17Name;
wxChoice* m_In17Choice;
wxCheckBox* m_In18CheckBox;
wxTextCtrl* m_In18Name;
wxChoice* m_In18Choice;
wxCheckBox* m_In19CheckBox;
wxTextCtrl* m_In19Name;
wxChoice* m_In19Choice;
wxCheckBox* m_In20CheckBox;
wxTextCtrl* m_In20Name;
wxChoice* m_In20Choice;
wxCheckBox* m_In21CheckBox;
wxTextCtrl* m_In21Name;
wxChoice* m_In21Choice;
wxCheckBox* m_In22CheckBox;
wxTextCtrl* m_In22Name;
wxChoice* m_In22Choice;
wxCheckBox* m_In23CheckBox;
wxTextCtrl* m_In23Name;
wxChoice* m_In23Choice;
wxCheckBox* m_In24CheckBox;
wxTextCtrl* m_In24Name;
wxChoice* m_In24Choice;
wxCheckBox* m_In25CheckBox;
wxTextCtrl* m_In25Name;
wxChoice* m_In25Choice;
wxCheckBox* m_In26CheckBox;
wxTextCtrl* m_In26Name;
wxChoice* m_In26Choice;
wxCheckBox* m_In27CheckBox;
wxTextCtrl* m_In27Name;
wxChoice* m_In27Choice;
wxCheckBox* m_In28CheckBox;
wxTextCtrl* m_In28Name;
wxChoice* m_In28Choice;
wxCheckBox* m_In29CheckBox;
wxTextCtrl* m_In29Name;
wxChoice* m_In29Choice;
wxCheckBox* m_In30CheckBox;
wxTextCtrl* m_In30Name;
wxChoice* m_In30Choice;
wxCheckBox* m_BackCheckBox;
wxTextCtrl* m_BackName;
wxChoice* m_BackChoice;
wxCheckBox* m_MaskBackCheckBox;
wxTextCtrl* m_MaskBackName;
wxStaticText* m_MaskBackStaticText;
wxCheckBox* m_SilkSBackCheckBox;
wxTextCtrl* m_SilkSBackName;
wxStaticText* m_SilkSBackStaticText;
wxCheckBox* m_SoldPBackCheckBox;
wxTextCtrl* m_SoldPBackName;
wxStaticText* m_SoldPBackStaticText;
wxCheckBox* m_AdhesBackCheckBox;
wxTextCtrl* m_AdhesBackName;
wxStaticText* m_AdhesBackStaticText;
wxCheckBox* m_FabBackCheckBox;
wxTextCtrl* m_FabBackName;
wxStaticText* m_FabBackStaticText;
wxTextCtrl* m_CrtYdBackName;
wxStaticText* m_CrtYdBackStaticText;
wxTextCtrl* m_PCBEdgesName;
wxStaticText* m_PCBEdgesStaticText;
wxCheckBox* m_MarginCheckBox;
wxTextCtrl* m_MarginName;
wxStaticText* m_MarginStaticText;
wxCheckBox* m_Eco1CheckBox;
wxTextCtrl* m_Eco1Name;
wxStaticText* m_Eco1StaticText;
wxCheckBox* m_Eco2CheckBox;
wxTextCtrl* m_Eco2Name;
wxStaticText* m_Eco2StaticText;
wxCheckBox* m_CommentsCheckBox;
wxTextCtrl* m_CommentsName;
wxStaticText* m_CommentsStaticText;
wxCheckBox* m_DrawingsCheckBox;
wxTextCtrl* m_DrawingsName;
wxStaticText* m_DrawingsStaticText;
wxCheckBox* m_User1CheckBox;
wxTextCtrl* m_User1Name;
wxChoice* m_User1Type;
wxCheckBox* m_User2CheckBox;
wxTextCtrl* m_User2Name;
wxChoice* m_User2Type;
wxCheckBox* m_User3CheckBox;
wxTextCtrl* m_User3Name;
wxChoice* m_User3Type;
wxCheckBox* m_User4CheckBox;
wxTextCtrl* m_User4Name;
wxChoice* m_User4Type;
wxCheckBox* m_User5CheckBox;
wxTextCtrl* m_User5Name;
wxChoice* m_User5Type;
wxCheckBox* m_User6CheckBox;
wxTextCtrl* m_User6Name;
wxChoice* m_User6Type;
wxCheckBox* m_User7CheckBox;
wxTextCtrl* m_User7Name;
wxChoice* m_User7Type;
wxCheckBox* m_User8CheckBox;
wxTextCtrl* m_User8Name;
wxChoice* m_User8Type;
wxCheckBox* m_User9CheckBox;
wxTextCtrl* m_User9Name;
wxChoice* m_User9Type;
wxFlexGridSizer* m_LayersSizer;
// Virtual event handlers, override them in your derived class
virtual void addUserDefinedLayer( wxCommandEvent& event ) { event.Skip(); }
virtual void OnCheckBox( wxCommandEvent& event ) { event.Skip(); }
virtual void DenyChangeCheckBox( wxCommandEvent& event ) { event.Skip(); }
public:
PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
PANEL_SETUP_LAYERS_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 589,704 ), long style = wxTAB_TRAVERSAL, const wxString& name = wxEmptyString );
~PANEL_SETUP_LAYERS_BASE();

View File

@ -92,6 +92,43 @@ const int GAL_LAYER_ORDER[] =
User_7, ZONE_LAYER_FOR( User_7 ),
User_8, ZONE_LAYER_FOR( User_8 ),
User_9, ZONE_LAYER_FOR( User_9 ),
User_10, ZONE_LAYER_FOR( User_10 ),
User_11, ZONE_LAYER_FOR( User_11 ),
User_12, ZONE_LAYER_FOR( User_12 ),
User_13, ZONE_LAYER_FOR( User_13 ),
User_14, ZONE_LAYER_FOR( User_14 ),
User_15, ZONE_LAYER_FOR( User_15 ),
User_16, ZONE_LAYER_FOR( User_16 ),
User_17, ZONE_LAYER_FOR( User_17 ),
User_18, ZONE_LAYER_FOR( User_18 ),
User_19, ZONE_LAYER_FOR( User_19 ),
User_20, ZONE_LAYER_FOR( User_20 ),
User_21, ZONE_LAYER_FOR( User_21 ),
User_22, ZONE_LAYER_FOR( User_22 ),
User_23, ZONE_LAYER_FOR( User_23 ),
User_24, ZONE_LAYER_FOR( User_24 ),
User_25, ZONE_LAYER_FOR( User_25 ),
User_26, ZONE_LAYER_FOR( User_26 ),
User_27, ZONE_LAYER_FOR( User_27 ),
User_28, ZONE_LAYER_FOR( User_28 ),
User_29, ZONE_LAYER_FOR( User_29 ),
User_30, ZONE_LAYER_FOR( User_30 ),
User_31, ZONE_LAYER_FOR( User_31 ),
User_32, ZONE_LAYER_FOR( User_32 ),
User_33, ZONE_LAYER_FOR( User_33 ),
User_34, ZONE_LAYER_FOR( User_34 ),
User_35, ZONE_LAYER_FOR( User_35 ),
User_36, ZONE_LAYER_FOR( User_36 ),
User_37, ZONE_LAYER_FOR( User_37 ),
User_38, ZONE_LAYER_FOR( User_38 ),
User_39, ZONE_LAYER_FOR( User_39 ),
User_40, ZONE_LAYER_FOR( User_40 ),
User_41, ZONE_LAYER_FOR( User_41 ),
User_42, ZONE_LAYER_FOR( User_42 ),
User_43, ZONE_LAYER_FOR( User_43 ),
User_44, ZONE_LAYER_FOR( User_44 ),
User_45, ZONE_LAYER_FOR( User_45 ),
LAYER_FP_TEXT, LAYER_FP_REFERENCES, LAYER_FP_VALUES,
@ -233,6 +270,42 @@ const int GAL_LAYER_ORDER[] =
BITMAP_LAYER_FOR( User_7 ),
BITMAP_LAYER_FOR( User_8 ),
BITMAP_LAYER_FOR( User_9 ),
BITMAP_LAYER_FOR( User_10 ),
BITMAP_LAYER_FOR( User_11 ),
BITMAP_LAYER_FOR( User_12 ),
BITMAP_LAYER_FOR( User_13 ),
BITMAP_LAYER_FOR( User_14 ),
BITMAP_LAYER_FOR( User_15 ),
BITMAP_LAYER_FOR( User_16 ),
BITMAP_LAYER_FOR( User_17 ),
BITMAP_LAYER_FOR( User_18 ),
BITMAP_LAYER_FOR( User_19 ),
BITMAP_LAYER_FOR( User_20 ),
BITMAP_LAYER_FOR( User_21 ),
BITMAP_LAYER_FOR( User_22 ),
BITMAP_LAYER_FOR( User_23 ),
BITMAP_LAYER_FOR( User_24 ),
BITMAP_LAYER_FOR( User_25 ),
BITMAP_LAYER_FOR( User_26 ),
BITMAP_LAYER_FOR( User_27 ),
BITMAP_LAYER_FOR( User_28 ),
BITMAP_LAYER_FOR( User_29 ),
BITMAP_LAYER_FOR( User_30 ),
BITMAP_LAYER_FOR( User_31 ),
BITMAP_LAYER_FOR( User_32 ),
BITMAP_LAYER_FOR( User_33 ),
BITMAP_LAYER_FOR( User_34 ),
BITMAP_LAYER_FOR( User_35 ),
BITMAP_LAYER_FOR( User_36 ),
BITMAP_LAYER_FOR( User_37 ),
BITMAP_LAYER_FOR( User_38 ),
BITMAP_LAYER_FOR( User_39 ),
BITMAP_LAYER_FOR( User_40 ),
BITMAP_LAYER_FOR( User_41 ),
BITMAP_LAYER_FOR( User_42 ),
BITMAP_LAYER_FOR( User_43 ),
BITMAP_LAYER_FOR( User_44 ),
BITMAP_LAYER_FOR( User_45 ),
BITMAP_LAYER_FOR( F_Cu ),
BITMAP_LAYER_FOR( F_Mask ),

View File

@ -230,13 +230,13 @@ PCB_LAYER_ID ALTIUM_PCB::GetKicadLayer( ALTIUM_LAYER aAltiumLayer ) const
case ALTIUM_LAYER::MECHANICAL_7: return User_7;
case ALTIUM_LAYER::MECHANICAL_8: return User_8;
case ALTIUM_LAYER::MECHANICAL_9: return User_9;
case ALTIUM_LAYER::MECHANICAL_10: return Dwgs_User;
case ALTIUM_LAYER::MECHANICAL_11: return Eco2_User; //Eco1 is used for unknown elements
case ALTIUM_LAYER::MECHANICAL_10: return User_10;
case ALTIUM_LAYER::MECHANICAL_11: return User_11; //Eco1 is used for unknown elements
case ALTIUM_LAYER::MECHANICAL_12: return F_Fab;
case ALTIUM_LAYER::MECHANICAL_13: return B_Fab; // Don't use courtyard layers for other purposes
case ALTIUM_LAYER::MECHANICAL_14: return UNDEFINED_LAYER;
case ALTIUM_LAYER::MECHANICAL_15: return UNDEFINED_LAYER;
case ALTIUM_LAYER::MECHANICAL_16: return UNDEFINED_LAYER;
case ALTIUM_LAYER::MECHANICAL_14: return User_12;
case ALTIUM_LAYER::MECHANICAL_15: return User_13;
case ALTIUM_LAYER::MECHANICAL_16: return User_14;
case ALTIUM_LAYER::DRILL_DRAWING: return Dwgs_User;
case ALTIUM_LAYER::MULTI_LAYER: return UNDEFINED_LAYER;

View File

@ -667,7 +667,7 @@ void PCB_IO_KICAD_SEXPR::formatBoardLayers( const BOARD* aBoard ) const
m_out->Print( "(%d %s %s %s)",
layer,
m_out->Quotew( LSET::Name( layer ) ).c_str(),
layer >= User_1 && layer <= User_9
layer >= User_1 && IsCopperLayer( layer )
? LAYER::ShowType( aBoard->GetLayerType( layer ) )
: "user",
m_board->GetLayerName( layer ) == LSET::Name( layer )

View File

@ -171,7 +171,8 @@ class PCB_IO_KICAD_SEXPR; // forward decl
//#define SEXPR_BOARD_FILE_VERSION 20241010 // Graphic shapes can have soldermask layer and margin
//#define SEXPR_BOARD_FILE_VERSION 20241030 // Dimension arrow directions, suppress_zeroes normalization
//#define SEXPR_BOARD_FILE_VERSION 20241129 // Normalise keep_text_aligned and fill properties
#define SEXPR_BOARD_FILE_VERSION 20241228 // Convert teardrop curve points to bool
//#define SEXPR_BOARD_FILE_VERSION 20241228 // Convert teardrop curve points to bool
#define SEXPR_BOARD_FILE_VERSION 20241229 // Expand User layers to arbitrary count
#define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag

View File

@ -220,6 +220,42 @@ void ODB_MATRIX_ENTITY::AddMatrixLayerField( MATRIX_LAYER& aMLayer, PCB_LAYER_ID
case User_7:
case User_8:
case User_9:
case User_10:
case User_11:
case User_12:
case User_13:
case User_14:
case User_15:
case User_16:
case User_17:
case User_18:
case User_19:
case User_20:
case User_21:
case User_22:
case User_23:
case User_24:
case User_25:
case User_26:
case User_27:
case User_28:
case User_29:
case User_30:
case User_31:
case User_32:
case User_33:
case User_34:
case User_35:
case User_36:
case User_37:
case User_38:
case User_39:
case User_40:
case User_41:
case User_42:
case User_43:
case User_44:
case User_45:
aMLayer.m_context = ODB_CONTEXT::MISC;
aMLayer.m_type = ODB_TYPE::DOCUMENT;
break;

View File

@ -1681,6 +1681,42 @@ void APPEARANCE_CONTROLS::rebuildLayers()
{ User_7, _HKI( "User defined layer 7" ) },
{ User_8, _HKI( "User defined layer 8" ) },
{ User_9, _HKI( "User defined layer 9" ) },
{ User_10, _HKI( "User defined layer 10" ) },
{ User_11, _HKI( "User defined layer 11" ) },
{ User_12, _HKI( "User defined layer 12" ) },
{ User_13, _HKI( "User defined layer 13" ) },
{ User_14, _HKI( "User defined layer 14" ) },
{ User_15, _HKI( "User defined layer 15" ) },
{ User_16, _HKI( "User defined layer 16" ) },
{ User_17, _HKI( "User defined layer 17" ) },
{ User_18, _HKI( "User defined layer 18" ) },
{ User_19, _HKI( "User defined layer 19" ) },
{ User_20, _HKI( "User defined layer 20" ) },
{ User_21, _HKI( "User defined layer 21" ) },
{ User_22, _HKI( "User defined layer 22" ) },
{ User_23, _HKI( "User defined layer 23" ) },
{ User_24, _HKI( "User defined layer 24" ) },
{ User_25, _HKI( "User defined layer 25" ) },
{ User_26, _HKI( "User defined layer 26" ) },
{ User_27, _HKI( "User defined layer 27" ) },
{ User_28, _HKI( "User defined layer 28" ) },
{ User_29, _HKI( "User defined layer 29" ) },
{ User_30, _HKI( "User defined layer 30" ) },
{ User_31, _HKI( "User defined layer 31" ) },
{ User_32, _HKI( "User defined layer 32" ) },
{ User_33, _HKI( "User defined layer 33" ) },
{ User_34, _HKI( "User defined layer 34" ) },
{ User_35, _HKI( "User defined layer 35" ) },
{ User_36, _HKI( "User defined layer 36" ) },
{ User_37, _HKI( "User defined layer 37" ) },
{ User_38, _HKI( "User defined layer 38" ) },
{ User_39, _HKI( "User defined layer 39" ) },
{ User_40, _HKI( "User defined layer 40" ) },
{ User_41, _HKI( "User defined layer 41" ) },
{ User_42, _HKI( "User defined layer 42" ) },
{ User_43, _HKI( "User defined layer 43" ) },
{ User_44, _HKI( "User defined layer 44" ) },
{ User_45, _HKI( "User defined layer 45" ) },
};
// There is a spacer added to the end of the list that we need to remove and re-add

View File

@ -104,12 +104,15 @@ BOOST_AUTO_TEST_CASE(LSETFormatting)
LSET set({F_Cu, In1_Cu, In2_Cu});
std::string hexString = set.FmtHex();
std::string expectedHexString = "00000000_00000051"; // depends on bit ordering
std::string expectedHexString = "00000000_00000000_00000000_00000051"; // depends on bit ordering
BOOST_CHECK_EQUAL(hexString, expectedHexString);
std::string binString = set.FmtBin();
std::string expectedBinString = "0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0101_0001"; // depends on bit ordering
std::string expectedBinString = "0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|"
"0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0101_0001"; // depends on bit ordering
BOOST_CHECK_EQUAL(binString, expectedBinString);
}
// Test ExtractLayer and Flip
BOOST_AUTO_TEST_CASE(LSETManipulations)

View File

@ -39,9 +39,11 @@ struct LSETS_TO_TEST
const static std::vector<LSETS_TO_TEST> type_to_ext_cases = {
{ LSET( { F_Cu, F_Fab } ), "00000008_00000001",
{ LSET( { F_Cu, F_Fab } ), "00000000_00000000_00000008_00000001",
"0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|"
"0000_0000|0000_0000|0000_0000|0000_1000|0000_0000|0000_0000|0000_0000|0000_0001" },
{ LSET( { In14_Cu, B_Adhes, Rescue } ), "00000020_40000800",
{ LSET( { In14_Cu, B_Adhes, Rescue } ), "00000000_00000000_00000020_40000800",
"0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|0000_0000|"
"0000_0000|0000_0000|0000_0000|0010_0000|0100_0000|0000_0000|0000_1000|0000_0000" }
};