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 clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
1025 m_pasteMarginLabel->SetToolTip(
_(
"Solder paste clearance relative to pad size.\nEnter an absolute value (e.g., -0.1mm), a percentage (e.g., -5%), or both (e.g., -0.1mm - 5%).\nThis value can be superseded by local values for a footprint or a pad.") );
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 m_pasteMarginCtrl->SetToolTip(
_(
"Local solder paste clearance for this pad.\nEnter an absolute value (e.g., -0.1mm), a percentage (e.g., -5%), or both (e.g., -0.1mm - 5%).\nIf blank, the footprint or global value is used.") );
1032 fgClearancesGridSizer->Add(
m_pasteMarginCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
1034 m_pasteMarginUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1036 fgClearancesGridSizer->Add(
m_pasteMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
1038 m_pasteMarginRatioLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Solder paste relative clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
1040 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.") );
1044 m_pasteMarginRatioCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1047 m_pasteMarginRatioUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"%"), wxDefaultPosition, wxDefaultSize, 0 );
1052 sbClearancesSizer->Add( fgClearancesGridSizer, 0, wxTOP|wxBOTTOM, 10 );
1054 m_nonCopperWarningBook =
new wxSimplebook( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
1056 notePanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1057 wxBoxSizer* bNoteSizer;
1058 bNoteSizer =
new wxBoxSizer( wxVERTICAL );
1060 m_nonCopperNote =
new wxStaticText( notePanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
1064 m_staticTextInfoPaste =
new wxStaticText( notePanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1069 notePanel->SetSizer( bNoteSizer );
1070 notePanel->Layout();
1071 bNoteSizer->Fit( notePanel );
1073 wxPanel* warningPanel;
1074 warningPanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1075 wxBoxSizer* bWarningSizer;
1076 bWarningSizer =
new wxBoxSizer( wxHORIZONTAL );
1078 bWarningSizer->SetMinSize( wxSize( -1,50 ) );
1079 m_nonCopperWarningIcon =
new wxStaticBitmap( warningPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
1084 m_nonCopperWarningText =
new wxStaticText( warningPanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
1089 warningPanel->SetSizer( bWarningSizer );
1090 warningPanel->Layout();
1091 bWarningSizer->Fit( warningPanel );
1097 bSizerClearance->Add( sbClearancesSizer, 0, wxALL|wxEXPAND, 5 );
1100 bSizerPanelClearance->Add( bSizerClearance, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
1108 wxBoxSizer* bSizer45;
1109 bSizer45 =
new wxBoxSizer( wxVERTICAL );
1111 wxBoxSizer* bSizer46;
1112 bSizer46 =
new wxBoxSizer( wxVERTICAL );
1114 wxStaticBoxSizer* sbSizer6;
1115 sbSizer6 =
new wxStaticBoxSizer(
new wxStaticBox(
m_backDrillPanel, wxID_ANY,
_(
"Hole post machining") ), wxVERTICAL );
1117 wxBoxSizer* bSizer47;
1118 bSizer47 =
new wxBoxSizer( wxHORIZONTAL );
1120 wxFlexGridSizer* fgSizer11;
1121 fgSizer11 =
new wxFlexGridSizer( 0, 3, 0, 0 );
1122 fgSizer11->AddGrowableCol( 1 );
1123 fgSizer11->SetFlexibleDirection( wxBOTH );
1124 fgSizer11->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1126 m_topPostMachiningLabel =
new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY,
_(
"Top:"), wxDefaultPosition, wxDefaultSize, 0 );
1130 wxString m_topPostMachiningChoices[] = {
_(
"None"),
_(
"Countersink"),
_(
"Counterbore") };
1131 int m_topPostMachiningNChoices =
sizeof( m_topPostMachiningChoices ) /
sizeof( wxString );
1132 m_topPostMachining =
new wxChoice( sbSizer6->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_topPostMachiningNChoices, m_topPostMachiningChoices, 0 );
1137 fgSizer11->Add( 0, 0, 1, wxEXPAND, 5 );
1139 m_topPostMachineSize1Label =
new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1143 m_topPostmachineSize1 =
new wxTextCtrl( sbSizer6->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1146 m_topPostMachineSize1Units =
new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1150 m_topPostMachineSize2Label =
new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY,
_(
"Angle:"), wxDefaultPosition, wxDefaultSize, 0 );
1154 m_topPostMachineSize2 =
new wxTextCtrl( sbSizer6->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1157 m_topPostMachineSize2Units =
new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY,
_(
"deg"), wxDefaultPosition, wxDefaultSize, 0 );
1162 bSizer47->Add( fgSizer11, 1, wxEXPAND, 5 );
1165 bSizer47->Add( 0, 0, 0, wxEXPAND|wxLEFT|wxRIGHT, 25 );
1167 wxFlexGridSizer* fgSizer12;
1168 fgSizer12 =
new wxFlexGridSizer( 0, 3, 0, 0 );
1169 fgSizer12->AddGrowableCol( 1 );
1170 fgSizer12->SetFlexibleDirection( wxBOTH );
1171 fgSizer12->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1173 m_bottomPostMachiningLabel =
new wxStaticText( sbSizer6->GetStaticBox(), wxID_ANY,
_(
"Bottom:"), wxDefaultPosition, wxDefaultSize, 0 );
1177 wxString m_bottomPostMachiningChoices[] = {
_(
"None"),
_(
"Countersink"),
_(
"Counterbore") };
1178 int m_bottomPostMachiningNChoices =
sizeof( m_bottomPostMachiningChoices ) /
sizeof( wxString );
1179 m_bottomPostMachining =
new wxChoice( sbSizer6->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bottomPostMachiningNChoices, m_bottomPostMachiningChoices, 0 );
1184 fgSizer12->Add( 0, 0, 1, wxALL|wxEXPAND, 5 );
1190 m_bottomPostMachineSize1 =
new wxTextCtrl( sbSizer6->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1201 m_bottomPostMachineSize2 =
new wxTextCtrl( sbSizer6->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1209 bSizer47->Add( fgSizer12, 1, wxEXPAND, 5 );
1212 sbSizer6->Add( bSizer47, 1, wxEXPAND, 5 );
1215 bSizer46->Add( sbSizer6, 0, wxEXPAND, 5 );
1217 wxStaticBoxSizer* sbSizer7;
1218 sbSizer7 =
new wxStaticBoxSizer(
new wxStaticBox(
m_backDrillPanel, wxID_ANY,
_(
"Backdrill") ), wxVERTICAL );
1220 wxBoxSizer* bSizer48;
1221 bSizer48 =
new wxBoxSizer( wxHORIZONTAL );
1223 wxFlexGridSizer* fgSizer13;
1224 fgSizer13 =
new wxFlexGridSizer( 0, 2, 0, 0 );
1225 fgSizer13->SetFlexibleDirection( wxBOTH );
1226 fgSizer13->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1228 wxString m_backDrillChoiceChoices[] = {
_(
"None"),
_(
"Bottom"),
_(
"Top"),
_(
"Both") };
1229 int m_backDrillChoiceNChoices =
sizeof( m_backDrillChoiceChoices ) /
sizeof( wxString );
1230 m_backDrillChoice =
new wxChoice( sbSizer7->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_backDrillChoiceNChoices, m_backDrillChoiceChoices, 0 );
1232 fgSizer13->Add(
m_backDrillChoice, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 5 );
1235 bSizer48->Add( fgSizer13, 1, wxEXPAND, 5 );
1237 wxFlexGridSizer* fgSizer14;
1238 fgSizer14 =
new wxFlexGridSizer( 0, 3, 0, 0 );
1239 fgSizer14->SetFlexibleDirection( wxBOTH );
1240 fgSizer14->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1242 m_backDrillTopLayerLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Top backdrill must-cut:"), wxDefaultPosition, wxDefaultSize, 0 );
1248 m_backDrillTopLayer =
new wxBitmapComboBox( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"dummy"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
1254 fgSizer14->Add( 0, 0, 1, wxEXPAND, 5 );
1256 m_backDrillTopSizeLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1260 m_backDrillTopSize =
new wxTextCtrl( sbSizer7->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1263 m_backDrillTopSizeUnits =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1268 bSizer48->Add( fgSizer14, 2, wxEXPAND, 5 );
1270 wxFlexGridSizer* fgSizer15;
1271 fgSizer15 =
new wxFlexGridSizer( 0, 3, 0, 0 );
1272 fgSizer15->SetFlexibleDirection( wxBOTH );
1273 fgSizer15->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1275 m_backDrillBottomLayerLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Bottom backdrill must-cut:"), wxDefaultPosition, wxDefaultSize, 0 );
1281 m_backDrillBottomLayer =
new wxBitmapComboBox( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"dummy"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
1287 fgSizer15->Add( 0, 0, 1, wxEXPAND, 5 );
1289 m_backDrillBottomSizeLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1293 m_backDrillBottomSize =
new wxTextCtrl( sbSizer7->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1296 m_backDrillBottomSizeUnits =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1301 bSizer48->Add( fgSizer15, 2, wxEXPAND, 5 );
1304 sbSizer7->Add( bSizer48, 1, wxEXPAND, 5 );
1307 bSizer46->Add( sbSizer7, 0, wxEXPAND, 5 );
1310 bSizer45->Add( bSizer46, 1, wxALL|wxEXPAND, 5 );
1318 bSizerUpper->Add(
m_notebook, 0, wxEXPAND|wxTOP|wxBOTTOM, 12 );
1320 wxBoxSizer* bSizerDisplayPad;
1321 bSizerDisplayPad =
new wxBoxSizer( wxVERTICAL );
1323 bSizerDisplayPad->SetMinSize( wxSize( 290,-1 ) );
1325 bSizerDisplayPad->Add( 0, 25, 0, wxEXPAND, 5 );
1327 m_stackupImagesBook =
new wxSimplebook(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE );
1329 wxBoxSizer* page0Sizer;
1330 page0Sizer =
new wxBoxSizer( wxVERTICAL );
1332 m_stackupImage0 =
new wxStaticBitmap(
page0, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1333 page0Sizer->Add(
m_stackupImage0, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1336 page0->SetSizer( page0Sizer );
1338 page0Sizer->Fit(
page0 );
1341 wxBoxSizer* page1Sizer;
1342 page1Sizer =
new wxBoxSizer( wxVERTICAL );
1344 m_stackupImage1 =
new wxStaticBitmap(
page1, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1345 page1Sizer->Add(
m_stackupImage1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1348 page1->SetSizer( page1Sizer );
1350 page1Sizer->Fit(
page1 );
1353 wxBoxSizer* page2Sizer;
1354 page2Sizer =
new wxBoxSizer( wxVERTICAL );
1356 m_stackupImage2 =
new wxStaticBitmap(
page2, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1357 page2Sizer->Add(
m_stackupImage2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1360 page2->SetSizer( page2Sizer );
1362 page2Sizer->Fit(
page2 );
1365 wxBoxSizer* page3Sizer;
1366 page3Sizer =
new wxBoxSizer( wxVERTICAL );
1369 page3->SetSizer( page3Sizer );
1371 page3Sizer->Fit(
page3 );
1374 wxBoxSizer* page4Sizer;
1375 page4Sizer =
new wxBoxSizer( wxVERTICAL );
1377 m_stackupImage4 =
new wxStaticBitmap(
page4, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1378 page4Sizer->Add(
m_stackupImage4, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1381 page4->SetSizer( page4Sizer );
1383 page4Sizer->Fit(
page4 );
1386 wxBoxSizer* page5Sizer;
1387 page5Sizer =
new wxBoxSizer( wxVERTICAL );
1389 m_stackupImage5 =
new wxStaticBitmap(
page5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1390 page5Sizer->Add(
m_stackupImage5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1393 page5->SetSizer( page5Sizer );
1395 page5Sizer->Fit(
page5 );
1398 wxBoxSizer* page6Sizer;
1399 page6Sizer =
new wxBoxSizer( wxVERTICAL );
1401 m_stackupImage6 =
new wxStaticBitmap(
page6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1402 page6Sizer->Add(
m_stackupImage6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1405 page6->SetSizer( page6Sizer );
1407 page6Sizer->Fit(
page6 );
1410 wxBoxSizer* page7Sizer;
1411 page7Sizer =
new wxBoxSizer( wxVERTICAL );
1413 m_stackupImage7 =
new wxStaticBitmap(
page7, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1414 page7Sizer->Add(
m_stackupImage7, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1417 page7->SetSizer( page7Sizer );
1419 page7Sizer->Fit(
page7 );
1425 bSizerDisplayPad->Add( 0, 4, 0, wxEXPAND, 5 );
1427 m_boardViewPanel =
new wxPanel(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1438 bSizerUpper->Add( bSizerDisplayPad, 1, wxEXPAND|wxTOP, 5 );
1441 m_MainSizer->Add( bSizerUpper, 1, wxEXPAND|wxLEFT, 8 );
1443 wxBoxSizer* bottomSizer;
1444 bottomSizer =
new wxBoxSizer( wxHORIZONTAL );
1446 m_parentInfo =
new wxStaticText(
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1448 bottomSizer->Add(
m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
1451 bottomSizer->Add( 20, 0, 1, wxEXPAND, 5 );
1453 m_cbShowPadOutline =
new wxCheckBox(
this, wxID_ANY,
_(
"Preview pad in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
1454 bottomSizer->Add(
m_cbShowPadOutline, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
1457 bottomSizer->Add( 40, 0, 0, wxEXPAND, 5 );
1466 bottomSizer->Add(
m_sdbSizer, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
1469 m_MainSizer->Add( bottomSizer, 0, wxEXPAND|wxLEFT, 5 );
1476 this->Centre( wxBOTH );