14DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWindowID 
id, 
const wxString& title, 
const wxPoint& pos, 
const wxSize& size, 
long style ) : 
DIALOG_SHIM( parent, id, title, pos, size, style )
 
   16    this->SetSizeHints( wxSize( -1,-1 ), wxDefaultSize );
 
   20    wxBoxSizer* bSizerUpper;
 
   21    bSizerUpper = 
new wxBoxSizer( wxHORIZONTAL );
 
   23    m_notebook = 
new wxNotebook( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
 
   25    wxBoxSizer* bGeneralSizer;
 
   26    bGeneralSizer = 
new wxBoxSizer( wxHORIZONTAL );
 
   30    wxGridBagSizer* gbSizerCommon;
 
   31    gbSizerCommon = 
new wxGridBagSizer( 4, 0 );
 
   32    gbSizerCommon->SetFlexibleDirection( wxBOTH );
 
   33    gbSizerCommon->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
   37    gbSizerCommon->Add( 
m_padTypeLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
 
   39    wxString m_padTypeChoices[] = { 
_(
"Through-hole"), 
_(
"SMD"), 
_(
"Edge Connector"), 
_(
"NPTH, Mechanical"), 
_(
"SMD Aperture") };
 
   40    int m_padTypeNChoices = 
sizeof( m_padTypeChoices ) / 
sizeof( wxString );
 
   41    m_padType = 
new wxChoice( 
m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_padTypeNChoices, m_padTypeChoices, 0 );
 
   43    gbSizerCommon->Add( 
m_padType, wxGBPosition( 0, 1 ), wxGBSpan( 1, 5 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
 
   47    gbSizerCommon->Add( 
m_padNumLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
   50    gbSizerCommon->Add( 
m_padNumCtrl, wxGBPosition( 1, 1 ), wxGBSpan( 1, 5 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
   54    gbSizerCommon->Add( 
m_padNetLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
   57    gbSizerCommon->Add( 
m_padNetSelector, wxGBPosition( 2, 1 ), wxGBSpan( 1, 5 ), wxALIGN_CENTER_VERTICAL|wxEXPAND|wxRIGHT, 5 );
 
   61    gbSizerCommon->Add( 
m_posXLabel, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
   64    gbSizerCommon->Add( 
m_posXCtrl, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
 
   68    gbSizerCommon->Add( 
m_posXUnits, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
   72    gbSizerCommon->Add( 
m_posYLabel, wxGBPosition( 3, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
   75    gbSizerCommon->Add( 
m_posYCtrl, wxGBPosition( 3, 4 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
 
   79    gbSizerCommon->Add( 
m_posYUnits, wxGBPosition( 3, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
   82    gbSizerCommon->AddGrowableCol( 1 );
 
   83    gbSizerCommon->AddGrowableCol( 4 );
 
   96    wxString m_cbPadstackModeChoices[] = { 
_(
"Normal"), 
_(
"Front/Inner/Bottom"), 
_(
"Custom") };
 
   97    int m_cbPadstackModeNChoices = 
sizeof( m_cbPadstackModeChoices ) / 
sizeof( wxString );
 
   98    m_cbPadstackMode = 
new wxChoice( 
m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cbPadstackModeNChoices, m_cbPadstackModeChoices, 0 );
 
  109    wxString m_cbEditLayerChoices[] = { 
_(
"Inner Layers") };
 
  110    int m_cbEditLayerNChoices = 
sizeof( m_cbEditLayerChoices ) / 
sizeof( wxString );
 
  111    m_cbEditLayer = 
new wxChoice( 
m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cbEditLayerNChoices, m_cbEditLayerChoices, 0 );
 
  118    wxGridBagSizer* gbSizerPadOrientation;
 
  119    gbSizerPadOrientation = 
new wxGridBagSizer( 4, 5 );
 
  120    gbSizerPadOrientation->SetFlexibleDirection( wxBOTH );
 
  121    gbSizerPadOrientation->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  125    gbSizerPadOrientation->Add( 
m_shapeLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
  127    wxString m_PadShapeSelectorChoices[] = { 
_(
"Circular"), 
_(
"Oval"), 
_(
"Rectangular"), 
_(
"Trapezoidal"), 
_(
"Rounded rectangle"), 
_(
"Chamfered rectangle"), 
_(
"Chamfered with other corners rounded"), 
_(
"Custom (circular base)"), 
_(
"Custom (rectangular base)") };
 
  128    int m_PadShapeSelectorNChoices = 
sizeof( m_PadShapeSelectorChoices ) / 
sizeof( wxString );
 
  131    gbSizerPadOrientation->Add( 
m_PadShapeSelector, wxGBPosition( 0, 1 ), wxGBSpan( 1, 5 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
  157    wxString m_trapAxisCtrlChoices[] = { 
_(
"Horizontal"), 
_(
"Vertical") };
 
  158    int m_trapAxisCtrlNChoices = 
sizeof( m_trapAxisCtrlChoices ) / 
sizeof( wxString );
 
  159    m_trapAxisCtrl = 
new wxChoice( 
m_trapProps, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_trapAxisCtrlNChoices, m_trapAxisCtrlChoices, 0 );
 
  176    m_cornerRatioLabel->SetToolTip( 
_(
"Corner radius in percent  of the pad width.\nThe width is the smaller value between size X and size Y.\nThe max value is 50 percent.") );
 
  189    m_cornerRadiusLabel->SetToolTip( 
_(
"Corner radius.\nCan be no more than half pad width.\nThe width is the smaller value between size X and size Y.\nNote: IPC norm gives a max value = 0.25mm.") );
 
  206    wxFlexGridSizer* fgSizerChamferProps;
 
  207    fgSizerChamferProps = 
new wxFlexGridSizer( 0, 2, 4, 0 );
 
  208    fgSizerChamferProps->AddGrowableCol( 1 );
 
  209    fgSizerChamferProps->SetFlexibleDirection( wxBOTH );
 
  210    fgSizerChamferProps->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  214    m_chamferRatioLabel->SetToolTip( 
_(
"Chamfer size in percent of the pad width.\nThe width is the smaller value between size X and size Y.\nThe max value is 50 percent.") );
 
  218    wxBoxSizer* bSizer29;
 
  219    bSizer29 = 
new wxBoxSizer( wxHORIZONTAL );
 
  229    fgSizerChamferProps->Add( bSizer29, 1, wxEXPAND, 5 );
 
  237    wxGridSizer* gCornersSizer;
 
  238    gCornersSizer = 
new wxGridSizer( 0, 2, 3, 6 );
 
  254    fgSizerChamferProps->Add( gCornersSizer, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
 
  262    wxFlexGridSizer* fgMixedProps;
 
  263    fgMixedProps = 
new wxFlexGridSizer( 0, 2, 4, 0 );
 
  264    fgMixedProps->AddGrowableCol( 1 );
 
  265    fgMixedProps->SetFlexibleDirection( wxBOTH );
 
  266    fgMixedProps->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  270    m_mixedChamferRatioLabel->SetToolTip( 
_(
"Chamfer size in percent of the pad width.\nThe width is the smaller value between size X and size Y.\nThe max value is 50 percent.") );
 
  274    wxBoxSizer* bSizer30;
 
  275    bSizer30 = 
new wxBoxSizer( wxHORIZONTAL );
 
  285    fgMixedProps->Add( bSizer30, 1, wxEXPAND, 5 );
 
  293    wxGridSizer* gMixedCornersSizer;
 
  294    gMixedCornersSizer = 
new wxGridSizer( 0, 2, 2, 6 );
 
  310    fgMixedProps->Add( gMixedCornersSizer, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
 
  314    m_mixedCornerRatioLabel->SetToolTip( 
_(
"Corner radius in percent  of the pad width.\nThe width is the smaller value between size X and size Y.\nThe max value is 50 percent.") );
 
  318    wxBoxSizer* bSizer31;
 
  319    bSizer31 = 
new wxBoxSizer( wxHORIZONTAL );
 
  329    fgMixedProps->Add( bSizer31, 1, wxEXPAND, 5 );
 
  337    gbSizerPadOrientation->Add( 
m_shapePropsBook, wxGBPosition( 1, 0 ), wxGBSpan( 1, 6 ), wxEXPAND|wxLEFT, 25 );
 
  341    gbSizerPadOrientation->Add( 
m_sizeXLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
  344    gbSizerPadOrientation->Add( 
m_sizeXCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
 
  348    gbSizerPadOrientation->Add( 
m_sizeXUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
  352    gbSizerPadOrientation->Add( 
m_sizeYLabel, wxGBPosition( 2, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
  355    gbSizerPadOrientation->Add( 
m_sizeYCtrl, wxGBPosition( 2, 4 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
 
  359    gbSizerPadOrientation->Add( 
m_sizeYUnits, wxGBPosition( 2, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
  363    gbSizerPadOrientation->Add( 
m_PadOrientText, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
  371    gbSizerPadOrientation->Add( 
m_cb_padrotation, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
 
  375    gbSizerPadOrientation->Add( 
m_orientationUnits, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
  378    gbSizerPadOrientation->AddGrowableCol( 1 );
 
  379    gbSizerPadOrientation->AddGrowableCol( 4 );
 
  383    wxBoxSizer* bSizer35;
 
  384    bSizer35 = 
new wxBoxSizer( wxHORIZONTAL );
 
  403    m_offsetCtrls->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  435    m_gbSizerHole->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  441    wxString m_holeShapeCtrlChoices[] = { 
_(
"Round"), 
_(
"Oblong") };
 
  442    int m_holeShapeCtrlNChoices = 
sizeof( m_holeShapeCtrlChoices ) / 
sizeof( wxString );
 
  443    m_holeShapeCtrl = 
new wxChoice( 
m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_holeShapeCtrlNChoices, m_holeShapeCtrlChoices, 0 );
 
  478    wxFlexGridSizer* fgSizerPadToDie;
 
  479    fgSizerPadToDie = 
new wxFlexGridSizer( 14, 3, 0, 0 );
 
  480    fgSizerPadToDie->AddGrowableCol( 1 );
 
  481    fgSizerPadToDie->SetFlexibleDirection( wxBOTH );
 
  482    fgSizerPadToDie->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  484    wxBoxSizer* bSizer34;
 
  485    bSizer34 = 
new wxBoxSizer( wxHORIZONTAL );
 
  488    bSizer34->Add( 
m_padToDieOpt, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
  492    bSizer34->Add( 
m_padToDieLabel, 0, wxALIGN_CENTER_VERTICAL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
 
  495    fgSizerPadToDie->Add( bSizer34, 0, wxEXPAND|wxRIGHT, 5 );
 
  498    fgSizerPadToDie->Add( 
m_padToDieCtrl, 0, wxEXPAND|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
 
  502    fgSizerPadToDie->Add( 
m_padToDieUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN|wxRIGHT, 5 );
 
  504    wxBoxSizer* bSizer341;
 
  505    bSizer341 = 
new wxBoxSizer( wxHORIZONTAL );
 
  512    bSizer341->Add( 
m_padToDieDelayLabel, 0, wxALIGN_CENTER_VERTICAL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
 
  515    fgSizerPadToDie->Add( bSizer341, 1, wxEXPAND, 5 );
 
  518    fgSizerPadToDie->Add( 
m_padToDieDelayCtrl, 0, wxEXPAND|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN|wxTOP, 5 );
 
  532    wxStaticBoxSizer* m_LayersSizer;
 
  533    m_LayersSizer = 
new wxStaticBoxSizer( 
new wxStaticBox( 
m_panelGeneral, wxID_ANY, wxEmptyString ), wxVERTICAL );
 
  537    m_FlippedWarningIcon = 
new wxStaticBitmap( m_LayersSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
 
  542    m_staticText86 = 
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Parent footprint on board is flipped.\nLayers will be reversed."), wxDefaultPosition, wxDefaultSize, 0 );
 
  549    m_copperLayersLabel = 
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Copper layers:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  553    wxArrayString m_rbCopperLayersSelChoices;
 
  554    m_rbCopperLayersSel = 
new wxChoice( m_LayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_rbCopperLayersSelChoices, 0 );
 
  558    wxBoxSizer* bSizer444;
 
  559    bSizer444 = 
new wxBoxSizer( wxHORIZONTAL );
 
  561    m_techLayersLabel = 
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Technical Layers"), wxDefaultPosition, wxDefaultSize, 0 );
 
  563    bSizer444->Add( 
m_techLayersLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
 
  565    m_staticline52 = 
new wxStaticLine( m_LayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  566    bSizer444->Add( 
m_staticline52, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 3 );
 
  569    m_LayersSizer->Add( bSizer444, 1, wxEXPAND|wxTOP, 5 );
 
  571    m_layerFrontAdhesive = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Front adhesive"), wxDefaultPosition, wxDefaultSize, 0 );
 
  574    m_layerBackAdhesive = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Back adhesive"), wxDefaultPosition, wxDefaultSize, 0 );
 
  577    m_layerFrontPaste = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Front solder paste"), wxDefaultPosition, wxDefaultSize, 0 );
 
  580    m_layerBackPaste = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Back solder paste"), wxDefaultPosition, wxDefaultSize, 0 );
 
  583    m_layerFrontSilk = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Front silk screen"), wxDefaultPosition, wxDefaultSize, 0 );
 
  586    m_layerBackSilk = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Back silk screen"), wxDefaultPosition, wxDefaultSize, 0 );
 
  589    m_layerFrontMask = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Front solder mask"), wxDefaultPosition, wxDefaultSize, 0 );
 
  592    m_layerBackMask = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Back solder mask"), wxDefaultPosition, wxDefaultSize, 0 );
 
  595    m_layerUserDwgs = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"Drafting notes"), wxDefaultPosition, wxDefaultSize, 0 );
 
  598    m_layerECO1 = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"E.C.O.1"), wxDefaultPosition, wxDefaultSize, 0 );
 
  599    m_LayersSizer->Add( 
m_layerECO1, 0, wxTOP|wxRIGHT|wxLEFT, 4 );
 
  601    m_layerECO2 = 
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY, 
_(
"E.C.O.2"), wxDefaultPosition, wxDefaultSize, 0 );
 
  609    m_staticTextFabProperty->SetToolTip( 
_(
"Optional property to specify a special purpose or constraint in fabrication files:\nBGA attribute is for pads in BGA footprints\nFiducial local is a fiducial for the parent footprint\nFiducial global is a fiducial for the whole board\nTest Point specifies an electrical test point\nHeatsink specifies a thermal pad\nCastellated specifies a through hole pad on a board edge\nMechanical specifies a through-hole pad that is used for mechanical support") );
 
  616    wxString m_choiceFabPropertyChoices[] = { 
_(
"None"), 
_(
"BGA pad"), 
_(
"Fiducial, local to footprint"), 
_(
"Fiducial, global to board"), 
_(
"Test point pad"), 
_(
"Heatsink pad"), 
_(
"Mechanical"), 
_(
"Castellated pad (through hole only)"), 
_(
"Press-fit (round through hole only)") };
 
  617    int m_choiceFabPropertyNChoices = 
sizeof( m_choiceFabPropertyChoices ) / 
sizeof( wxString );
 
  631    wxBoxSizer* bSizerPanelConnections;
 
  632    bSizerPanelConnections = 
new wxBoxSizer( wxVERTICAL );
 
  634    wxBoxSizer* bSizerConnectionsMargins;
 
  635    bSizerConnectionsMargins = 
new wxBoxSizer( wxVERTICAL );
 
  637    wxStaticBoxSizer* bSizerTeardrops;
 
  638    bSizerTeardrops = 
new wxStaticBoxSizer( 
new wxStaticBox( 
m_connectionsPanel, wxID_ANY, 
_(
"Teardrops") ), wxVERTICAL );
 
  642    m_legacyTeardropsIcon = 
new wxStaticBitmap( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
  645    wxBoxSizer* bSizer42;
 
  646    bSizer42 = 
new wxBoxSizer( wxVERTICAL );
 
  648    m_staticText85 = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Board contains legacy teardrops."), wxDefaultPosition, wxDefaultSize, 0 );
 
  652    m_staticText851 = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Use Edit > Edit Teardrops to apply automatic teardrops."), wxDefaultPosition, wxDefaultSize, 0 );
 
  662    wxBoxSizer* bSizerCols11;
 
  663    bSizerCols11 = 
new wxBoxSizer( wxHORIZONTAL );
 
  665    wxBoxSizer* bSizerLeftCol11;
 
  666    bSizerLeftCol11 = 
new wxBoxSizer( wxVERTICAL );
 
  668    m_cbTeardrops = 
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Add teardrops on pad's track connections"), wxDefaultPosition, wxDefaultSize, 0 );
 
  669    bSizerLeftCol11->Add( 
m_cbTeardrops, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
 
  671    m_cbPreferZoneConnection = 
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Prefer zone connection"), wxDefaultPosition, wxDefaultSize, 0 );
 
  673    m_cbPreferZoneConnection->SetToolTip( 
_(
"Do not create teardrops on tracks connected to pads that are also connected to a copper zone.") );
 
  677    m_cbTeardropsUseNextTrack = 
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Allow teardrops to span 2 track segments"), wxDefaultPosition, wxDefaultSize, 0 );
 
  679    m_cbTeardropsUseNextTrack->SetToolTip( 
_(
"Allows a teardrop to spread over 2 tracks if the first track segment is too short") );
 
  684    bSizerCols11->Add( bSizerLeftCol11, 1, wxEXPAND|wxTOP, 3 );
 
  687    bSizerCols11->Add( 15, 0, 0, wxEXPAND, 5 );
 
  689    wxBoxSizer* bSizerRightCol11;
 
  690    bSizerRightCol11 = 
new wxBoxSizer( wxVERTICAL );
 
  692    wxBoxSizer* bSizer39;
 
  693    bSizer39 = 
new wxBoxSizer( wxHORIZONTAL );
 
  695    m_stHDRatio = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  697    m_stHDRatio->SetToolTip( 
_(
"Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
 
  699    bSizer39->Add( 
m_stHDRatio, 0, wxALIGN_CENTER_VERTICAL, 5 );
 
  701    m_spTeardropHDPercent = 
new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
 
  703    m_spTeardropHDPercent->SetToolTip( 
_(
"Tracks which are similar in size to the pad do not need teardrops.") );
 
  707    m_minTrackWidthUnits = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"%("), wxDefaultPosition, wxDefaultSize, 0 );
 
  711    m_minTrackWidthHint = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"d"), wxDefaultPosition, wxDefaultSize, 0 );
 
  713    m_minTrackWidthHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, 
false, wxEmptyString ) );
 
  717    m_staticText87 = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
" )"), wxDefaultPosition, wxDefaultSize, 0 );
 
  722    bSizerRightCol11->Add( bSizer39, 0, 0, 3 );
 
  725    bSizerCols11->Add( bSizerRightCol11, 1, wxEXPAND|wxLEFT, 10 );
 
  728    bSizerTeardrops->Add( bSizerCols11, 0, wxEXPAND, 5 );
 
  731    bSizerTeardrops->Add( 0, 5, 0, wxEXPAND, 5 );
 
  733    m_teardropShapeLabel = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Teardrop Shape"), wxDefaultPosition, wxDefaultSize, 0 );
 
  737    m_staticline51 = 
new wxStaticLine( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 
  740    wxBoxSizer* bSizerShapeColumns;
 
  741    bSizerShapeColumns = 
new wxBoxSizer( wxHORIZONTAL );
 
  743    wxBoxSizer* bSizerLeftCol;
 
  744    bSizerLeftCol = 
new wxBoxSizer( wxVERTICAL );
 
  746    m_bitmapTeardrop = 
new wxStaticBitmap( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
  747    bSizerLeftCol->Add( 
m_bitmapTeardrop, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 );
 
  750    bSizerShapeColumns->Add( bSizerLeftCol, 1, wxEXPAND|wxRIGHT, 10 );
 
  753    bSizerShapeColumns->Add( 10, 0, 0, wxEXPAND, 5 );
 
  755    wxBoxSizer* bSizer43;
 
  756    bSizer43 = 
new wxBoxSizer( wxVERTICAL );
 
  758    wxFlexGridSizer* fgSizerRightCol;
 
  759    fgSizerRightCol = 
new wxFlexGridSizer( 0, 3, 2, 0 );
 
  760    fgSizerRightCol->AddGrowableCol( 1 );
 
  761    fgSizerRightCol->SetFlexibleDirection( wxBOTH );
 
  762    fgSizerRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  764    m_stHsetting = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Best length (L):"), wxDefaultPosition, wxDefaultSize, 0 );
 
  766    fgSizerRightCol->Add( 
m_stHsetting, 0, wxALIGN_CENTER_VERTICAL, 5 );
 
  768    m_spTeardropLenPercent = 
new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 200, 40.000000, 10 );
 
  772    wxBoxSizer* bSizer131;
 
  773    bSizer131 = 
new wxBoxSizer( wxHORIZONTAL );
 
  775    m_stLenPercentUnits = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"%("), wxDefaultPosition, wxDefaultSize, 0 );
 
  779    m_stLenPercentHint = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"d"), wxDefaultPosition, wxDefaultSize, 0 );
 
  781    m_stLenPercentHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, 
false, wxEmptyString ) );
 
  785    m_staticText88 = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
" )"), wxDefaultPosition, wxDefaultSize, 0 );
 
  790    fgSizerRightCol->Add( bSizer131, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
 
  792    m_stMaxLen = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Maximum length (L):"), wxDefaultPosition, wxDefaultSize, 0 );
 
  794    fgSizerRightCol->Add( 
m_stMaxLen, 0, wxALIGN_CENTER_VERTICAL, 5 );
 
  796    m_tcTdMaxLen = 
new wxTextCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  797    fgSizerRightCol->Add( 
m_tcTdMaxLen, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
 
  799    m_stMaxLenUnits = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
  801    fgSizerRightCol->Add( 
m_stMaxLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
 
  804    fgSizerRightCol->Add( 0, 5, 1, wxEXPAND, 5 );
 
  807    fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
 
  810    fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
 
  812    m_stVsetting = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Best width (W):"), wxDefaultPosition, wxDefaultSize, 0 );
 
  814    fgSizerRightCol->Add( 
m_stVsetting, 0, wxALIGN_CENTER_VERTICAL, 10 );
 
  816    m_spTeardropSizePercent = 
new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
 
  820    wxBoxSizer* bSizer13;
 
  821    bSizer13 = 
new wxBoxSizer( wxHORIZONTAL );
 
  823    m_stWidthPercentUnits = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"%("), wxDefaultPosition, wxDefaultSize, 0 );
 
  827    m_stWidthPercentHint = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"d"), wxDefaultPosition, wxDefaultSize, 0 );
 
  829    m_stWidthPercentHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL, 
false, wxEmptyString ) );
 
  833    m_staticText89 = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
" )"), wxDefaultPosition, wxDefaultSize, 0 );
 
  838    fgSizerRightCol->Add( bSizer13, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
 
  840    m_stTdMaxSize = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Maximum width (W):"), wxDefaultPosition, wxDefaultSize, 0 );
 
  842    fgSizerRightCol->Add( 
m_stTdMaxSize, 0, wxALIGN_CENTER_VERTICAL, 10 );
 
  844    m_tcMaxHeight = 
new wxTextCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  845    fgSizerRightCol->Add( 
m_tcMaxHeight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
 
  847    m_stMaxHeightUnits = 
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
  852    bSizer43->Add( fgSizerRightCol, 1, wxEXPAND|wxTOP|wxLEFT, 10 );
 
  854    wxBoxSizer* bSizer44;
 
  855    bSizer44 = 
new wxBoxSizer( wxHORIZONTAL );
 
  857    m_curvedEdges = 
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY, 
_(
"Curved edges"), wxDefaultPosition, wxDefaultSize, 0 );
 
  858    bSizer44->Add( 
m_curvedEdges, 0, wxALIGN_CENTER_VERTICAL, 5 );
 
  861    bSizer43->Add( bSizer44, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 );
 
  864    bSizerShapeColumns->Add( bSizer43, 1, wxEXPAND, 5 );
 
  867    bSizerTeardrops->Add( bSizerShapeColumns, 1, wxBOTTOM|wxEXPAND|wxRIGHT, 5 );
 
  870    bSizerConnectionsMargins->Add( bSizerTeardrops, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
 
  872    wxBoxSizer* bSizerConnectionsLower;
 
  873    bSizerConnectionsLower = 
new wxBoxSizer( wxHORIZONTAL );
 
  877    wxFlexGridSizer* fgSizerCopperZonesOpts;
 
  878    fgSizerCopperZonesOpts = 
new wxFlexGridSizer( 0, 2, 5, 0 );
 
  879    fgSizerCopperZonesOpts->AddGrowableCol( 1 );
 
  880    fgSizerCopperZonesOpts->SetFlexibleDirection( wxBOTH );
 
  881    fgSizerCopperZonesOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  887    wxString m_ZoneConnectionChoiceChoices[] = { 
_(
"From parent footprint"), 
_(
"Solid"), 
_(
"Thermal relief"), 
_(
"None") };
 
  888    int m_ZoneConnectionChoiceNChoices = 
sizeof( m_ZoneConnectionChoiceChoices ) / 
sizeof( wxString );
 
  897    wxString m_ZoneCustomPadShapeChoices[] = { 
_(
"Pad shape"), 
_(
"Pad convex hull") };
 
  898    int m_ZoneCustomPadShapeNChoices = 
sizeof( m_ZoneCustomPadShapeChoices ) / 
sizeof( wxString );
 
  901    fgSizerCopperZonesOpts->Add( 
m_ZoneCustomPadShape, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT, 5 );
 
  909    wxStaticBoxSizer* sbSizerThermalReliefs;
 
  910    sbSizerThermalReliefs = 
new wxStaticBoxSizer( 
new wxStaticBox( 
m_connectionsPanel, wxID_ANY, 
_(
"Thermal Relief Overrides") ), wxVERTICAL );
 
  912    wxFlexGridSizer* fgSizerThermalReliefs;
 
  913    fgSizerThermalReliefs = 
new wxFlexGridSizer( 0, 3, 3, 0 );
 
  914    fgSizerThermalReliefs->AddGrowableCol( 1 );
 
  915    fgSizerThermalReliefs->SetFlexibleDirection( wxBOTH );
 
  916    fgSizerThermalReliefs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  918    m_thermalGapLabel = 
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, 
_(
"Relief gap:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  920    fgSizerThermalReliefs->Add( 
m_thermalGapLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
  922    m_thermalGapCtrl = 
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  923    fgSizerThermalReliefs->Add( 
m_thermalGapCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 3 );
 
  925    m_thermalGapUnits = 
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
  927    fgSizerThermalReliefs->Add( 
m_thermalGapUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
  929    m_spokeWidthLabel = 
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, 
_(
"Spoke width:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  931    fgSizerThermalReliefs->Add( 
m_spokeWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
 
  933    m_spokeWidthCtrl = 
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  934    fgSizerThermalReliefs->Add( 
m_spokeWidthCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxLEFT, 3 );
 
  936    m_spokeWidthUnits = 
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
  938    fgSizerThermalReliefs->Add( 
m_spokeWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
  940    m_spokeAngleLabel = 
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, 
_(
"Spoke angle:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  942    fgSizerThermalReliefs->Add( 
m_spokeAngleLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
  944    m_spokeAngleCtrl = 
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
  947    m_spokeAngleUnits = 
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, 
_(
"deg"), wxDefaultPosition, wxDefaultSize, 0 );
 
  949    fgSizerThermalReliefs->Add( 
m_spokeAngleUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
  952    sbSizerThermalReliefs->Add( fgSizerThermalReliefs, 1, wxBOTTOM|wxEXPAND, 5 );
 
  955    bSizerConnectionsLower->Add( sbSizerThermalReliefs, 1, wxEXPAND|wxALL, 5 );
 
  958    bSizerConnectionsMargins->Add( bSizerConnectionsLower, 0, wxEXPAND|wxTOP, 10 );
 
  961    bSizerPanelConnections->Add( bSizerConnectionsMargins, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
 
  969    wxBoxSizer* bSizerPanelClearance;
 
  970    bSizerPanelClearance = 
new wxBoxSizer( wxVERTICAL );
 
  972    wxBoxSizer* bSizerClearance;
 
  973    bSizerClearance = 
new wxBoxSizer( wxVERTICAL );
 
  975    wxStaticBoxSizer* sbClearancesSizer;
 
  976    sbClearancesSizer = 
new wxStaticBoxSizer( 
new wxStaticBox( 
m_localSettingsPanel, wxID_ANY, 
_(
"Clearance Overrides") ), wxVERTICAL );
 
  978    wxStaticText* m_staticTextHint;
 
  979    m_staticTextHint = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Leave values blank to use parent footprint or netclass values."), wxDefaultPosition, wxDefaultSize, 0 );
 
  980    m_staticTextHint->Wrap( -1 );
 
  981    sbClearancesSizer->Add( m_staticTextHint, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
 
  983    m_staticTextInfoPosValue = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Positive clearance means area bigger than the pad (usual for mask clearance)."), wxDefaultPosition, wxDefaultSize, 0 );
 
  987    m_staticTextInfoNegVal = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Negative clearance means area smaller than the pad (usual for paste clearance)."), wxDefaultPosition, wxDefaultSize, 0 );
 
  991    wxFlexGridSizer* fgClearancesGridSizer;
 
  992    fgClearancesGridSizer = 
new wxFlexGridSizer( 4, 3, 4, 0 );
 
  993    fgClearancesGridSizer->AddGrowableCol( 1 );
 
  994    fgClearancesGridSizer->SetFlexibleDirection( wxBOTH );
 
  995    fgClearancesGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
 
  997    m_clearanceLabel = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Pad clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
 
  999    m_clearanceLabel->SetToolTip( 
_(
"This is the local net clearance for this pad.\nIf 0, the footprint local value or the Netclass value is used.") );
 
 1001    fgClearancesGridSizer->Add( 
m_clearanceLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
 1003    m_clearanceCtrl = 
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
 1004    fgClearancesGridSizer->Add( 
m_clearanceCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
 
 1006    m_clearanceUnits = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1008    fgClearancesGridSizer->Add( 
m_clearanceUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
 1010    m_maskMarginLabel = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Solder mask expansion:"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1012    m_maskMarginLabel->SetToolTip( 
_(
"This is the local clearance between this pad and the solder mask.\nIf 0, the footprint local value or the global value is used.") );
 
 1014    fgClearancesGridSizer->Add( 
m_maskMarginLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
 1016    m_maskMarginCtrl = 
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
 1017    fgClearancesGridSizer->Add( 
m_maskMarginCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 15 );
 
 1019    m_maskMarginUnits = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1021    fgClearancesGridSizer->Add( 
m_maskMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
 1023    m_pasteMarginLabel = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Solder paste absolute clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1025    m_pasteMarginLabel->SetToolTip( 
_(
"This is the local clearance between this pad and the solder paste.\nIf 0, the footprint value or the global value is used.\nThe final clearance value is the sum of this value and the clearance value ratio.\nA negative value means a smaller mask size than pad size.") );
 
 1027    fgClearancesGridSizer->Add( 
m_pasteMarginLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
 
 1029    m_pasteMarginCtrl = 
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
 1030    fgClearancesGridSizer->Add( 
m_pasteMarginCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
 
 1032    m_pasteMarginUnits = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1034    fgClearancesGridSizer->Add( 
m_pasteMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
 
 1036    m_pasteMarginRatioLabel = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"Solder paste relative clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1038    m_pasteMarginRatioLabel->SetToolTip( 
_(
"This is the local clearance ratio in percent between this pad and the solder paste.\nA value of 10 means the clearance value is 10 percent of the pad size.\nIf 0, the footprint value or the global value is used.\nThe final clearance value is the sum of this value and the clearance value.\nA negative value means a smaller mask size than pad size.") );
 
 1042    m_pasteMarginRatioCtrl = 
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
 1045    m_pasteMarginRatioUnits = 
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY, 
_(
"%"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1050    sbClearancesSizer->Add( fgClearancesGridSizer, 0, wxTOP|wxBOTTOM, 10 );
 
 1052    m_nonCopperWarningBook = 
new wxSimplebook( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
 
 1054    notePanel = 
new wxPanel( 
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
 
 1055    wxBoxSizer* bNoteSizer;
 
 1056    bNoteSizer = 
new wxBoxSizer( wxVERTICAL );
 
 1058    m_nonCopperNote = 
new wxStaticText( notePanel, wxID_ANY, 
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
 
 1062    m_staticTextInfoPaste = 
new wxStaticText( notePanel, wxID_ANY, 
_(
"Note: solder paste clearances (absolute and relative) are added to determine the final clearance."), wxDefaultPosition, wxDefaultSize, 0 );
 
 1067    notePanel->SetSizer( bNoteSizer );
 
 1068    notePanel->Layout();
 
 1069    bNoteSizer->Fit( notePanel );
 
 1071    wxPanel* warningPanel;
 
 1072    warningPanel = 
new wxPanel( 
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
 
 1073    wxBoxSizer* bWarningSizer;
 
 1074    bWarningSizer = 
new wxBoxSizer( wxHORIZONTAL );
 
 1076    bWarningSizer->SetMinSize( wxSize( -1,50 ) );
 
 1077    m_nonCopperWarningIcon = 
new wxStaticBitmap( warningPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
 
 1082    m_nonCopperWarningText = 
new wxStaticText( warningPanel, wxID_ANY, 
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
 
 1087    warningPanel->SetSizer( bWarningSizer );
 
 1088    warningPanel->Layout();
 
 1089    bWarningSizer->Fit( warningPanel );
 
 1095    bSizerClearance->Add( sbClearancesSizer, 0, wxALL|wxEXPAND, 5 );
 
 1098    bSizerPanelClearance->Add( bSizerClearance, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
 
 1106    bSizerUpper->Add( 
m_notebook, 0, wxEXPAND|wxTOP|wxBOTTOM, 12 );
 
 1108    wxBoxSizer* bSizerDisplayPad;
 
 1109    bSizerDisplayPad = 
new wxBoxSizer( wxVERTICAL );
 
 1111    bSizerDisplayPad->SetMinSize( wxSize( 290,-1 ) );
 
 1113    bSizerDisplayPad->Add( 0, 25, 0, wxEXPAND, 5 );
 
 1115    m_stackupImagesBook = 
new wxSimplebook( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE );
 
 1117    wxBoxSizer* page0Sizer;
 
 1118    page0Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1120    m_stackupImage0 = 
new wxStaticBitmap( 
page0, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1121    page0Sizer->Add( 
m_stackupImage0, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1124    page0->SetSizer( page0Sizer );
 
 1126    page0Sizer->Fit( 
page0 );
 
 1129    wxBoxSizer* page1Sizer;
 
 1130    page1Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1132    m_stackupImage1 = 
new wxStaticBitmap( 
page1, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1133    page1Sizer->Add( 
m_stackupImage1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1136    page1->SetSizer( page1Sizer );
 
 1138    page1Sizer->Fit( 
page1 );
 
 1141    wxBoxSizer* page2Sizer;
 
 1142    page2Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1144    m_stackupImage2 = 
new wxStaticBitmap( 
page2, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1145    page2Sizer->Add( 
m_stackupImage2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1148    page2->SetSizer( page2Sizer );
 
 1150    page2Sizer->Fit( 
page2 );
 
 1153    wxBoxSizer* page3Sizer;
 
 1154    page3Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1157    page3->SetSizer( page3Sizer );
 
 1159    page3Sizer->Fit( 
page3 );
 
 1162    wxBoxSizer* page4Sizer;
 
 1163    page4Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1165    m_stackupImage4 = 
new wxStaticBitmap( 
page4, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1166    page4Sizer->Add( 
m_stackupImage4, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1169    page4->SetSizer( page4Sizer );
 
 1171    page4Sizer->Fit( 
page4 );
 
 1174    wxBoxSizer* page5Sizer;
 
 1175    page5Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1177    m_stackupImage5 = 
new wxStaticBitmap( 
page5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1178    page5Sizer->Add( 
m_stackupImage5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1181    page5->SetSizer( page5Sizer );
 
 1183    page5Sizer->Fit( 
page5 );
 
 1186    wxBoxSizer* page6Sizer;
 
 1187    page6Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1189    m_stackupImage6 = 
new wxStaticBitmap( 
page6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1190    page6Sizer->Add( 
m_stackupImage6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1193    page6->SetSizer( page6Sizer );
 
 1195    page6Sizer->Fit( 
page6 );
 
 1198    wxBoxSizer* page7Sizer;
 
 1199    page7Sizer = 
new wxBoxSizer( wxVERTICAL );
 
 1201    m_stackupImage7 = 
new wxStaticBitmap( 
page7, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
 
 1202    page7Sizer->Add( 
m_stackupImage7, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
 
 1205    page7->SetSizer( page7Sizer );
 
 1207    page7Sizer->Fit( 
page7 );
 
 1213    bSizerDisplayPad->Add( 0, 4, 0, wxEXPAND, 5 );
 
 1215    m_boardViewPanel = 
new wxPanel( 
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
 
 1226    bSizerUpper->Add( bSizerDisplayPad, 1, wxEXPAND|wxTOP, 5 );
 
 1229    m_MainSizer->Add( bSizerUpper, 1, wxEXPAND|wxLEFT, 8 );
 
 1231    wxBoxSizer* bottomSizer;
 
 1232    bottomSizer = 
new wxBoxSizer( wxHORIZONTAL );
 
 1234    m_parentInfo = 
new wxStaticText( 
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
 
 1236    bottomSizer->Add( 
m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
 
 1239    bottomSizer->Add( 20, 0, 1, wxEXPAND, 5 );
 
 1241    m_cbShowPadOutline = 
new wxCheckBox( 
this, wxID_ANY, 
_(
"Preview pad in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
 
 1242    bottomSizer->Add( 
m_cbShowPadOutline, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
 
 1245    bottomSizer->Add( 40, 0, 0, wxEXPAND, 5 );
 
 1254    bottomSizer->Add( 
m_sdbSizer, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
 
 1257    m_MainSizer->Add( bottomSizer, 0, wxEXPAND|wxLEFT, 5 );
 
 1264    this->Centre( wxBOTH );