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/Back"),
_(
"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 );
483 wxFlexGridSizer* fgSizerPadToDie;
484 fgSizerPadToDie =
new wxFlexGridSizer( 14, 3, 0, 0 );
485 fgSizerPadToDie->AddGrowableCol( 1 );
486 fgSizerPadToDie->SetFlexibleDirection( wxBOTH );
487 fgSizerPadToDie->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
489 wxBoxSizer* bSizer34;
490 bSizer34 =
new wxBoxSizer( wxHORIZONTAL );
493 bSizer34->Add(
m_padToDieOpt, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
497 bSizer34->Add(
m_padToDieLabel, 0, wxALIGN_CENTER_VERTICAL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
500 fgSizerPadToDie->Add( bSizer34, 0, wxEXPAND|wxRIGHT, 5 );
503 fgSizerPadToDie->Add(
m_padToDieCtrl, 0, wxEXPAND|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
507 fgSizerPadToDie->Add(
m_padToDieUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN|wxRIGHT, 5 );
509 wxBoxSizer* bSizer341;
510 bSizer341 =
new wxBoxSizer( wxHORIZONTAL );
517 bSizer341->Add(
m_padToDieDelayLabel, 0, wxALIGN_CENTER_VERTICAL|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
520 fgSizerPadToDie->Add( bSizer341, 1, wxEXPAND, 5 );
523 fgSizerPadToDie->Add(
m_padToDieDelayCtrl, 0, wxEXPAND|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN|wxTOP, 5 );
536 bGeneralSizer->Add( 5, 0, 0, wxEXPAND, 5 );
540 wxStaticBoxSizer* m_LayersSizer;
541 m_LayersSizer =
new wxStaticBoxSizer(
new wxStaticBox(
m_panelGeneral, wxID_ANY, wxEmptyString ), wxVERTICAL );
545 m_FlippedWarningIcon =
new wxStaticBitmap( m_LayersSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
550 m_staticText86 =
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Parent footprint on board is flipped.\nLayers will be reversed."), wxDefaultPosition, wxDefaultSize, 0 );
557 m_copperLayersLabel =
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Copper layers:"), wxDefaultPosition, wxDefaultSize, 0 );
561 wxArrayString m_rbCopperLayersSelChoices;
562 m_rbCopperLayersSel =
new wxChoice( m_LayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_rbCopperLayersSelChoices, 0 );
568 wxBoxSizer* bSizer444;
569 bSizer444 =
new wxBoxSizer( wxHORIZONTAL );
571 m_techLayersLabel =
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Technical Layers"), wxDefaultPosition, wxDefaultSize, 0 );
573 bSizer444->Add(
m_techLayersLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
575 m_staticline52 =
new wxStaticLine( m_LayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
576 bSizer444->Add(
m_staticline52, 1, wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 3 );
579 m_LayersSizer->Add( bSizer444, 1, wxEXPAND|wxTOP, 5 );
581 m_layerFrontAdhesive =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front adhesive"), wxDefaultPosition, wxDefaultSize, 0 );
584 m_layerBackAdhesive =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back adhesive"), wxDefaultPosition, wxDefaultSize, 0 );
587 m_layerFrontPaste =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front solder paste"), wxDefaultPosition, wxDefaultSize, 0 );
590 m_layerBackPaste =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back solder paste"), wxDefaultPosition, wxDefaultSize, 0 );
593 m_layerFrontSilk =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front silk screen"), wxDefaultPosition, wxDefaultSize, 0 );
596 m_layerBackSilk =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back silk screen"), wxDefaultPosition, wxDefaultSize, 0 );
599 m_layerFrontMask =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front solder mask"), wxDefaultPosition, wxDefaultSize, 0 );
602 m_layerBackMask =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back solder mask"), wxDefaultPosition, wxDefaultSize, 0 );
605 m_layerUserDwgs =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Drafting notes"), wxDefaultPosition, wxDefaultSize, 0 );
608 m_layerECO1 =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"E.C.O.1"), wxDefaultPosition, wxDefaultSize, 0 );
609 m_LayersSizer->Add(
m_layerECO1, 0, wxTOP|wxRIGHT|wxLEFT, 4 );
611 m_layerECO2 =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"E.C.O.2"), wxDefaultPosition, wxDefaultSize, 0 );
619 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") );
626 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)") };
627 int m_choiceFabPropertyNChoices =
sizeof( m_choiceFabPropertyChoices ) /
sizeof( wxString );
639 wxString m_simElectricalTypeCtrlChoices[] = {
_(
"None"),
_(
"Source"),
_(
"Sink") };
640 int m_simElectricalTypeCtrlNChoices =
sizeof( m_simElectricalTypeCtrlChoices ) /
sizeof( wxString );
654 wxBoxSizer* bSizerPanelConnections;
655 bSizerPanelConnections =
new wxBoxSizer( wxVERTICAL );
657 wxBoxSizer* bSizerConnectionsMargins;
658 bSizerConnectionsMargins =
new wxBoxSizer( wxVERTICAL );
660 wxStaticBoxSizer* bSizerTeardrops;
661 bSizerTeardrops =
new wxStaticBoxSizer(
new wxStaticBox(
m_connectionsPanel, wxID_ANY,
_(
"Teardrops") ), wxVERTICAL );
665 m_legacyTeardropsIcon =
new wxStaticBitmap( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
668 wxBoxSizer* bSizer42;
669 bSizer42 =
new wxBoxSizer( wxVERTICAL );
671 m_staticText85 =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Board contains legacy teardrops."), wxDefaultPosition, wxDefaultSize, 0 );
675 m_staticText851 =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Use Edit > Edit Teardrops to apply automatic teardrops."), wxDefaultPosition, wxDefaultSize, 0 );
685 wxBoxSizer* bSizerCols11;
686 bSizerCols11 =
new wxBoxSizer( wxHORIZONTAL );
688 wxBoxSizer* bSizerLeftCol11;
689 bSizerLeftCol11 =
new wxBoxSizer( wxVERTICAL );
691 m_cbTeardrops =
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Add teardrops on pad's track connections"), wxDefaultPosition, wxDefaultSize, 0 );
692 bSizerLeftCol11->Add(
m_cbTeardrops, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
694 m_cbPreferZoneConnection =
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Prefer zone connection"), wxDefaultPosition, wxDefaultSize, 0 );
696 m_cbPreferZoneConnection->SetToolTip(
_(
"Do not create teardrops on tracks connected to pads that are also connected to a copper zone.") );
700 m_cbTeardropsUseNextTrack =
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Allow teardrops to span 2 track segments"), wxDefaultPosition, wxDefaultSize, 0 );
702 m_cbTeardropsUseNextTrack->SetToolTip(
_(
"Allows a teardrop to spread over 2 tracks if the first track segment is too short") );
707 bSizerCols11->Add( bSizerLeftCol11, 1, wxEXPAND|wxTOP, 3 );
710 bSizerCols11->Add( 5, 0, 0, wxEXPAND, 5 );
712 wxBoxSizer* bSizerRightCol11;
713 bSizerRightCol11 =
new wxBoxSizer( wxVERTICAL );
715 wxBoxSizer* bSizer39;
716 bSizer39 =
new wxBoxSizer( wxHORIZONTAL );
718 m_stHDRatio =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 );
720 m_stHDRatio->SetToolTip(
_(
"Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") );
722 bSizer39->Add(
m_stHDRatio, 0, wxALIGN_CENTER_VERTICAL, 5 );
724 m_spTeardropHDPercent =
new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 90, 10 );
726 m_spTeardropHDPercent->SetToolTip(
_(
"Tracks which are similar in size to the pad do not need teardrops.") );
730 m_minTrackWidthUnits =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"%("), wxDefaultPosition, wxDefaultSize, 0 );
734 m_minTrackWidthHint =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"d"), wxDefaultPosition, wxDefaultSize, 0 );
736 m_minTrackWidthHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL,
false, wxEmptyString ) );
740 m_staticText87 =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
" )"), wxDefaultPosition, wxDefaultSize, 0 );
745 bSizerRightCol11->Add( bSizer39, 0, wxLEFT, 5 );
748 bSizerCols11->Add( bSizerRightCol11, 1, wxEXPAND, 10 );
751 bSizerTeardrops->Add( bSizerCols11, 0, wxEXPAND|wxBOTTOM, 5 );
753 m_teardropShapeLabel =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Teardrop Shape"), wxDefaultPosition, wxDefaultSize, 0 );
757 m_staticline51 =
new wxStaticLine( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
760 wxBoxSizer* bSizerShapeColumns;
761 bSizerShapeColumns =
new wxBoxSizer( wxHORIZONTAL );
763 wxBoxSizer* bSizerLeftCol;
764 bSizerLeftCol =
new wxBoxSizer( wxVERTICAL );
766 m_bitmapTeardrop =
new wxStaticBitmap( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
770 bSizerShapeColumns->Add( bSizerLeftCol, 1, wxEXPAND, 10 );
773 bSizerShapeColumns->Add( 5, 0, 0, wxEXPAND, 5 );
775 wxBoxSizer* bSizerRightCol;
776 bSizerRightCol =
new wxBoxSizer( wxVERTICAL );
778 wxFlexGridSizer* fgSizerRightCol;
779 fgSizerRightCol =
new wxFlexGridSizer( 0, 3, 2, 0 );
780 fgSizerRightCol->AddGrowableCol( 1 );
781 fgSizerRightCol->SetFlexibleDirection( wxBOTH );
782 fgSizerRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
784 m_stHsetting =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Best length (L):"), wxDefaultPosition, wxDefaultSize, 0 );
786 fgSizerRightCol->Add(
m_stHsetting, 0, wxALIGN_CENTER_VERTICAL, 5 );
788 m_spTeardropLenPercent =
new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 20, 200, 40.000000, 10 );
792 wxBoxSizer* bSizer131;
793 bSizer131 =
new wxBoxSizer( wxHORIZONTAL );
795 m_stLenPercentUnits =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"%("), wxDefaultPosition, wxDefaultSize, 0 );
799 m_stLenPercentHint =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"d"), wxDefaultPosition, wxDefaultSize, 0 );
801 m_stLenPercentHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL,
false, wxEmptyString ) );
805 m_staticText88 =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
" )"), wxDefaultPosition, wxDefaultSize, 0 );
810 fgSizerRightCol->Add( bSizer131, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
812 m_stMaxLen =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Maximum length (L):"), wxDefaultPosition, wxDefaultSize, 0 );
814 fgSizerRightCol->Add(
m_stMaxLen, 0, wxALIGN_CENTER_VERTICAL, 5 );
816 m_tcTdMaxLen =
new wxTextCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
817 fgSizerRightCol->Add(
m_tcTdMaxLen, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
819 m_stMaxLenUnits =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
821 fgSizerRightCol->Add(
m_stMaxLenUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
824 fgSizerRightCol->Add( 0, 5, 1, wxEXPAND, 5 );
827 fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
830 fgSizerRightCol->Add( 0, 0, 1, wxEXPAND, 5 );
832 m_stVsetting =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Best width (W):"), wxDefaultPosition, wxDefaultSize, 0 );
834 fgSizerRightCol->Add(
m_stVsetting, 0, wxALIGN_CENTER_VERTICAL, 10 );
836 m_spTeardropSizePercent =
new wxSpinCtrlDouble( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 60, 100, 100.000000, 10 );
840 wxBoxSizer* bSizer13;
841 bSizer13 =
new wxBoxSizer( wxHORIZONTAL );
843 m_stWidthPercentUnits =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"%("), wxDefaultPosition, wxDefaultSize, 0 );
847 m_stWidthPercentHint =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"d"), wxDefaultPosition, wxDefaultSize, 0 );
849 m_stWidthPercentHint->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL,
false, wxEmptyString ) );
853 m_staticText89 =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
" )"), wxDefaultPosition, wxDefaultSize, 0 );
858 fgSizerRightCol->Add( bSizer13, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
860 m_stTdMaxSize =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Maximum width (W):"), wxDefaultPosition, wxDefaultSize, 0 );
862 fgSizerRightCol->Add(
m_stTdMaxSize, 0, wxALIGN_CENTER_VERTICAL, 10 );
864 m_tcMaxHeight =
new wxTextCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
865 fgSizerRightCol->Add(
m_tcMaxHeight, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
867 m_stMaxHeightUnits =
new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
872 bSizerRightCol->Add( fgSizerRightCol, 1, wxEXPAND|wxTOP|wxLEFT, 10 );
874 wxBoxSizer* bSizer44;
875 bSizer44 =
new wxBoxSizer( wxHORIZONTAL );
877 m_curvedEdges =
new wxCheckBox( bSizerTeardrops->GetStaticBox(), wxID_ANY,
_(
"Curved edges"), wxDefaultPosition, wxDefaultSize, 0 );
878 bSizer44->Add(
m_curvedEdges, 0, wxALIGN_CENTER_VERTICAL, 5 );
881 bSizerRightCol->Add( bSizer44, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 );
884 bSizerShapeColumns->Add( bSizerRightCol, 1, wxEXPAND, 5 );
887 bSizerTeardrops->Add( bSizerShapeColumns, 1, wxBOTTOM|wxEXPAND|wxRIGHT, 5 );
890 bSizerConnectionsMargins->Add( bSizerTeardrops, 1, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
892 wxBoxSizer* bSizerConnectionsLower;
893 bSizerConnectionsLower =
new wxBoxSizer( wxHORIZONTAL );
897 wxFlexGridSizer* fgSizerCopperZonesOpts;
898 fgSizerCopperZonesOpts =
new wxFlexGridSizer( 0, 2, 5, 0 );
899 fgSizerCopperZonesOpts->AddGrowableCol( 1 );
900 fgSizerCopperZonesOpts->SetFlexibleDirection( wxBOTH );
901 fgSizerCopperZonesOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
907 wxString m_ZoneConnectionChoiceChoices[] = {
_(
"From parent footprint"),
_(
"Solid"),
_(
"Thermal relief"),
_(
"None") };
908 int m_ZoneConnectionChoiceNChoices =
sizeof( m_ZoneConnectionChoiceChoices ) /
sizeof( wxString );
917 wxString m_ZoneCustomPadShapeChoices[] = {
_(
"Pad shape"),
_(
"Pad convex hull") };
918 int m_ZoneCustomPadShapeNChoices =
sizeof( m_ZoneCustomPadShapeChoices ) /
sizeof( wxString );
921 fgSizerCopperZonesOpts->Add(
m_ZoneCustomPadShape, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxLEFT, 5 );
929 wxStaticBoxSizer* sbSizerThermalReliefs;
930 sbSizerThermalReliefs =
new wxStaticBoxSizer(
new wxStaticBox(
m_connectionsPanel, wxID_ANY,
_(
"Thermal Relief Overrides") ), wxVERTICAL );
932 wxFlexGridSizer* fgSizerThermalReliefs;
933 fgSizerThermalReliefs =
new wxFlexGridSizer( 0, 3, 3, 0 );
934 fgSizerThermalReliefs->AddGrowableCol( 1 );
935 fgSizerThermalReliefs->SetFlexibleDirection( wxBOTH );
936 fgSizerThermalReliefs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
938 m_thermalGapLabel =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"Relief gap:"), wxDefaultPosition, wxDefaultSize, 0 );
940 fgSizerThermalReliefs->Add(
m_thermalGapLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
942 m_thermalGapCtrl =
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
943 fgSizerThermalReliefs->Add(
m_thermalGapCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 3 );
945 m_thermalGapUnits =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
947 fgSizerThermalReliefs->Add(
m_thermalGapUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
949 m_spokeWidthLabel =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"Spoke width:"), wxDefaultPosition, wxDefaultSize, 0 );
951 fgSizerThermalReliefs->Add(
m_spokeWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
953 m_spokeWidthCtrl =
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
954 fgSizerThermalReliefs->Add(
m_spokeWidthCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxLEFT, 3 );
956 m_spokeWidthUnits =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
958 fgSizerThermalReliefs->Add(
m_spokeWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
960 m_spokeAngleLabel =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"Spoke angle:"), wxDefaultPosition, wxDefaultSize, 0 );
962 fgSizerThermalReliefs->Add(
m_spokeAngleLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
964 m_spokeAngleCtrl =
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
967 m_spokeAngleUnits =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"deg"), wxDefaultPosition, wxDefaultSize, 0 );
969 fgSizerThermalReliefs->Add(
m_spokeAngleUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
972 sbSizerThermalReliefs->Add( fgSizerThermalReliefs, 1, wxBOTTOM|wxEXPAND, 5 );
975 bSizerConnectionsLower->Add( sbSizerThermalReliefs, 1, wxALL, 5 );
978 bSizerConnectionsMargins->Add( bSizerConnectionsLower, 0, wxTOP|wxEXPAND, 10 );
981 bSizerPanelConnections->Add( bSizerConnectionsMargins, 0, wxEXPAND|wxBOTTOM, 5 );
989 wxBoxSizer* bSizerPanelClearance;
990 bSizerPanelClearance =
new wxBoxSizer( wxVERTICAL );
992 wxStaticBoxSizer* sbClearancesSizer;
993 sbClearancesSizer =
new wxStaticBoxSizer(
new wxStaticBox(
m_localSettingsPanel, wxID_ANY,
_(
"Clearance Overrides") ), wxVERTICAL );
995 wxStaticText* m_staticTextHint;
996 m_staticTextHint =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Leave values blank to use parent footprint or netclass values."), wxDefaultPosition, wxDefaultSize, 0 );
997 m_staticTextHint->Wrap( -1 );
998 sbClearancesSizer->Add( m_staticTextHint, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
1000 m_staticTextInfoPosValue =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Positive clearance means area bigger than the pad (usual for mask clearance)."), wxDefaultPosition, wxDefaultSize, 0 );
1004 m_staticTextInfoNegVal =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Negative clearance means area smaller than the pad (usual for paste clearance)."), wxDefaultPosition, wxDefaultSize, 0 );
1008 wxFlexGridSizer* fgClearancesGridSizer;
1009 fgClearancesGridSizer =
new wxFlexGridSizer( 4, 3, 4, 0 );
1010 fgClearancesGridSizer->AddGrowableCol( 1 );
1011 fgClearancesGridSizer->SetFlexibleDirection( wxBOTH );
1012 fgClearancesGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1014 m_clearanceLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Pad clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
1016 m_clearanceLabel->SetToolTip(
_(
"This is the local net clearance for this pad.\nIf 0, the footprint local value or the Netclass value is used.") );
1018 fgClearancesGridSizer->Add(
m_clearanceLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
1020 m_clearanceCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1021 fgClearancesGridSizer->Add(
m_clearanceCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
1023 m_clearanceUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1025 fgClearancesGridSizer->Add(
m_clearanceUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
1027 m_maskMarginLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Solder mask expansion:"), wxDefaultPosition, wxDefaultSize, 0 );
1029 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.") );
1031 fgClearancesGridSizer->Add(
m_maskMarginLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
1033 m_maskMarginCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1034 fgClearancesGridSizer->Add(
m_maskMarginCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 15 );
1036 m_maskMarginUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1038 fgClearancesGridSizer->Add(
m_maskMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
1040 m_pasteMarginLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Solder paste clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
1042 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.") );
1044 fgClearancesGridSizer->Add(
m_pasteMarginLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
1046 m_pasteMarginCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1047 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.") );
1049 fgClearancesGridSizer->Add(
m_pasteMarginCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
1051 m_pasteMarginUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1053 fgClearancesGridSizer->Add(
m_pasteMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
1056 sbClearancesSizer->Add( fgClearancesGridSizer, 0, wxTOP|wxBOTTOM, 10 );
1058 m_nonCopperWarningBook =
new wxSimplebook( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
1060 notePanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1061 wxBoxSizer* bNoteSizer;
1062 bNoteSizer =
new wxBoxSizer( wxVERTICAL );
1064 m_nonCopperNote =
new wxStaticText( notePanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
1068 m_staticTextInfoPaste =
new wxStaticText( notePanel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1073 notePanel->SetSizer( bNoteSizer );
1074 notePanel->Layout();
1075 bNoteSizer->Fit( notePanel );
1077 wxPanel* warningPanel;
1078 warningPanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1079 wxBoxSizer* bWarningSizer;
1080 bWarningSizer =
new wxBoxSizer( wxHORIZONTAL );
1082 bWarningSizer->SetMinSize( wxSize( -1,50 ) );
1083 m_nonCopperWarningIcon =
new wxStaticBitmap( warningPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
1088 m_nonCopperWarningText =
new wxStaticText( warningPanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
1093 warningPanel->SetSizer( bWarningSizer );
1094 warningPanel->Layout();
1095 bWarningSizer->Fit( warningPanel );
1101 bSizerPanelClearance->Add( sbClearancesSizer, 0, wxALL|wxEXPAND, 5 );
1109 wxBoxSizer* bPanelSizer;
1110 bPanelSizer =
new wxBoxSizer( wxVERTICAL );
1112 wxStaticBoxSizer* sbPostMachining;
1113 sbPostMachining =
new wxStaticBoxSizer(
new wxStaticBox(
m_backDrillPanel, wxID_ANY,
_(
"Hole Post Machining") ), wxVERTICAL );
1115 wxBoxSizer* bPostMachiningColumns;
1116 bPostMachiningColumns =
new wxBoxSizer( wxHORIZONTAL );
1118 wxGridBagSizer* gbPostMachiningLeftCol;
1119 gbPostMachiningLeftCol =
new wxGridBagSizer( 5, 5 );
1120 gbPostMachiningLeftCol->SetFlexibleDirection( wxBOTH );
1121 gbPostMachiningLeftCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1123 m_topPostMachiningLabel =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Front:"), wxDefaultPosition, wxDefaultSize, 0 );
1125 gbPostMachiningLeftCol->Add(
m_topPostMachiningLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1127 wxString m_topPostMachiningChoices[] = {
_(
"None"),
_(
"Countersink"),
_(
"Counterbore") };
1128 int m_topPostMachiningNChoices =
sizeof( m_topPostMachiningChoices ) /
sizeof( wxString );
1129 m_topPostMachining =
new wxChoice( sbPostMachining->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_topPostMachiningNChoices, m_topPostMachiningChoices, 0 );
1131 gbPostMachiningLeftCol->Add(
m_topPostMachining, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1133 m_topPostMachineSize1Label =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Size:"), wxDefaultPosition, wxDefaultSize, 0 );
1135 gbPostMachiningLeftCol->Add(
m_topPostMachineSize1Label, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
1137 m_topPostmachineSize1 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1138 gbPostMachiningLeftCol->Add(
m_topPostmachineSize1, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
1140 m_topPostMachineSize1Units =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1142 gbPostMachiningLeftCol->Add(
m_topPostMachineSize1Units, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1144 m_topPostMachineSize2Label =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Angle:"), wxDefaultPosition, wxDefaultSize, 0 );
1146 gbPostMachiningLeftCol->Add(
m_topPostMachineSize2Label, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
1148 m_topPostMachineSize2 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1149 gbPostMachiningLeftCol->Add(
m_topPostMachineSize2, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
1151 m_topPostMachineSize2Units =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"deg"), wxDefaultPosition, wxDefaultSize, 0 );
1153 gbPostMachiningLeftCol->Add(
m_topPostMachineSize2Units, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1156 bPostMachiningColumns->Add( gbPostMachiningLeftCol, 1, wxEXPAND, 5 );
1159 bPostMachiningColumns->Add( 15, 0, 0, wxEXPAND, 5 );
1161 wxGridBagSizer* gbPostMachiningRightCol;
1162 gbPostMachiningRightCol =
new wxGridBagSizer( 5, 5 );
1163 gbPostMachiningRightCol->SetFlexibleDirection( wxBOTH );
1164 gbPostMachiningRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1166 m_bottomPostMachiningLabel =
new wxStaticText( sbPostMachining->GetStaticBox(), wxID_ANY,
_(
"Back:"), wxDefaultPosition, wxDefaultSize, 0 );
1168 gbPostMachiningRightCol->Add(
m_bottomPostMachiningLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1170 wxString m_bottomPostMachiningChoices[] = {
_(
"None"),
_(
"Countersink"),
_(
"Counterbore") };
1171 int m_bottomPostMachiningNChoices =
sizeof( m_bottomPostMachiningChoices ) /
sizeof( wxString );
1172 m_bottomPostMachining =
new wxChoice( sbPostMachining->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_bottomPostMachiningNChoices, m_bottomPostMachiningChoices, 0 );
1174 gbPostMachiningRightCol->Add(
m_bottomPostMachining, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1180 m_bottomPostMachineSize1 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1181 gbPostMachiningRightCol->Add(
m_bottomPostMachineSize1, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
1191 m_bottomPostMachineSize2 =
new wxTextCtrl( sbPostMachining->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1192 gbPostMachiningRightCol->Add(
m_bottomPostMachineSize2, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
1199 bPostMachiningColumns->Add( gbPostMachiningRightCol, 1, wxEXPAND, 5 );
1202 sbPostMachining->Add( bPostMachiningColumns, 1, wxEXPAND, 5 );
1205 bPanelSizer->Add( sbPostMachining, 0, wxEXPAND|wxALL, 5 );
1207 wxStaticBoxSizer* sbBackdrill;
1208 sbBackdrill =
new wxStaticBoxSizer(
new wxStaticBox(
m_backDrillPanel, wxID_ANY,
_(
"Backdrilling") ), wxVERTICAL );
1210 wxString m_backDrillChoiceChoices[] = {
_(
"None"),
_(
"Top"),
_(
"Bottom"),
_(
"Top & bottom") };
1211 int m_backDrillChoiceNChoices =
sizeof( m_backDrillChoiceChoices ) /
sizeof( wxString );
1212 m_backDrillChoice =
new wxChoice( sbBackdrill->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_backDrillChoiceNChoices, m_backDrillChoiceChoices, 0 );
1216 wxBoxSizer* bBackdrillColumns;
1217 bBackdrillColumns =
new wxBoxSizer( wxHORIZONTAL );
1219 wxGridBagSizer* gbBackdrillLeftCol;
1220 gbBackdrillLeftCol =
new wxGridBagSizer( 3, 5 );
1221 gbBackdrillLeftCol->SetFlexibleDirection( wxBOTH );
1222 gbBackdrillLeftCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1224 m_backDrillTopLayerLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Must-cut layer:"), wxDefaultPosition, wxDefaultSize, 0 );
1228 gbBackdrillLeftCol->Add(
m_backDrillTopLayerLabel, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1230 m_backDrillTopLayer =
new wxBitmapComboBox( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"dummy"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
1233 gbBackdrillLeftCol->Add(
m_backDrillTopLayer, wxGBPosition( 1, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1235 m_backDrillTopSizeLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Top backdrill size:"), wxDefaultPosition, wxDefaultSize, 0 );
1237 gbBackdrillLeftCol->Add(
m_backDrillTopSizeLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1239 m_backDrillTopSize =
new wxTextCtrl( sbBackdrill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1240 gbBackdrillLeftCol->Add(
m_backDrillTopSize, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1242 m_backDrillTopSizeUnits =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1244 gbBackdrillLeftCol->Add(
m_backDrillTopSizeUnits, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1247 gbBackdrillLeftCol->AddGrowableRow( 1 );
1249 bBackdrillColumns->Add( gbBackdrillLeftCol, 1, wxEXPAND|wxLEFT, 10 );
1252 bBackdrillColumns->Add( 15, 0, 0, wxEXPAND, 5 );
1254 wxGridBagSizer* gbBackdrillRightCol;
1255 gbBackdrillRightCol =
new wxGridBagSizer( 3, 5 );
1256 gbBackdrillRightCol->SetFlexibleDirection( wxBOTH );
1257 gbBackdrillRightCol->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
1259 m_backDrillBottomLayerLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Must-cut layer:"), wxDefaultPosition, wxDefaultSize, 0 );
1265 m_backDrillBottomLayer =
new wxBitmapComboBox( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"dummy"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
1268 gbBackdrillRightCol->Add(
m_backDrillBottomLayer, wxGBPosition( 1, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
1270 m_backDrillBottomSizeLabel =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"Bottom backdrill size:"), wxDefaultPosition, wxDefaultSize, 0 );
1274 m_backDrillBottomSize =
new wxTextCtrl( sbBackdrill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1275 gbBackdrillRightCol->Add(
m_backDrillBottomSize, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
1277 m_backDrillBottomSizeUnits =
new wxStaticText( sbBackdrill->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
1282 gbBackdrillRightCol->AddGrowableRow( 1 );
1284 bBackdrillColumns->Add( gbBackdrillRightCol, 1, wxEXPAND, 5 );
1287 sbBackdrill->Add( bBackdrillColumns, 0, wxEXPAND|wxTOP, 3 );
1290 bPanelSizer->Add( sbBackdrill, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
1298 bSizerUpper->Add(
m_notebook, 0, wxEXPAND|wxTOP|wxBOTTOM, 12 );
1300 wxBoxSizer* bSizerDisplayPad;
1301 bSizerDisplayPad =
new wxBoxSizer( wxVERTICAL );
1303 bSizerDisplayPad->SetMinSize( wxSize( 290,-1 ) );
1305 bSizerDisplayPad->Add( 0, 25, 0, wxEXPAND, 5 );
1307 m_stackupImagesBook =
new wxSimplebook(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE );
1309 wxBoxSizer* page0Sizer;
1310 page0Sizer =
new wxBoxSizer( wxVERTICAL );
1312 m_stackupImage0 =
new wxStaticBitmap(
page0, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1313 page0Sizer->Add(
m_stackupImage0, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1316 page0->SetSizer( page0Sizer );
1318 page0Sizer->Fit(
page0 );
1321 wxBoxSizer* page1Sizer;
1322 page1Sizer =
new wxBoxSizer( wxVERTICAL );
1324 m_stackupImage1 =
new wxStaticBitmap(
page1, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1325 page1Sizer->Add(
m_stackupImage1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1328 page1->SetSizer( page1Sizer );
1330 page1Sizer->Fit(
page1 );
1333 wxBoxSizer* page2Sizer;
1334 page2Sizer =
new wxBoxSizer( wxVERTICAL );
1336 m_stackupImage2 =
new wxStaticBitmap(
page2, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1337 page2Sizer->Add(
m_stackupImage2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1340 page2->SetSizer( page2Sizer );
1342 page2Sizer->Fit(
page2 );
1345 wxBoxSizer* page3Sizer;
1346 page3Sizer =
new wxBoxSizer( wxVERTICAL );
1349 page3->SetSizer( page3Sizer );
1351 page3Sizer->Fit(
page3 );
1354 wxBoxSizer* page4Sizer;
1355 page4Sizer =
new wxBoxSizer( wxVERTICAL );
1357 m_stackupImage4 =
new wxStaticBitmap(
page4, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1358 page4Sizer->Add(
m_stackupImage4, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1361 page4->SetSizer( page4Sizer );
1363 page4Sizer->Fit(
page4 );
1366 wxBoxSizer* page5Sizer;
1367 page5Sizer =
new wxBoxSizer( wxVERTICAL );
1369 m_stackupImage5 =
new wxStaticBitmap(
page5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1370 page5Sizer->Add(
m_stackupImage5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1373 page5->SetSizer( page5Sizer );
1375 page5Sizer->Fit(
page5 );
1378 wxBoxSizer* page6Sizer;
1379 page6Sizer =
new wxBoxSizer( wxVERTICAL );
1381 m_stackupImage6 =
new wxStaticBitmap(
page6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1382 page6Sizer->Add(
m_stackupImage6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1385 page6->SetSizer( page6Sizer );
1387 page6Sizer->Fit(
page6 );
1390 wxBoxSizer* page7Sizer;
1391 page7Sizer =
new wxBoxSizer( wxVERTICAL );
1393 m_stackupImage7 =
new wxStaticBitmap(
page7, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
1394 page7Sizer->Add(
m_stackupImage7, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
1397 page7->SetSizer( page7Sizer );
1399 page7Sizer->Fit(
page7 );
1405 bSizerDisplayPad->Add( 0, 4, 0, wxEXPAND, 5 );
1407 m_boardViewPanel =
new wxPanel(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
1418 bSizerUpper->Add( bSizerDisplayPad, 1, wxEXPAND|wxTOP, 5 );
1421 m_MainSizer->Add( bSizerUpper, 1, wxEXPAND|wxLEFT, 8 );
1423 wxBoxSizer* bottomSizer;
1424 bottomSizer =
new wxBoxSizer( wxHORIZONTAL );
1426 m_parentInfo =
new wxStaticText(
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
1428 bottomSizer->Add(
m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
1431 bottomSizer->Add( 20, 0, 1, wxEXPAND, 5 );
1433 m_cbShowPadOutline =
new wxCheckBox(
this, wxID_ANY,
_(
"Preview pad in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
1443 bottomSizer->Add(
m_sdbSizer, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
1446 m_MainSizer->Add( bottomSizer, 0, wxEXPAND|wxLEFT, 5 );
1453 this->Centre( wxBOTH );