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 );
90 wxGridBagSizer* gbSizerPadOrientation;
91 gbSizerPadOrientation =
new wxGridBagSizer( 4, 0 );
92 gbSizerPadOrientation->SetFlexibleDirection( wxBOTH );
93 gbSizerPadOrientation->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
97 gbSizerPadOrientation->Add(
m_shapeLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
99 wxString m_PadShapeSelectorChoices[] = {
_(
"Circular"),
_(
"Oval"),
_(
"Rectangular"),
_(
"Trapezoidal"),
_(
"Rounded rectangle"),
_(
"Chamfered rectangle"),
_(
"Chamfered with other corners rounded"),
_(
"Custom (circular base)"),
_(
"Custom (rectangular base)") };
100 int m_PadShapeSelectorNChoices =
sizeof( m_PadShapeSelectorChoices ) /
sizeof( wxString );
103 gbSizerPadOrientation->Add(
m_PadShapeSelector, wxGBPosition( 0, 1 ), wxGBSpan( 1, 5 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
129 wxString m_trapAxisCtrlChoices[] = {
_(
"Horizontal"),
_(
"Vertical") };
130 int m_trapAxisCtrlNChoices =
sizeof( m_trapAxisCtrlChoices ) /
sizeof( wxString );
131 m_trapAxisCtrl =
new wxChoice(
m_trapProps, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_trapAxisCtrlNChoices, m_trapAxisCtrlChoices, 0 );
148 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.") );
161 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.") );
178 wxFlexGridSizer* fgSizerChamferProps;
179 fgSizerChamferProps =
new wxFlexGridSizer( 0, 2, 4, 0 );
180 fgSizerChamferProps->AddGrowableCol( 1 );
181 fgSizerChamferProps->SetFlexibleDirection( wxBOTH );
182 fgSizerChamferProps->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
186 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.") );
190 wxBoxSizer* bSizer29;
191 bSizer29 =
new wxBoxSizer( wxHORIZONTAL );
201 fgSizerChamferProps->Add( bSizer29, 1, wxEXPAND, 5 );
209 wxGridSizer* gCornersSizer;
210 gCornersSizer =
new wxGridSizer( 0, 2, 3, 6 );
226 fgSizerChamferProps->Add( gCornersSizer, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
234 wxFlexGridSizer* fgMixedProps;
235 fgMixedProps =
new wxFlexGridSizer( 0, 2, 4, 0 );
236 fgMixedProps->AddGrowableCol( 1 );
237 fgMixedProps->SetFlexibleDirection( wxBOTH );
238 fgMixedProps->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
242 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.") );
246 wxBoxSizer* bSizer30;
247 bSizer30 =
new wxBoxSizer( wxHORIZONTAL );
257 fgMixedProps->Add( bSizer30, 1, wxEXPAND, 5 );
265 wxGridSizer* gMixedCornersSizer;
266 gMixedCornersSizer =
new wxGridSizer( 0, 2, 2, 6 );
282 fgMixedProps->Add( gMixedCornersSizer, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
286 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.") );
290 wxBoxSizer* bSizer31;
291 bSizer31 =
new wxBoxSizer( wxHORIZONTAL );
301 fgMixedProps->Add( bSizer31, 1, wxEXPAND, 5 );
309 gbSizerPadOrientation->Add(
m_shapePropsBook, wxGBPosition( 1, 0 ), wxGBSpan( 1, 6 ), wxEXPAND|wxLEFT, 25 );
313 gbSizerPadOrientation->Add(
m_sizeXLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
316 gbSizerPadOrientation->Add(
m_sizeXCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
320 gbSizerPadOrientation->Add(
m_sizeXUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
324 gbSizerPadOrientation->Add(
m_sizeYLabel, wxGBPosition( 2, 3 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
327 gbSizerPadOrientation->Add(
m_sizeYCtrl, wxGBPosition( 2, 4 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
331 gbSizerPadOrientation->Add(
m_sizeYUnits, wxGBPosition( 2, 5 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
335 gbSizerPadOrientation->Add(
m_PadOrientText, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
343 gbSizerPadOrientation->Add(
m_cb_padrotation, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
347 gbSizerPadOrientation->Add(
m_orientationUnits, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
350 gbSizerPadOrientation->AddGrowableCol( 0 );
359 m_gbSizerHole->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
365 wxString m_holeShapeCtrlChoices[] = {
_(
"Circular"),
_(
"Oval") };
366 int m_holeShapeCtrlNChoices =
sizeof( m_holeShapeCtrlChoices ) /
sizeof( wxString );
367 m_holeShapeCtrl =
new wxChoice(
m_panelGeneral, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_holeShapeCtrlNChoices, m_holeShapeCtrlChoices, 0 );
399 wxBoxSizer* bSizer35;
400 bSizer35 =
new wxBoxSizer( wxHORIZONTAL );
419 m_offsetCtrls->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
449 wxFlexGridSizer* fgSizerPadToDie;
450 fgSizerPadToDie =
new wxFlexGridSizer( 14, 3, 0, 0 );
451 fgSizerPadToDie->AddGrowableCol( 1 );
452 fgSizerPadToDie->SetFlexibleDirection( wxBOTH );
453 fgSizerPadToDie->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
455 wxBoxSizer* bSizer34;
456 bSizer34 =
new wxBoxSizer( wxHORIZONTAL );
459 bSizer34->Add(
m_padToDieOpt, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
463 bSizer34->Add(
m_padToDieLabel, 0, wxALIGN_CENTER_VERTICAL|wxRESERVE_SPACE_EVEN_IF_HIDDEN|wxRIGHT, 5 );
466 fgSizerPadToDie->Add( bSizer34, 0, wxEXPAND|wxRIGHT, 5 );
469 fgSizerPadToDie->Add(
m_padToDieCtrl, 0, wxEXPAND|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN, 5 );
473 fgSizerPadToDie->Add(
m_padToDieUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRESERVE_SPACE_EVEN_IF_HIDDEN|wxRIGHT, 5 );
483 wxStaticBoxSizer* m_LayersSizer;
484 m_LayersSizer =
new wxStaticBoxSizer(
new wxStaticBox(
m_panelGeneral, wxID_ANY, wxEmptyString ), wxVERTICAL );
488 m_FlippedWarningIcon =
new wxStaticBitmap( m_LayersSizer->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
493 m_staticText86 =
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Parent footprint on board is flipped.\nLayers will be reversed."), wxDefaultPosition, wxDefaultSize, 0 );
500 m_copperLayersLabel =
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Copper layers:"), wxDefaultPosition, wxDefaultSize, 0 );
504 wxArrayString m_rbCopperLayersSelChoices;
505 m_rbCopperLayersSel =
new wxChoice( m_LayersSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_rbCopperLayersSelChoices, 0 );
509 m_techLayersLabel =
new wxStaticText( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Technical layers:"), wxDefaultPosition, wxDefaultSize, 0 );
513 m_PadLayerAdhCmp =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front adhesive"), wxDefaultPosition, wxDefaultSize, 0 );
516 m_PadLayerAdhCu =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back adhesive"), wxDefaultPosition, wxDefaultSize, 0 );
519 m_PadLayerPateCmp =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front solder paste"), wxDefaultPosition, wxDefaultSize, 0 );
522 m_PadLayerPateCu =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back solder paste"), wxDefaultPosition, wxDefaultSize, 0 );
525 m_PadLayerSilkCmp =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front silk screen"), wxDefaultPosition, wxDefaultSize, 0 );
528 m_PadLayerSilkCu =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back silk screen"), wxDefaultPosition, wxDefaultSize, 0 );
531 m_PadLayerMaskCmp =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Front solder mask"), wxDefaultPosition, wxDefaultSize, 0 );
534 m_PadLayerMaskCu =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Back solder mask"), wxDefaultPosition, wxDefaultSize, 0 );
537 m_PadLayerDraft =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"Drafting notes"), wxDefaultPosition, wxDefaultSize, 0 );
540 m_PadLayerECO1 =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"E.C.O.1"), wxDefaultPosition, wxDefaultSize, 0 );
543 m_PadLayerECO2 =
new wxCheckBox( m_LayersSizer->GetStaticBox(), wxID_ANY,
_(
"E.C.O.2"), wxDefaultPosition, wxDefaultSize, 0 );
551 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 pad is useful to specify test points in Gerber files\nHeatsink pad specify a thermal pad\nCastellated specify castellated through hole pads on a board edge\nThese properties are specified in Gerber X2 files.") );
558 wxString m_choiceFabPropertyChoices[] = {
_(
"None"),
_(
"BGA pad"),
_(
"Fiducial, local to footprint"),
_(
"Fiducial, global to board"),
_(
"Test point pad"),
_(
"Heatsink pad"),
_(
"Castellated pad (through hole only)") };
559 int m_choiceFabPropertyNChoices =
sizeof( m_choiceFabPropertyChoices ) /
sizeof( wxString );
573 wxBoxSizer* bSizerPanelClearance;
574 bSizerPanelClearance =
new wxBoxSizer( wxVERTICAL );
576 wxBoxSizer* bSizerClearance;
577 bSizerClearance =
new wxBoxSizer( wxVERTICAL );
579 wxStaticBoxSizer* sbClearancesSizer;
580 sbClearancesSizer =
new wxStaticBoxSizer(
new wxStaticBox(
m_localSettingsPanel, wxID_ANY,
_(
"Clearance Overrides") ), wxVERTICAL );
582 wxStaticText* m_staticTextHint;
583 m_staticTextHint =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Set values to 0 to use parent footprint or netclass values."), wxDefaultPosition, wxDefaultSize, 0 );
584 m_staticTextHint->Wrap( -1 );
585 sbClearancesSizer->Add( m_staticTextHint, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
587 m_staticTextInfoPosValue =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Positive clearance means area bigger than the pad (usual for mask clearance)."), wxDefaultPosition, wxDefaultSize, 0 );
591 m_staticTextInfoNegVal =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Negative clearance means area smaller than the pad (usual for paste clearance)."), wxDefaultPosition, wxDefaultSize, 0 );
595 wxFlexGridSizer* fgClearancesGridSizer;
596 fgClearancesGridSizer =
new wxFlexGridSizer( 4, 3, 4, 0 );
597 fgClearancesGridSizer->AddGrowableCol( 1 );
598 fgClearancesGridSizer->SetFlexibleDirection( wxBOTH );
599 fgClearancesGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
601 m_clearanceLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Pad clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
603 m_clearanceLabel->SetToolTip(
_(
"This is the local net clearance for this pad.\nIf 0, the footprint local value or the Netclass value is used.") );
605 fgClearancesGridSizer->Add(
m_clearanceLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
607 m_clearanceCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
608 fgClearancesGridSizer->Add(
m_clearanceCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
610 m_clearanceUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
612 fgClearancesGridSizer->Add(
m_clearanceUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
614 m_maskMarginLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Solder mask expansion:"), wxDefaultPosition, wxDefaultSize, 0 );
616 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.") );
618 fgClearancesGridSizer->Add(
m_maskMarginLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
620 m_maskMarginCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
621 fgClearancesGridSizer->Add(
m_maskMarginCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 15 );
623 m_maskMarginUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
625 fgClearancesGridSizer->Add(
m_maskMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
627 m_pasteMarginLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Solder paste absolute clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
629 m_pasteMarginLabel->SetToolTip(
_(
"This is the local clearance between this pad and the solder paste.\nIf 0, the footprint value or the global value is used.\nThe final clearance value is the sum of this value and the clearance value ratio.\nA negative value means a smaller mask size than pad size.") );
631 fgClearancesGridSizer->Add(
m_pasteMarginLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
633 m_pasteMarginCtrl =
new wxTextCtrl( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
634 fgClearancesGridSizer->Add(
m_pasteMarginCtrl, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
636 m_pasteMarginUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
638 fgClearancesGridSizer->Add(
m_pasteMarginUnits, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
640 m_pasteMarginRatioLabel =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"Solder paste relative clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
642 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.") );
649 m_pasteMarginRatioUnits =
new wxStaticText( sbClearancesSizer->GetStaticBox(), wxID_ANY,
_(
"%"), wxDefaultPosition, wxDefaultSize, 0 );
654 sbClearancesSizer->Add( fgClearancesGridSizer, 0, wxTOP|wxBOTTOM, 10 );
656 m_nonCopperWarningBook =
new wxSimplebook( sbClearancesSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
658 notePanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
659 wxBoxSizer* bNoteSizer;
660 bNoteSizer =
new wxBoxSizer( wxVERTICAL );
662 m_nonCopperNote =
new wxStaticText( notePanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
666 m_staticTextInfoPaste =
new wxStaticText( notePanel, wxID_ANY,
_(
"Note: solder paste clearances (absolute and relative) are added to determine the final clearance."), wxDefaultPosition, wxDefaultSize, 0 );
671 notePanel->SetSizer( bNoteSizer );
673 bNoteSizer->Fit( notePanel );
675 wxPanel* warningPanel;
676 warningPanel =
new wxPanel(
m_nonCopperWarningBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
677 wxBoxSizer* bWarningSizer;
678 bWarningSizer =
new wxBoxSizer( wxHORIZONTAL );
680 bWarningSizer->SetMinSize( wxSize( -1,50 ) );
681 m_nonCopperWarningIcon =
new wxStaticBitmap( warningPanel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize( 48,48 ), 0 );
686 m_nonCopperWarningText =
new wxStaticText( warningPanel, wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
691 warningPanel->SetSizer( bWarningSizer );
692 warningPanel->Layout();
693 bWarningSizer->Fit( warningPanel );
699 bSizerClearance->Add( sbClearancesSizer, 0, wxALL|wxEXPAND, 5 );
701 wxBoxSizer* bSizerLower;
702 bSizerLower =
new wxBoxSizer( wxHORIZONTAL );
706 wxFlexGridSizer* fgSizerCopperZonesOpts;
707 fgSizerCopperZonesOpts =
new wxFlexGridSizer( 0, 2, 0, 0 );
708 fgSizerCopperZonesOpts->AddGrowableCol( 1 );
709 fgSizerCopperZonesOpts->SetFlexibleDirection( wxBOTH );
710 fgSizerCopperZonesOpts->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
714 fgSizerCopperZonesOpts->Add(
m_staticText40, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
716 wxString m_ZoneConnectionChoiceChoices[] = {
_(
"From parent footprint"),
_(
"Solid"),
_(
"Thermal relief"),
_(
"None") };
717 int m_ZoneConnectionChoiceNChoices =
sizeof( m_ZoneConnectionChoiceChoices ) /
sizeof( wxString );
724 fgSizerCopperZonesOpts->Add(
m_staticTextcps, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
726 wxString m_ZoneCustomPadShapeChoices[] = {
_(
"Pad shape"),
_(
"Pad convex hull") };
727 int m_ZoneCustomPadShapeNChoices =
sizeof( m_ZoneCustomPadShapeChoices ) /
sizeof( wxString );
730 fgSizerCopperZonesOpts->Add(
m_ZoneCustomPadShape, 1, wxTOP|wxBOTTOM|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
738 wxStaticBoxSizer* sbSizerThermalReliefs;
739 sbSizerThermalReliefs =
new wxStaticBoxSizer(
new wxStaticBox(
m_localSettingsPanel, wxID_ANY,
_(
"Thermal Relief Overrides") ), wxVERTICAL );
741 wxFlexGridSizer* fgSizerThermalReliefs;
742 fgSizerThermalReliefs =
new wxFlexGridSizer( 0, 3, 0, 0 );
743 fgSizerThermalReliefs->AddGrowableCol( 1 );
744 fgSizerThermalReliefs->SetFlexibleDirection( wxBOTH );
745 fgSizerThermalReliefs->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
747 m_thermalGapLabel =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"Relief gap:"), wxDefaultPosition, wxDefaultSize, 0 );
749 fgSizerThermalReliefs->Add(
m_thermalGapLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
751 m_thermalGapCtrl =
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
752 fgSizerThermalReliefs->Add(
m_thermalGapCtrl, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxEXPAND, 5 );
754 m_thermalGapUnits =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
756 fgSizerThermalReliefs->Add(
m_thermalGapUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
758 m_spokeWidthLabel =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"Spoke width:"), wxDefaultPosition, wxDefaultSize, 0 );
760 fgSizerThermalReliefs->Add(
m_spokeWidthLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 5 );
762 m_spokeWidthCtrl =
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
763 fgSizerThermalReliefs->Add(
m_spokeWidthCtrl, 0, wxEXPAND|wxLEFT|wxTOP|wxALIGN_CENTER_VERTICAL, 5 );
765 m_spokeWidthUnits =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"mm"), wxDefaultPosition, wxDefaultSize, 0 );
767 fgSizerThermalReliefs->Add(
m_spokeWidthUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
769 m_spokeAngleLabel =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"Spoke angle:"), wxDefaultPosition, wxDefaultSize, 0 );
771 fgSizerThermalReliefs->Add(
m_spokeAngleLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
773 m_spokeAngleCtrl =
new wxTextCtrl( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
774 fgSizerThermalReliefs->Add(
m_spokeAngleCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
776 m_spokeAngleUnits =
new wxStaticText( sbSizerThermalReliefs->GetStaticBox(), wxID_ANY,
_(
"deg"), wxDefaultPosition, wxDefaultSize, 0 );
778 fgSizerThermalReliefs->Add(
m_spokeAngleUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 );
781 sbSizerThermalReliefs->Add( fgSizerThermalReliefs, 1, wxEXPAND, 5 );
784 bSizerLower->Add( sbSizerThermalReliefs, 1, wxEXPAND|wxALL, 5 );
787 bSizerClearance->Add( bSizerLower, 1, wxEXPAND, 5 );
790 bSizerPanelClearance->Add( bSizerClearance, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
800 wxBoxSizer* bSizerAboveList;
801 bSizerAboveList =
new wxBoxSizer( wxHORIZONTAL );
817 wxBoxSizer* bSizerButtons;
818 bSizerButtons =
new wxBoxSizer( wxVERTICAL );
820 wxBoxSizer* bSizerButtonsUpper;
821 bSizerButtonsUpper =
new wxBoxSizer( wxHORIZONTAL );
830 bSizerButtonsUpper->Add(
m_buttonDup, 0, wxALL, 5 );
836 bSizerButtonsUpper->Add( 0, 0, 1, wxEXPAND, 5 );
839 bSizerButtonsUpper->Add(
m_buttonDel, 0, wxALL, 5 );
842 bSizerButtons->Add( bSizerButtonsUpper, 0, wxEXPAND, 5 );
853 bSizerUpper->Add(
m_notebook, 0, wxEXPAND|wxTOP|wxBOTTOM, 12 );
855 wxBoxSizer* bSizerDisplayPad;
856 bSizerDisplayPad =
new wxBoxSizer( wxVERTICAL );
858 bSizerDisplayPad->SetMinSize( wxSize( 290,-1 ) );
860 bSizerDisplayPad->Add( 0, 25, 0, wxEXPAND, 5 );
862 m_stackupImagesBook =
new wxSimplebook(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_SIMPLE );
864 wxBoxSizer* page0Sizer;
865 page0Sizer =
new wxBoxSizer( wxVERTICAL );
867 m_stackupImage0 =
new wxStaticBitmap(
page0, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
868 page0Sizer->Add(
m_stackupImage0, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
871 page0->SetSizer( page0Sizer );
873 page0Sizer->Fit(
page0 );
876 wxBoxSizer* page1Sizer;
877 page1Sizer =
new wxBoxSizer( wxVERTICAL );
879 m_stackupImage1 =
new wxStaticBitmap(
page1, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
880 page1Sizer->Add(
m_stackupImage1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
883 page1->SetSizer( page1Sizer );
885 page1Sizer->Fit(
page1 );
888 wxBoxSizer* page2Sizer;
889 page2Sizer =
new wxBoxSizer( wxVERTICAL );
891 m_stackupImage2 =
new wxStaticBitmap(
page2, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
892 page2Sizer->Add(
m_stackupImage2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
895 page2->SetSizer( page2Sizer );
897 page2Sizer->Fit(
page2 );
900 wxBoxSizer* page3Sizer;
901 page3Sizer =
new wxBoxSizer( wxVERTICAL );
904 page3->SetSizer( page3Sizer );
906 page3Sizer->Fit(
page3 );
909 wxBoxSizer* page4Sizer;
910 page4Sizer =
new wxBoxSizer( wxVERTICAL );
912 m_stackupImage4 =
new wxStaticBitmap(
page4, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
913 page4Sizer->Add(
m_stackupImage4, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
916 page4->SetSizer( page4Sizer );
918 page4Sizer->Fit(
page4 );
921 wxBoxSizer* page5Sizer;
922 page5Sizer =
new wxBoxSizer( wxVERTICAL );
924 m_stackupImage5 =
new wxStaticBitmap(
page5, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
925 page5Sizer->Add(
m_stackupImage5, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
928 page5->SetSizer( page5Sizer );
930 page5Sizer->Fit(
page5 );
933 wxBoxSizer* page6Sizer;
934 page6Sizer =
new wxBoxSizer( wxVERTICAL );
936 m_stackupImage6 =
new wxStaticBitmap(
page6, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
937 page6Sizer->Add(
m_stackupImage6, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
940 page6->SetSizer( page6Sizer );
942 page6Sizer->Fit(
page6 );
945 wxBoxSizer* page7Sizer;
946 page7Sizer =
new wxBoxSizer( wxVERTICAL );
948 m_stackupImage7 =
new wxStaticBitmap(
page7, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 );
949 page7Sizer->Add(
m_stackupImage7, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
952 page7->SetSizer( page7Sizer );
954 page7Sizer->Fit(
page7 );
960 bSizerDisplayPad->Add( 0, 4, 0, wxEXPAND, 5 );
962 m_boardViewPanel =
new wxPanel(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
973 bSizerUpper->Add( bSizerDisplayPad, 1, wxEXPAND|wxTOP, 5 );
976 m_MainSizer->Add( bSizerUpper, 1, wxEXPAND|wxLEFT, 8 );
978 wxBoxSizer* bottomSizer;
979 bottomSizer =
new wxBoxSizer( wxHORIZONTAL );
981 m_parentInfo =
new wxStaticText(
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
983 bottomSizer->Add(
m_parentInfo, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxLEFT, 8 );
986 bottomSizer->Add( 20, 0, 1, wxEXPAND, 5 );
988 m_cbShowPadOutline =
new wxCheckBox(
this, wxID_ANY,
_(
"Preview pad in sketch mode"), wxDefaultPosition, wxDefaultSize, 0 );
989 bottomSizer->Add(
m_cbShowPadOutline, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
992 bottomSizer->Add( 40, 0, 0, wxEXPAND, 5 );
1001 bottomSizer->Add(
m_sdbSizer, 0, wxBOTTOM|wxEXPAND|wxTOP, 5 );
1004 m_MainSizer->Add( bottomSizer, 0, wxEXPAND|wxLEFT, 5 );
1011 this->Centre( wxBOTH );
wxStaticText * m_staticTextInfoNegVal
wxStaticText * m_techLayersLabel
wxStaticText * m_staticTextInfoPaste
wxCheckBox * m_cbBottomLeft
virtual void PadOrientEvent(wxCommandEvent &event)
virtual void onChangePadMode(wxCommandEvent &event)
wxCheckBox * m_cbBottomRight1
wxStaticText * m_staticTextChamferCorner1
wxStaticText * m_padToDieUnits
wxStaticText * m_sizeYUnits
wxStaticText * m_offsetXUnits
wxStaticBoxSizer * m_sbSizerZonesSettings
wxStaticText * m_posYLabel
wxCheckBox * m_PadLayerSilkCu
wxCheckBox * m_cbTopRight1
wxPanel * m_boardViewPanel
wxStaticBitmap * m_stackupImage1
wxCheckBox * m_PadLayerSilkCmp
wxStaticText * m_offsetShapeOptLabel
wxCheckBox * m_PadLayerMaskCu
wxChoice * m_ZoneConnectionChoice
wxStaticText * m_spokeAngleUnits
wxStaticBitmap * m_stackupImage2
wxStaticText * m_staticTextcps
wxStaticText * m_trapDeltaLabel
wxFlexGridSizer * m_offsetCtrls
wxCheckBox * m_cbBottomLeft1
wxButton * m_buttonGeometry
wxTextCtrl * m_offsetYCtrl
virtual void OnInitDialog(wxInitDialogEvent &event)
wxCheckBox * m_PadLayerDraft
wxStaticText * m_thermalGapLabel
wxStaticText * m_cornerRadiusUnits
wxStaticText * m_mixedCornerRatioUnits
wxSimplebook * m_shapePropsBook
wxStaticText * m_chamferRatioUnits
wxCheckBox * m_PadLayerAdhCu
wxStaticLine * m_staticline5
wxStaticText * m_trapDeltaUnits
virtual void onEditPrimitive(wxCommandEvent &event)
wxBoxSizer * m_LeftBoxSizer
wxStdDialogButtonSizer * m_sdbSizer
wxStaticText * m_parentInfo
wxStaticBitmap * m_stackupImage4
wxTextCtrl * m_clearanceCtrl
wxStaticText * m_sizeXUnits
wxStaticText * m_holeXUnits
wxStaticText * m_pasteMarginUnits
wxStaticText * m_spokeWidthLabel
wxStaticText * m_copperLayersLabel
wxGridBagSizer * m_gbSizerHole
wxStaticText * m_offsetYLabel
wxStaticLine * m_staticline6
wxChoice * m_PadShapeSelector
wxCheckBox * m_PadLayerECO2
wxStaticText * m_holeYUnits
wxStaticText * m_maskMarginLabel
wxButton * m_buttonEditShape
wxChoice * m_holeShapeCtrl
wxStaticText * m_padNumLabel
wxStaticText * m_staticTextFabProperty
wxTextCtrl * m_offsetXCtrl
wxStaticText * m_holeYLabel
wxStaticText * m_staticTextChamferCorner
TEXT_CTRL_EVAL * m_mixedCornerRatioCtrl
virtual void onDeletePrimitive(wxCommandEvent &event)
wxChoice * m_ZoneCustomPadShape
wxSimplebook * m_stackupImagesBook
wxButton * m_buttonAddShape
wxStaticText * m_spokeWidthUnits
wxStaticText * m_offsetXLabel
wxCheckBox * m_cbTopRight
wxCheckBox * m_PadLayerPateCu
wxStaticText * m_clearanceLabel
virtual void OnPadToDieCheckbox(wxCommandEvent &event)
virtual void OnUpdateUINonCopperWarning(wxUpdateUIEvent &event)
wxTextCtrl * m_thermalGapCtrl
wxStaticText * m_holeShapeLabel
wxCheckBox * m_PadLayerAdhCmp
virtual void OnCancel(wxCommandEvent &event)
wxCheckBox * m_padToDieOpt
wxStaticBitmap * m_stackupImage0
wxStaticText * m_nonCopperNote
NET_SELECTOR * m_padNetSelector
virtual void PadTypeSelected(wxCommandEvent &event)
wxTextCtrl * m_spokeAngleCtrl
wxBoxSizer * m_FlippedWarningSizer
wxStaticText * m_spokeAngleLabel
wxTextCtrl * m_padNumCtrl
wxStaticBitmap * m_stackupImage7
wxTextCtrl * m_spokeWidthCtrl
wxTextCtrl * m_cornerRadiusCtrl
virtual void OnPadShapeSelection(wxCommandEvent &event)
wxCheckBox * m_cbBottomRight
wxChoice * m_trapAxisCtrl
wxStaticText * m_offsetYUnits
wxStaticText * m_chamferRatioLabel
wxStaticBitmap * m_stackupImage6
wxStaticText * m_padToDieLabel
wxCheckBox * m_cbTopLeft1
wxStaticText * m_mixedCornerRatioLabel
TEXT_CTRL_EVAL * m_chamferRatioCtrl
wxStaticText * m_posXUnits
wxTextCtrl * m_pasteMarginCtrl
wxCheckBox * m_PadLayerPateCmp
wxStaticText * m_mixedChamferRatioUnits
wxStaticText * m_pasteMarginRatioLabel
wxStaticBitmap * m_FlippedWarningIcon
virtual void OnUpdateUI(wxUpdateUIEvent &event)
wxTextCtrl * m_trapDeltaCtrl
~DIALOG_PAD_PROPERTIES_BASE()
wxListView * m_listCtrlPrimitives
wxStaticText * m_staticTextPrimitivesList
TEXT_CTRL_EVAL * m_mixedChamferRatioCtrl
virtual void onCornerRadiusChange(wxCommandEvent &event)
wxStaticText * m_sizeYLabel
virtual void OnValuesChanged(wxCommandEvent &event)
DIALOG_PAD_PROPERTIES_BASE(wxWindow *parent, wxWindowID id=wxID_DIALOG_EDIT_PAD, const wxString &title=_("Pad Properties"), const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxSize(-1,-1), long style=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)
virtual void OnOffsetCheckbox(wxCommandEvent &event)
wxStaticText * m_shapeLabel
wxStaticText * m_mixedChamferRatioLabel
wxStaticText * m_nonCopperWarningText
wxStaticText * m_orientationUnits
virtual void onAddPrimitive(wxCommandEvent &event)
wxStaticText * m_holeXLabel
wxStaticBitmap * m_stackupImage5
wxCheckBox * m_PadLayerMaskCmp
wxStaticText * m_posYUnits
wxComboBox * m_cb_padrotation
wxStaticText * m_cornerRatioLabel
wxStaticText * m_padTypeLabel
virtual void onCornerSizePercentChange(wxCommandEvent &event)
wxStaticText * m_sizeXLabel
wxStaticText * m_cornerRadiusLabel
wxButton * m_sdbSizerCancel
TEXT_CTRL_EVAL * m_cornerRatioCtrl
wxStaticText * m_staticText40
virtual void OnDrillShapeSelected(wxCommandEvent &event)
virtual void OnSetLayers(wxCommandEvent &event)
wxChoice * m_choiceFabProperty
wxFlexGridSizer * fgSizerTrapProps
wxCheckBox * m_offsetShapeOpt
wxStaticText * m_maskMarginUnits
wxStaticText * m_PadOrientText
wxStaticBitmap * m_nonCopperWarningIcon
wxBoxSizer * m_padPreviewSizer
wxStaticText * m_pasteMarginRatioUnits
wxStaticText * m_staticText86
wxBoxSizer * m_middleBoxSizer
wxStaticText * m_cornerRatioUnits
wxBoxSizer * m_bSizerPanelPrimitives
virtual void onPrimitiveDClick(wxMouseEvent &event)
wxStaticText * m_clearanceUnits
wxStaticText * m_posXLabel
virtual void OnPrimitiveSelection(wxListEvent &event)
wxStaticLine * m_staticline71
wxCheckBox * m_cbShowPadOutline
wxStaticText * m_staticTextInfoPosValue
wxStaticText * m_padNetLabel
wxStaticLine * m_staticline7
wxCheckBox * m_PadLayerECO1
virtual void OnSetCopperLayers(wxCommandEvent &event)
virtual void onGeometryTransform(wxCommandEvent &event)
wxTextCtrl * m_padToDieCtrl
wxSimplebook * m_nonCopperWarningBook
TEXT_CTRL_EVAL * m_pasteMarginRatioCtrl
wxPanel * m_panelCustomShapePrimitives
virtual void onDuplicatePrimitive(wxCommandEvent &event)
wxFlexGridSizer * fgSizerRoundingProps
wxChoice * m_rbCopperLayersSel
wxStaticText * m_staticTextPrimitiveListWarning
wxPanel * m_localSettingsPanel
wxStaticText * m_pasteMarginLabel
wxTextCtrl * m_maskMarginCtrl
wxStaticText * m_thermalGapUnits
wxStaticText * m_trapAxisLabel
Dialog helper object to sit in the inheritance tree between wxDialog and any class written by wxFormB...
wxTextCtrl wrapper to handle math expression evaluation.