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 (TH only)"),
_(
"Press-fit (round TH 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 );
1039 sbClearancesSizer->Add( fgClearancesGridSizer, 0, wxTOP|wxBOTTOM, 10 );
1041 m_nonCopperWarningBook =
new wxSimplebook( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
1043 notePanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1044 wxBoxSizer* bNoteSizer;
1045 bNoteSizer =
new wxBoxSizer( wxVERTICAL );
1047 m_nonCopperNote =
new wxStaticText( notePanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
1051 m_staticTextInfoPaste =
new wxStaticText( notePanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1056 notePanel->SetSizer( bNoteSizer );
1057 notePanel->Layout();
1058 bNoteSizer->Fit( notePanel );
1060 wxPanel* warningPanel;
1061 warningPanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1062 wxBoxSizer* bWarningSizer;
1063 bWarningSizer =
new wxBoxSizer( wxHORIZONTAL );
1065 bWarningSizer->SetMinSize( wxSize( -1,50 ) );
1066 m_nonCopperWarningIcon =
new wxStaticBitmap( warningPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
1071 m_nonCopperWarningText =
new wxStaticText( warningPanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
1076 warningPanel->SetSizer( bWarningSizer );
1077 warningPanel->Layout();
1078 bWarningSizer->Fit( warningPanel );
1084 bSizerClearance->Add( sbClearancesSizer, 0, wxALL|wxEXPAND, 5 );
1087 bSizerPanelClearance->Add( bSizerClearance, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
1095 wxBoxSizer* bSizer45;
1096 bSizer45 =
new wxBoxSizer( wxVERTICAL );
1098 wxBoxSizer* bSizer46;
1099 bSizer46 =
new wxBoxSizer( wxVERTICAL );
1101 wxStaticBoxSizer* sbPostMachining;
1102 sbPostMachining =
new wxStaticBoxSizer(
new wxStaticBox(
m_backDrillPanel, wxID_ANY,
_(
"Hole Post Machining") ), wxVERTICAL );
1104 wxBoxSizer* bPostMachiningColumns;
1105 bPostMachiningColumns =
new wxBoxSizer( wxHORIZONTAL );
1107 wxGridBagSizer* gbPostMachiningLeftCol;
1108 gbPostMachiningLeftCol =
new wxGridBagSizer( 5, 5 );
1109 gbPostMachiningLeftCol->SetFlexibleDirection( wxBOTH );
1110 gbPostMachiningLeftCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1112 m_topPostMachiningLabel =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Top:"), wxDefaultPosition, wxDefaultSize, 0 );
1114 gbPostMachiningLeftCol->Add(
m_topPostMachiningLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1116 wxString m_topPostMachiningChoices[] = {
_(
"None"),
_(
"Countersink"),
_(
"Counterbore") };
1117 int m_topPostMachiningNChoices =
sizeof( m_topPostMachiningChoices ) /
sizeof( wxString );
1118 m_topPostMachining =
new wxChoice( sbPostMachining->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_topPostMachiningNChoices, m_topPostMachiningChoices, 0 );
1120 gbPostMachiningLeftCol->Add(
m_topPostMachining, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1122 m_topPostMachineSize1Label =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1124 gbPostMachiningLeftCol->Add(
m_topPostMachineSize1Label, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1126 m_topPostmachineSize1 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1127 gbPostMachiningLeftCol->Add(
m_topPostmachineSize1, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1129 m_topPostMachineSize1Units =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1131 gbPostMachiningLeftCol->Add(
m_topPostMachineSize1Units, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1133 m_topPostMachineSize2Label =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Angle:"), wxDefaultPosition, wxDefaultSize, 0 );
1135 gbPostMachiningLeftCol->Add(
m_topPostMachineSize2Label, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1137 m_topPostMachineSize2 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1138 gbPostMachiningLeftCol->Add(
m_topPostMachineSize2, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1140 m_topPostMachineSize2Units =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"deg"), wxDefaultPosition, wxDefaultSize, 0 );
1142 gbPostMachiningLeftCol->Add(
m_topPostMachineSize2Units, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1145 bPostMachiningColumns->Add( gbPostMachiningLeftCol, 1, wxEXPAND, 5 );
1148 bPostMachiningColumns->Add( 15, 0, 0, wxEXPAND, 5 );
1150 wxGridBagSizer* gbPostMachiningRightCol;
1151 gbPostMachiningRightCol =
new wxGridBagSizer( 5, 5 );
1152 gbPostMachiningRightCol->SetFlexibleDirection( wxBOTH );
1153 gbPostMachiningRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1155 m_bottomPostMachiningLabel =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Bottom:"), wxDefaultPosition, wxDefaultSize, 0 );
1157 gbPostMachiningRightCol->Add(
m_bottomPostMachiningLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1159 wxString m_bottomPostMachiningChoices[] = {
_(
"None"),
_(
"Countersink"),
_(
"Counterbore") };
1160 int m_bottomPostMachiningNChoices =
sizeof( m_bottomPostMachiningChoices ) /
sizeof( wxString );
1161 m_bottomPostMachining =
new wxChoice( sbPostMachining->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bottomPostMachiningNChoices, m_bottomPostMachiningChoices, 0 );
1163 gbPostMachiningRightCol->Add(
m_bottomPostMachining, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1169 m_bottomPostMachineSize1 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1170 gbPostMachiningRightCol->Add(
m_bottomPostMachineSize1, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1180 m_bottomPostMachineSize2 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1181 gbPostMachiningRightCol->Add(
m_bottomPostMachineSize2, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1188 bPostMachiningColumns->Add( gbPostMachiningRightCol, 1, wxEXPAND, 5 );
1191 sbPostMachining->Add( bPostMachiningColumns, 1, wxEXPAND, 5 );
1194 bSizer46->Add( sbPostMachining, 0, wxEXPAND|wxBOTTOM, 5 );
1196 wxStaticBoxSizer* sbBackdrill;
1197 sbBackdrill =
new wxStaticBoxSizer(
new wxStaticBox(
m_backDrillPanel, wxID_ANY,
_(
"Backdrill") ), wxVERTICAL );
1199 wxString m_backDrillChoiceChoices[] = {
_(
"None"),
_(
"Top"),
_(
"Bottom"),
_(
"Top & bottom") };
1200 int m_backDrillChoiceNChoices =
sizeof( m_backDrillChoiceChoices ) /
sizeof( wxString );
1201 m_backDrillChoice =
new wxChoice( sbBackdrill->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_backDrillChoiceNChoices, m_backDrillChoiceChoices, 0 );
1205 wxBoxSizer* bBackdrillColumns;
1206 bBackdrillColumns =
new wxBoxSizer( wxHORIZONTAL );
1208 wxGridBagSizer* gbBackdrillLeftCol;
1209 gbBackdrillLeftCol =
new wxGridBagSizer( 3, 5 );
1210 gbBackdrillLeftCol->SetFlexibleDirection( wxBOTH );
1211 gbBackdrillLeftCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1213 m_backDrillTopLayerLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Top backdrill must-cut:"), wxDefaultPosition, wxDefaultSize, 0 );
1217 gbBackdrillLeftCol->Add(
m_backDrillTopLayerLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1219 m_backDrillTopLayer =
new wxBitmapComboBox( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"dummy"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
1222 gbBackdrillLeftCol->Add(
m_backDrillTopLayer, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1224 m_backDrillTopSizeLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1226 gbBackdrillLeftCol->Add(
m_backDrillTopSizeLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1228 m_backDrillTopSize =
new wxTextCtrl( sbBackdrill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1229 gbBackdrillLeftCol->Add(
m_backDrillTopSize, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1231 m_backDrillTopSizeUnits =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1233 gbBackdrillLeftCol->Add(
m_backDrillTopSizeUnits, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1236 bBackdrillColumns->Add( gbBackdrillLeftCol, 1, wxEXPAND|wxLEFT, 15 );
1239 bBackdrillColumns->Add( 15, 0, 0, wxEXPAND, 5 );
1241 wxGridBagSizer* gbBackdrillRightCol;
1242 gbBackdrillRightCol =
new wxGridBagSizer( 3, 5 );
1243 gbBackdrillRightCol->SetFlexibleDirection( wxBOTH );
1244 gbBackdrillRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1246 m_backDrillBottomLayerLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Bottom backdrill must-cut:"), wxDefaultPosition, wxDefaultSize, 0 );
1252 m_backDrillBottomLayer =
new wxBitmapComboBox( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"dummy"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
1255 gbBackdrillRightCol->Add(
m_backDrillBottomLayer, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1257 m_backDrillBottomSizeLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1261 m_backDrillBottomSize =
new wxTextCtrl( sbBackdrill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1262 gbBackdrillRightCol->Add(
m_backDrillBottomSize, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1264 m_backDrillBottomSizeUnits =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1269 bBackdrillColumns->Add( gbBackdrillRightCol, 1, wxEXPAND, 5 );
1272 sbBackdrill->Add( bBackdrillColumns, 1, wxEXPAND|wxTOP, 3 );
1275 bSizer46->Add( sbBackdrill, 0, wxEXPAND|wxTOP, 5 );
1278 bSizer45->Add( bSizer46, 1, wxALL|wxEXPAND, 5 );
1286 bSizerUpper->Add(
m_notebook, 0, wxEXPAND|wxTOP|wxBOTTOM, 12 );
1288 wxBoxSizer* bSizerDisplayPad;
1289 bSizerDisplayPad =
new wxBoxSizer( wxVERTICAL );
1291 bSizerDisplayPad->SetMinSize( wxSize( 290,-1 ) );
1293 bSizerDisplayPad->Add( 0, 25, 0, wxEXPAND, 5 );
1295 m_stackupImagesBook =
new wxSimplebook(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE );
1297 wxBoxSizer* page0Sizer;
1298 page0Sizer =
new wxBoxSizer( wxVERTICAL );
1300 m_stackupImage0 =
new wxStaticBitmap(
page0, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1301 page0Sizer->Add(
m_stackupImage0, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1304 page0->SetSizer( page0Sizer );
1306 page0Sizer->Fit(
page0 );
1309 wxBoxSizer* page1Sizer;
1310 page1Sizer =
new wxBoxSizer( wxVERTICAL );
1312 m_stackupImage1 =
new wxStaticBitmap(
page1, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1313 page1Sizer->Add(
m_stackupImage1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1316 page1->SetSizer( page1Sizer );
1318 page1Sizer->Fit(
page1 );
1321 wxBoxSizer* page2Sizer;
1322 page2Sizer =
new wxBoxSizer( wxVERTICAL );
1324 m_stackupImage2 =
new wxStaticBitmap(
page2, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1325 page2Sizer->Add(
m_stackupImage2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1328 page2->SetSizer( page2Sizer );
1330 page2Sizer->Fit(
page2 );
1333 wxBoxSizer* page3Sizer;
1334 page3Sizer =
new wxBoxSizer( wxVERTICAL );
1337 page3->SetSizer( page3Sizer );
1339 page3Sizer->Fit(
page3 );
1342 wxBoxSizer* page4Sizer;
1343 page4Sizer =
new wxBoxSizer( wxVERTICAL );
1345 m_stackupImage4 =
new wxStaticBitmap(
page4, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1346 page4Sizer->Add(
m_stackupImage4, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1349 page4->SetSizer( page4Sizer );
1351 page4Sizer->Fit(
page4 );
1354 wxBoxSizer* page5Sizer;
1355 page5Sizer =
new wxBoxSizer( wxVERTICAL );
1357 m_stackupImage5 =
new wxStaticBitmap(
page5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1358 page5Sizer->Add(
m_stackupImage5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1361 page5->SetSizer( page5Sizer );
1363 page5Sizer->Fit(
page5 );
1366 wxBoxSizer* page6Sizer;
1367 page6Sizer =
new wxBoxSizer( wxVERTICAL );
1369 m_stackupImage6 =
new wxStaticBitmap(
page6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1370 page6Sizer->Add(
m_stackupImage6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1373 page6->SetSizer( page6Sizer );
1375 page6Sizer->Fit(
page6 );
1378 wxBoxSizer* page7Sizer;
1379 page7Sizer =
new wxBoxSizer( wxVERTICAL );
1381 m_stackupImage7 =
new wxStaticBitmap(
page7, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1382 page7Sizer->Add(
m_stackupImage7, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1385 page7->SetSizer( page7Sizer );
1387 page7Sizer->Fit(
page7 );
1393 bSizerDisplayPad->Add( 0, 4, 0, wxEXPAND, 5 );
1395 m_boardViewPanel =
new wxPanel(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1406 bSizerUpper->Add( bSizerDisplayPad, 1, wxEXPAND|wxTOP, 5 );
1409 m_MainSizer->Add( bSizerUpper, 1, wxEXPAND|wxLEFT, 8 );
1411 wxBoxSizer* bottomSizer;
1412 bottomSizer =
new wxBoxSizer( wxHORIZONTAL );
1414 m_parentInfo =
new wxStaticText(
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1416 bottomSizer->Add(
m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
1419 bottomSizer->Add( 20, 0, 1, wxEXPAND, 5 );
1421 m_cbShowPadOutline =
new wxCheckBox(
this, wxID_ANY,
_(
"Preview pad in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
1422 bottomSizer->Add(
m_cbShowPadOutline, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
1425 bottomSizer->Add( 40, 0, 0, wxEXPAND, 5 );
1434 bottomSizer->Add(
m_sdbSizer, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
1437 m_MainSizer->Add( bottomSizer, 0, wxEXPAND|wxLEFT, 5 );
1444 this->Centre( wxBOTH );