15DIALOG_FOOTPRINT_PROPERTIES_BASE::DIALOG_FOOTPRINT_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 )
17 this->SetSizeHints( wxDefaultSize, wxDefaultSize );
21 m_NoteBook =
new wxNotebook(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
23 wxBoxSizer* m_PanelPropertiesBoxSizer;
24 m_PanelPropertiesBoxSizer =
new wxBoxSizer( wxVERTICAL );
26 wxStaticBoxSizer* sbSizerTexts;
27 sbSizerTexts =
new wxStaticBoxSizer(
new wxStaticBox(
m_PanelGeneral, wxID_ANY,
_(
"Fields") ), wxVERTICAL );
29 m_itemsGrid =
new WX_GRID( sbSizerTexts->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), 0 );
64 m_itemsGrid->SetColLabelAlignment( wxALIGN_CENTER, wxALIGN_CENTER );
68 m_itemsGrid->SetRowLabelValue( 0,
_(
"Reference designator") );
71 m_itemsGrid->SetRowLabelAlignment( wxALIGN_LEFT, wxALIGN_CENTER );
76 m_itemsGrid->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_CENTER );
79 sbSizerTexts->Add(
m_itemsGrid, 1, wxALL|wxBOTTOM|wxEXPAND, 5 );
81 wxBoxSizer* bButtonSize;
82 bButtonSize =
new wxBoxSizer( wxHORIZONTAL );
84 m_bpAdd =
new STD_BITMAP_BUTTON( sbSizerTexts->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
85 bButtonSize->Add(
m_bpAdd, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
88 bButtonSize->Add( 20, 0, 0, wxEXPAND, 5 );
90 m_bpDelete =
new STD_BITMAP_BUTTON( sbSizerTexts->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
91 bButtonSize->Add(
m_bpDelete, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
94 sbSizerTexts->Add( bButtonSize, 0, wxEXPAND, 5 );
97 m_PanelPropertiesBoxSizer->Add( sbSizerTexts, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
99 wxBoxSizer* bSizerProperties;
100 bSizerProperties =
new wxBoxSizer( wxHORIZONTAL );
104 wxStaticBoxSizer* sbSizer7;
105 sbSizer7 =
new wxStaticBoxSizer(
new wxStaticBox(
m_PanelGeneral, wxID_ANY,
_(
"Position") ), wxVERTICAL );
107 wxFlexGridSizer* fgSizerPos;
108 fgSizerPos =
new wxFlexGridSizer( 5, 3, 1, 0 );
109 fgSizerPos->AddGrowableCol( 1 );
110 fgSizerPos->AddGrowableRow( 2 );
111 fgSizerPos->SetFlexibleDirection( wxBOTH );
112 fgSizerPos->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
114 m_XPosLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"X:"), wxDefaultPosition, wxDefaultSize, 0 );
116 fgSizerPos->Add(
m_XPosLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
118 m_ModPositionX =
new wxTextCtrl( sbSizer7->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
119 fgSizerPos->Add(
m_ModPositionX, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
121 m_XPosUnit =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"unit"), wxDefaultPosition, wxDefaultSize, 0 );
123 fgSizerPos->Add(
m_XPosUnit, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 3 );
125 m_YPosLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Y:"), wxDefaultPosition, wxDefaultSize, 0 );
127 fgSizerPos->Add(
m_YPosLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
129 m_ModPositionY =
new wxTextCtrl( sbSizer7->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
130 fgSizerPos->Add(
m_ModPositionY, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP, 1 );
132 m_YPosUnit =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"unit"), wxDefaultPosition, wxDefaultSize, 0 );
134 fgSizerPos->Add(
m_YPosUnit, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 3 );
136 m_orientationLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
140 m_orientationCtrl =
new wxComboBox( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"0"), wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
145 fgSizerPos->Add(
m_orientationCtrl, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 2 );
148 fgSizerPos->Add( 0, 0, 1, wxEXPAND, 5 );
150 m_BoardSideLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Side:"), wxDefaultPosition, wxDefaultSize, 0 );
152 fgSizerPos->Add(
m_BoardSideLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
154 wxString m_BoardSideCtrlChoices[] = {
_(
"Front"),
_(
"Back") };
155 int m_BoardSideCtrlNChoices =
sizeof( m_BoardSideCtrlChoices ) /
sizeof( wxString );
156 m_BoardSideCtrl =
new wxChoice( sbSizer7->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_BoardSideCtrlNChoices, m_BoardSideCtrlChoices, 0 );
158 fgSizerPos->Add(
m_BoardSideCtrl, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxBOTTOM, 2 );
161 fgSizerPos->Add( 0, 0, 1, wxEXPAND, 5 );
163 m_heightLabel =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Height:"), wxDefaultPosition, wxDefaultSize, 0 );
165 m_heightLabel->SetToolTip(
_(
"Optional overall height specification for the footprint, independent from any 3D models.") );
167 fgSizerPos->Add(
m_heightLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
169 m_heightCtrl =
new wxTextCtrl( sbSizer7->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
170 m_heightCtrl->SetToolTip(
_(
"Optional overall height specification for the footprint, independent from any 3D models.") );
172 fgSizerPos->Add(
m_heightCtrl, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
174 m_heightUnits =
new wxStaticText( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"unit"), wxDefaultPosition, wxDefaultSize, 0 );
176 fgSizerPos->Add(
m_heightUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 3 );
179 sbSizer7->Add( fgSizerPos, 0, wxEXPAND, 5 );
181 m_cbLocked =
new wxCheckBox( sbSizer7->GetStaticBox(), wxID_ANY,
_(
"Locked"), wxDefaultPosition, wxDefaultSize, 0 );
185 bSizerLeft->Add( sbSizer7, 1, wxEXPAND|wxALL, 5 );
188 bSizerProperties->Add(
bSizerLeft, 1, wxEXPAND, 5 );
191 bSizerProperties->Add( 5, 0, 0, 0, 5 );
193 wxBoxSizer* bSizerMiddle;
194 bSizerMiddle =
new wxBoxSizer( wxVERTICAL );
196 wxStaticBoxSizer* sbAttributesSizer;
197 sbAttributesSizer =
new wxStaticBoxSizer(
new wxStaticBox(
m_PanelGeneral, wxID_ANY,
_(
"Fabrication Attributes") ), wxVERTICAL );
199 wxBoxSizer* bPartTypeSizer;
200 bPartTypeSizer =
new wxBoxSizer( wxHORIZONTAL );
202 m_componentTypeLabel =
new wxStaticText( sbAttributesSizer->GetStaticBox(), wxID_ANY,
_(
"Footprint type:"), wxDefaultPosition, wxDefaultSize, 0 );
204 bPartTypeSizer->Add(
m_componentTypeLabel, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
206 wxString m_componentTypeChoices[] = {
_(
"Through hole"),
_(
"SMD"),
_(
"Unspecified") };
207 int m_componentTypeNChoices =
sizeof( m_componentTypeChoices ) /
sizeof( wxString );
208 m_componentType =
new wxChoice( sbAttributesSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_componentTypeNChoices, m_componentTypeChoices, 0 );
210 bPartTypeSizer->Add(
m_componentType, 1, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
213 sbAttributesSizer->Add( bPartTypeSizer, 0, wxEXPAND, 5 );
216 sbAttributesSizer->Add( 0, 0, 1, wxEXPAND, 5 );
218 m_cbExcludeFromSim =
new wxCheckBox( sbAttributesSizer->GetStaticBox(), wxID_ANY,
_(
"Exclude from simulation"), wxDefaultPosition, wxDefaultSize, 0 );
221 m_boardOnly =
new wxCheckBox( sbAttributesSizer->GetStaticBox(), wxID_ANY,
_(
"Not in schematic"), wxDefaultPosition, wxDefaultSize, 0 );
222 sbAttributesSizer->Add(
m_boardOnly, 0, wxBOTTOM|wxLEFT|wxRIGHT, 5 );
224 m_cbDNP =
new wxCheckBox( sbAttributesSizer->GetStaticBox(), wxID_ANY,
_(
"Do not populate"), wxDefaultPosition, wxDefaultSize, 0 );
225 sbAttributesSizer->Add(
m_cbDNP, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
227 m_excludeFromBOM =
new wxCheckBox( sbAttributesSizer->GetStaticBox(), wxID_ANY,
_(
"Exclude from bill of materials"), wxDefaultPosition, wxDefaultSize, 0 );
230 m_excludeFromPosFiles =
new wxCheckBox( sbAttributesSizer->GetStaticBox(), wxID_ANY,
_(
"Exclude from position files"), wxDefaultPosition, wxDefaultSize, 0 );
234 bSizerMiddle->Add( sbAttributesSizer, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
237 bSizerProperties->Add( bSizerMiddle, 1, wxEXPAND|wxTOP, 5 );
239 wxBoxSizer* bSizerRight;
240 bSizerRight =
new wxBoxSizer( wxVERTICAL );
242 wxBoxSizer* bButtonsSizer;
243 bButtonsSizer =
new wxBoxSizer( wxVERTICAL );
255 bButtonsSizer->Add( 0, 15, 0, wxEXPAND, 5 );
257 m_button5 =
new wxButton(
m_PanelGeneral, wxID_ANY,
_(
"Edit Library Footprint..."), wxDefaultPosition, wxDefaultSize, 0 );
258 bButtonsSizer->Add(
m_button5, 0, wxEXPAND|wxALL, 5 );
261 bSizerRight->Add( bButtonsSizer, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 5 );
264 bSizerRight->Add( 0, 0, 1, wxEXPAND, 5 );
267 bSizerProperties->Add( bSizerRight, 1, wxEXPAND|wxTOP, 5 );
270 m_PanelPropertiesBoxSizer->Add( bSizerProperties, 0, wxEXPAND, 5 );
278 wxBoxSizer* bSizerPanelClearances;
279 bSizerPanelClearances =
new wxBoxSizer( wxVERTICAL );
281 wxStaticBoxSizer* sbSizerLocalProperties;
282 sbSizerLocalProperties =
new wxStaticBoxSizer(
new wxStaticBox(
m_PanelClearances, wxID_ANY,
_(
"Clearances") ), wxVERTICAL );
284 m_staticTextInfo =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"Leave values blank to use Board Setup values."), wxDefaultPosition, wxDefaultSize, 0 );
286 sbSizerLocalProperties->Add(
m_staticTextInfo, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
288 wxGridBagSizer* gbSizer2;
289 gbSizer2 =
new wxGridBagSizer( 4, 0 );
290 gbSizer2->SetFlexibleDirection( wxBOTH );
291 gbSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
292 gbSizer2->SetEmptyCellSize( wxSize( -1,15 ) );
294 m_NetClearanceLabel =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"Pad clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
296 m_NetClearanceLabel->SetToolTip(
_(
"This is the local net clearance for all pad of this footprint\nIf 0, the Netclass values are used\nThis value can be superseded by a pad local value.") );
298 gbSizer2->Add(
m_NetClearanceLabel, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
300 m_NetClearanceCtrl =
new wxTextCtrl( sbSizerLocalProperties->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
301 gbSizer2->Add(
m_NetClearanceCtrl, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
303 m_NetClearanceUnits =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"unit"), wxDefaultPosition, wxDefaultSize, 0 );
305 gbSizer2->Add(
m_NetClearanceUnits, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
307 m_SolderMaskMarginLabel =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"Solder mask expansion:"), wxDefaultPosition, wxDefaultSize, 0 );
309 m_SolderMaskMarginLabel->SetToolTip(
_(
"This is the local clearance between pads and the solder mask for this footprint.\nThis value can be superseded by a pad local value.\nIf 0, the global value is used.") );
311 gbSizer2->Add(
m_SolderMaskMarginLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
313 m_SolderMaskMarginCtrl =
new wxTextCtrl( sbSizerLocalProperties->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
314 gbSizer2->Add(
m_SolderMaskMarginCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
316 m_SolderMaskMarginUnits =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"unit"), wxDefaultPosition, wxDefaultSize, 0 );
318 gbSizer2->Add(
m_SolderMaskMarginUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
320 m_allowSolderMaskBridges =
new wxCheckBox( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"Allow bridged solder mask apertures between pads"), wxDefaultPosition, wxDefaultSize, 0 );
323 m_SolderPasteMarginLabel =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"Solder paste clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
325 m_SolderPasteMarginLabel->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.") );
327 gbSizer2->Add(
m_SolderPasteMarginLabel, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
329 m_SolderPasteMarginCtrl =
new wxTextCtrl( sbSizerLocalProperties->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
330 m_SolderPasteMarginCtrl->SetToolTip(
_(
"Local solder paste clearance for this footprint.\nEnter an absolute value (e.g., -0.1mm), a percentage (e.g., -5%), or both (e.g., -0.1mm - 5%).\nIf blank, the global value is used.") );
334 m_SolderPasteMarginUnits =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"unit"), wxDefaultPosition, wxDefaultSize, 0 );
336 gbSizer2->Add(
m_SolderPasteMarginUnits, wxGBPosition( 5, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
339 sbSizerLocalProperties->Add( gbSizer2, 1, wxEXPAND|wxTOP|wxBOTTOM, 10 );
341 wxFlexGridSizer* fgSizerClearances;
342 fgSizerClearances =
new wxFlexGridSizer( 5, 3, 5, 0 );
343 fgSizerClearances->AddGrowableCol( 1 );
344 fgSizerClearances->SetFlexibleDirection( wxBOTH );
345 fgSizerClearances->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
348 sbSizerLocalProperties->Add( fgSizerClearances, 0, wxTOP|wxBOTTOM, 10 );
350 m_staticTextInfoCopper =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY,
_(
"Note: solder mask and paste values are used only for pads on copper layers."), wxDefaultPosition, wxDefaultSize, 0 );
354 m_staticTextInfoPaste =
new wxStaticText( sbSizerLocalProperties->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
359 bSizerPanelClearances->Add( sbSizerLocalProperties, 0, wxEXPAND|wxALL, 10 );
361 wxStaticBoxSizer* sbSizerZoneConnection;
362 sbSizerZoneConnection =
new wxStaticBoxSizer(
new wxStaticBox(
m_PanelClearances, wxID_ANY,
_(
"Pad Connections") ), wxHORIZONTAL );
364 wxFlexGridSizer* fgSizer3;
365 fgSizer3 =
new wxFlexGridSizer( 0, 2, 0, 0 );
366 fgSizer3->SetFlexibleDirection( wxBOTH );
367 fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
369 m_staticText16 =
new wxStaticText( sbSizerZoneConnection->GetStaticBox(), wxID_ANY,
_(
"Pad connection to zones:"), wxDefaultPosition, wxDefaultSize, 0 );
371 fgSizer3->Add(
m_staticText16, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
373 wxString m_ZoneConnectionChoiceChoices[] = {
_(
"Use zone setting"),
_(
"Solid"),
_(
"Thermal relief"),
_(
"None") };
374 int m_ZoneConnectionChoiceNChoices =
sizeof( m_ZoneConnectionChoiceChoices ) /
sizeof( wxString );
375 m_ZoneConnectionChoice =
new wxChoice( sbSizerZoneConnection->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_ZoneConnectionChoiceNChoices, m_ZoneConnectionChoiceChoices, 0 );
379 m_jumperGroupsLabel =
new wxStaticText( sbSizerZoneConnection->GetStaticBox(), wxID_ANY,
_(
"Jumper groups:"), wxDefaultPosition, wxDefaultSize, 0 );
383 m_jumperGroupsText =
new wxStaticText( sbSizerZoneConnection->GetStaticBox(), wxID_ANY,
_(
"none"), wxDefaultPosition, wxDefaultSize, 0 );
388 sbSizerZoneConnection->Add( fgSizer3, 1, wxEXPAND, 5 );
391 bSizerPanelClearances->Add( sbSizerZoneConnection, 0, wxALL|wxEXPAND, 10 );
401 wxBoxSizer* bottomButtonsSizer;
402 bottomButtonsSizer =
new wxBoxSizer( wxHORIZONTAL );
404 m_libraryIDLabel =
new wxStaticText(
this, wxID_ANY,
_(
"Library link:"), wxDefaultPosition, wxDefaultSize, 0 );
406 bottomButtonsSizer->Add(
m_libraryIDLabel, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 2 );
408 m_tcLibraryID =
new wxTextCtrl(
this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxBORDER_NONE );
409 m_tcLibraryID->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) );
410 m_tcLibraryID->SetToolTip(
_(
"The library ID and footprint ID currently assigned. Use \"Change Footprint...\" to assign a different footprint.") );
412 bottomButtonsSizer->Add(
m_tcLibraryID, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
415 bottomButtonsSizer->Add( 10, 0, 0, 0, 5 );