KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
dialog_pin_properties.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2010 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#include <bitmaps.h>
26#include <sch_painter.h>
27#include <symbol_edit_frame.h>
28#include <sch_pin.h>
30#include <confirm.h>
31#include <kiplatform/ui.h>
33#include <widgets/wx_grid.h>
34#include <grid_tricks.h>
37#include <wx/hyperlink.h>
39
40class ALT_PIN_DATA_MODEL : public wxGridTableBase, public std::vector<SCH_PIN::ALT>
41{
42public:
44 {
45 }
46
47 int GetNumberRows() override { return (int) size(); }
48 int GetNumberCols() override { return COL_COUNT; }
49
50 wxString GetColLabelValue( int aCol ) override
51 {
52 switch( aCol )
53 {
54 case COL_NAME: return _( "Alternate Pin Name" );
55 case COL_TYPE: return _( "Electrical Type" );
56 case COL_SHAPE: return _( "Graphic Style" );
57 default: wxFAIL; return wxEmptyString;
58 }
59 }
60
61 bool IsEmptyCell( int row, int col ) override
62 {
63 return false; // don't allow adjacent cell overflow, even if we are actually empty
64 }
65
66 wxString GetValue( int aRow, int aCol ) override
67 {
68 switch( aCol )
69 {
70 case COL_NAME: return at( aRow ).m_Name;
71 case COL_TYPE: return PinTypeNames()[static_cast<int>( at( aRow ).m_Type )];
72 case COL_SHAPE: return PinShapeNames()[static_cast<int>( at( aRow ).m_Shape )];
73 default: wxFAIL; return wxEmptyString;
74 }
75 }
76
77 void SetValue( int aRow, int aCol, const wxString &aValue ) override
78 {
79 switch( aCol )
80 {
81 case COL_NAME:
82 at( aRow ).m_Name = aValue;
83 break;
84
85 case COL_TYPE:
86 if( PinTypeNames().Index( aValue ) != wxNOT_FOUND )
87 at( aRow ).m_Type = (ELECTRICAL_PINTYPE) PinTypeNames().Index( aValue );
88
89 break;
90
91 case COL_SHAPE:
92 if( PinShapeNames().Index( aValue ) != wxNOT_FOUND )
93 at( aRow ).m_Shape = (GRAPHIC_PINSHAPE) PinShapeNames().Index( aValue );
94
95 break;
96
97 default:
98 wxFAIL;
99 break;
100 }
101 }
102
103 void AppendRow( const SCH_PIN::ALT& aAlt )
104 {
105 push_back( aAlt );
106
107 if ( GetView() )
108 {
109 wxGridTableMessage msg( this, wxGRIDTABLE_NOTIFY_ROWS_APPENDED, 1 );
110 GetView()->ProcessTableMessage( msg );
111 }
112 }
113
114 void RemoveRow( int aRow )
115 {
116 erase( begin() + aRow );
117
118 if ( GetView() )
119 {
120 wxGridTableMessage msg( this, wxGRIDTABLE_NOTIFY_ROWS_DELETED, aRow, 1 );
121 GetView()->ProcessTableMessage( msg );
122 }
123 }
124};
125
126
128 bool aFocusPinNumber ) :
130 m_frame( parent ),
131 m_pin( aPin ),
132 m_posX( parent, m_posXLabel, m_posXCtrl, m_posXUnits ),
133 m_posY( parent, m_posYLabel, m_posYCtrl, m_posYUnits ),
134 m_pinLength( parent, m_pinLengthLabel, m_pinLengthCtrl, m_pinLengthUnits ),
135 m_nameSize( parent, m_nameSizeLabel, m_nameSizeCtrl, m_nameSizeUnits ),
136 m_numberSize( parent, m_numberSizeLabel, m_numberSizeCtrl, m_numberSizeUnits ),
137 m_delayedFocusRow( -1 ),
138 m_delayedFocusColumn( -1 ),
139 m_initialized( false )
140{
141 // Create a dummy symbol with a single pin for the preview widget:
142 m_dummyParent = new LIB_SYMBOL( *static_cast<LIB_SYMBOL*>( m_pin->GetParentSymbol() ) );
143
144 // Move everything in the copied symbol to unit 1; we'll use unit 2 for the dummy pin:
145 m_dummyParent->SetUnitCount( 2, false );
146 m_dummyParent->RunOnChildren( [&]( SCH_ITEM* child )
147 {
148 child->SetUnit( 1 );
149 },
150 RECURSE_MODE::NO_RECURSE );
151
152 m_dummyPin = new SCH_PIN( *m_pin );
153 m_dummyPin->SetUnit( 2 );
155
158
161
162 m_previewWidget->SetLayoutDirection( wxLayout_LeftToRight );
164
165 wxBoxSizer* previewSizer = new wxBoxSizer( wxHORIZONTAL );
166 previewSizer->Add( m_previewWidget, 1, wxEXPAND, 5 );
167 m_panelShowPin->SetSizer( previewSizer );
168
169 const wxArrayString& orientationNames = PinOrientationNames();
170 const std::vector<BITMAPS>& orientationIcons = PinOrientationIcons();
171
172 for ( unsigned ii = 0; ii < orientationNames.GetCount(); ii++ )
173 {
174 m_choiceOrientation->Insert( orientationNames[ii], KiBitmapBundle( orientationIcons[ii] ),
175 ii );
176 }
177
178 // We can't set the tab order through wxWidgets due to shortcomings in their mnemonics
179 // implementation on MSW
180 m_tabOrder = {
196 };
197
198 // Default alternates turndown to whether or not alternates exist, or if we've had it open
199 // before
200 m_alternatesTurndown->Collapse( m_pin->GetAlternates().size() == 0
202
203 // wxwidgets doesn't call the OnCollapseChange even at init, so we update this value if
204 // the alternates pane defaults to open
205 if ( m_pin->GetAlternates().size() > 0 )
207
209
210 // Save original columns widths so we can do proportional sizing.
211 for( int i = 0; i < COL_COUNT; ++i )
212 m_originalColWidths[ i ] = m_alternatesGrid->GetColSize( i );
213
214 // Give a bit more room for combobox editors
215 m_alternatesGrid->SetDefaultRowSize( m_alternatesGrid->GetDefaultRowSize() + 4 );
216
218 m_alternatesGrid->PushEventHandler( new GRID_TRICKS( m_alternatesGrid,
219 [this]( wxCommandEvent& aEvent )
220 {
221 OnAddAlternate( aEvent );
222 } ) );
223
225 {
226 m_alternatesTurndown->Collapse();
227 m_alternatesTurndown->Disable();
228 m_alternatesTurndown->SetToolTip( _( "Alternate pin assignments are not available for "
229 "De Morgan symbols." ) );
230 }
231
232 // Set special attributes
233 wxGridCellAttr* attr;
234
235 attr = new wxGridCellAttr;
236 attr->SetRenderer( new GRID_CELL_ICON_TEXT_RENDERER( PinTypeIcons(), PinTypeNames() ) );
237 attr->SetEditor( new GRID_CELL_ICON_TEXT_POPUP( PinTypeIcons(), PinTypeNames() ) );
238 m_alternatesGrid->SetColAttr( COL_TYPE, attr );
239
240 attr = new wxGridCellAttr;
241 attr->SetRenderer( new GRID_CELL_ICON_TEXT_RENDERER( PinShapeIcons(), PinShapeNames() ) );
242 attr->SetEditor( new GRID_CELL_ICON_TEXT_POPUP( PinShapeIcons(), PinShapeNames() ) );
243 m_alternatesGrid->SetColAttr( COL_SHAPE, attr );
244
245 m_addAlternate->SetBitmap( KiBitmapBundle( BITMAPS::small_plus ) );
246 m_deleteAlternate->SetBitmap( KiBitmapBundle( BITMAPS::small_trash ) );
247 m_addAlternate->GetParent()->Layout();
248
250
251 SetInitialFocus( aFocusPinNumber ? m_textPinNumber : m_textPinName );
252
253 // Now all widgets have the size fixed, call FinishDialogSettings
255
256 // On some window managers (Unity, XFCE) the dialog is not always raised, depending on
257 // how it is run.
258 Raise();
259
260 m_initialized = true;
261}
262
263
265{
266 delete m_dummyParent;
267
268 // Prevents crash bug in wxGrid's d'tor
270
271 // Delete the GRID_TRICKS.
272 m_alternatesGrid->PopEventHandler( true );
273}
274
275
277{
278 if( !DIALOG_SHIM::TransferDataToWindow() )
279 return false;
280
282
286 m_textPinName->SetValue( m_pin->GetName() );
290 m_textPinNumber->SetValue( m_pin->GetNumber() );
295 && m_pin->GetUnit() == 0 );
297 m_checkShow->SetValue( m_pin->IsVisible() );
298
300
301 wxString commonUnitsToolTip;
302
304 {
305 wxHyperlinkCtrl* button = new wxHyperlinkCtrl( m_infoBar, wxID_ANY,
306 _( "Exit sync pins mode" ),
307 wxEmptyString );
308
309 button->Bind( wxEVT_COMMAND_HYPERLINK,
310 std::function<void( wxHyperlinkEvent& aEvent )>(
311 [&]( wxHyperlinkEvent& aEvent )
312 {
313 m_frame->m_SyncPinEdit = false;
315 } ) );
316
318 m_infoBar->AddButton( button );
320
321 commonUnitsToolTip = _( "Synchronized pins mode is enabled.\n"
322 "Similar pins will be edited regardless of this option." );
323 }
324 else
325 {
326 commonUnitsToolTip = _( "If checked, this pin will exist in all units." );
327 }
328
329 if( !m_pin->GetParentSymbol()->IsMulti() )
330 commonUnitsToolTip = _( "This symbol only has one unit. This control has no effect." );
331
332 m_checkApplyToAllParts->SetToolTip( commonUnitsToolTip );
333
334 for( const std::pair<const wxString, SCH_PIN::ALT>& alt : m_pin->GetAlternates() )
335 m_alternatesDataModel->AppendRow( alt.second );
336
337 return true;
338}
339
340
342{
344 return false;
345
346 // Check for missing alternate names.
347 for( size_t i = 0; i < m_alternatesDataModel->size(); ++i )
348 {
349 if( m_alternatesDataModel->at( i ).m_Name.IsEmpty() )
350 {
351 DisplayErrorMessage( this, _( "Alternate pin definitions must have a name." ) );
352
355
356 return false;
357 }
358 }
359
360 if( !DIALOG_SHIM::TransferDataFromWindow() )
361 return false;
362
364
365 const int standard_grid = 50;
366
367 // Only show the warning if the position has been changed
368 if( ( m_origPos != newPos )
369 && ( ( m_posX.GetValue() % standard_grid ) || ( m_posY.GetValue() % standard_grid ) ) )
370 {
371 wxString msg = wxString::Format( _( "This pin is not on a %d mils grid which will make it "
372 "difficult to connect to in the schematic.\n"
373 "Do you wish to continue?" ),
374 standard_grid );
375 if( !IsOK( this, msg ) )
376 return false;
377 }
378
379 m_pin->SetName( m_textPinName->GetValue() );
380 m_pin->SetNumber( m_textPinNumber->GetValue() );
384 m_pin->SetPosition( newPos );
389 m_pin->SetUnit( m_checkApplyToAllParts->GetValue() ? 0 : m_frame->GetUnit() );
390 m_pin->SetVisible( m_checkShow->GetValue() );
391
392 std::map<wxString, SCH_PIN::ALT>& alternates = m_pin->GetAlternates();
393 alternates.clear();
394
395 for( const SCH_PIN::ALT& alt : *m_alternatesDataModel )
396 alternates[ alt.m_Name ] = alt;
397
398 return true;
399}
400
401
402void DIALOG_PIN_PROPERTIES::OnPropertiesChange( wxCommandEvent& event )
403{
404 if( !IsShownOnScreen() ) // do nothing at init time
405 return;
406
407 m_dummyPin->SetName( m_textPinName->GetValue() );
408 m_dummyPin->SetNumber( m_textPinNumber->GetValue() );
415 m_dummyPin->SetVisible( m_checkShow->GetValue() );
416
417 if( event.GetEventObject() == m_checkApplyToAllParts && m_frame->m_SyncPinEdit )
419
421}
422
423
425{
426 if( m_checkApplyToAllParts->GetValue() )
427 return _( "Synchronized Pins Mode." );
428 else if( m_pin->IsNew() )
429 return _( "Synchronized Pins Mode. New pin will be added to all units." );
430 else
431 return _( "Synchronized Pins Mode. Matching pins in other units will be updated." );
432}
433
434
435void DIALOG_PIN_PROPERTIES::OnAddAlternate( wxCommandEvent& event )
436{
438 return;
439
440 SCH_PIN::ALT newAlt;
441 newAlt.m_Name = wxEmptyString;
442 newAlt.m_Type = m_pin->GetType();
443 newAlt.m_Shape = m_pin->GetShape();
444
446
447 m_alternatesGrid->MakeCellVisible( m_alternatesGrid->GetNumberRows() - 1, 0 );
448 m_alternatesGrid->SetGridCursor( m_alternatesGrid->GetNumberRows() - 1, 0 );
449
450 m_alternatesGrid->EnableCellEditControl( true );
451 m_alternatesGrid->ShowCellEditControl();
452}
453
454
455void DIALOG_PIN_PROPERTIES::OnDeleteAlternate( wxCommandEvent& event )
456{
458 return;
459
460 if( m_alternatesDataModel->size() == 0 ) // empty table
461 return;
462
463 int curRow = m_alternatesGrid->GetGridCursorRow();
464
465 if( curRow < 0 )
466 return;
467
469
470 curRow = std::max( 0, curRow - 1 );
471 m_alternatesGrid->MakeCellVisible( curRow, m_alternatesGrid->GetGridCursorCol() );
472 m_alternatesGrid->SetGridCursor( curRow, m_alternatesGrid->GetGridCursorCol() );
473}
474
475
477{
478 // Account for scroll bars
480
481 wxGridUpdateLocker deferRepaintsTillLeavingScope;
482
485
488}
489
490
491void DIALOG_PIN_PROPERTIES::OnSize( wxSizeEvent& event )
492{
493 auto new_size = event.GetSize();
494
495 if( m_initialized && m_size != new_size )
496 {
497 m_size = new_size;
498
500 }
501
502 // Always propagate for a grid repaint (needed if the height changes, as well as width)
503 event.Skip();
504}
505
506
507void DIALOG_PIN_PROPERTIES::OnUpdateUI( wxUpdateUIEvent& event )
508{
509 // Handle a delayed focus
510 if( m_delayedFocusRow >= 0 )
511 {
512 m_alternatesTurndown->Collapse( false );
513
514 m_alternatesGrid->SetFocus();
517
518 m_alternatesGrid->EnableCellEditControl( true );
519 m_alternatesGrid->ShowCellEditControl();
520
523 }
524}
525
526
527void DIALOG_PIN_PROPERTIES::OnCollapsiblePaneChange( wxCollapsiblePaneEvent& event )
528{
529 if( !event.GetCollapsed() )
530 {
531 wxTopLevelWindow* tlw = dynamic_cast<wxTopLevelWindow*>( wxGetTopLevelParent( this ) );
532
533 if( tlw )
534 {
535 tlw->InvalidateBestSize();
536 wxSize bestSize = tlw->GetBestSize();
537 wxSize currentSize = tlw->GetSize();
538 tlw->SetSize( wxMax( bestSize.GetWidth(), currentSize.GetWidth() ),
539 wxMax( bestSize.GetHeight(), currentSize.GetHeight() ) );
540 }
541 }
542}
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
Definition: bitmap.cpp:110
wxString GetColLabelValue(int aCol) override
void SetValue(int aRow, int aCol, const wxString &aValue) override
ALT_PIN_DATA_MODEL(EDA_UNITS aUserUnits)
wxString GetValue(int aRow, int aCol) override
void AppendRow(const SCH_PIN::ALT &aAlt)
bool IsEmptyCell(int row, int col) override
Class DIALOG_PIN_PROPERTIES_BASE.
SYMBOL_EDIT_FRAME * m_frame
void OnUpdateUI(wxUpdateUIEvent &event) override
std::map< int, int > m_originalColWidths
void OnCollapsiblePaneChange(wxCollapsiblePaneEvent &event) override
void OnPropertiesChange(wxCommandEvent &event) override
bool TransferDataToWindow() override
void OnAddAlternate(wxCommandEvent &event) override
SYMBOL_PREVIEW_WIDGET * m_previewWidget
ALT_PIN_DATA_MODEL * m_alternatesDataModel
void OnSize(wxSizeEvent &event) override
DIALOG_PIN_PROPERTIES(SYMBOL_EDIT_FRAME *parent, SCH_PIN *aPin, bool aFocusPinNumber)
bool TransferDataFromWindow() override
void OnDeleteAlternate(wxCommandEvent &event) override
std::vector< wxWindow * > m_tabOrder
Definition: dialog_shim.h:214
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:66
void SetupStandardButtons(std::map< int, wxString > aLabels={})
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
EDA_UNITS GetUserUnits() const
Definition: dialog_shim.h:102
GAL_TYPE GetBackend() const
Return the type of backend currently used by GAL canvas.
bool IsNew() const
Definition: eda_item.h:113
Add mouse and command handling (such as cut, copy, and paste) to a WX_GRID instance.
Definition: grid_tricks.h:61
KIWAY & Kiway() const
Return a reference to the KIWAY that this object has an opportunity to participate in.
Definition: kiway_holder.h:55
Define a library symbol object.
Definition: lib_symbol.h:85
void SetUnitCount(int aCount, bool aDuplicateDrawItems=true)
Set the units per symbol count.
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
void AddDrawItem(SCH_ITEM *aItem, bool aSort=true)
Add a new draw aItem to the draw object list and sort according to aSort.
Definition: lib_symbol.cpp:783
GRAPHIC_PINSHAPE GetPinShapeSelection()
void SetSelection(GRAPHIC_PINSHAPE aShape)
void SetSelection(ELECTRICAL_PINTYPE aType)
ELECTRICAL_PINTYPE GetPinTypeSelection()
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:168
virtual void SetBodyStyle(int aBodyStyle)
Definition: sch_item.h:242
const SYMBOL * GetParentSymbol() const
Definition: sch_item.cpp:172
int GetBodyStyle() const
Definition: sch_item.h:243
int GetUnit() const
Definition: sch_item.h:240
virtual void SetUnit(int aUnit)
Definition: sch_item.h:239
int GetNumberTextSize() const
Definition: sch_pin.cpp:582
int GetLength() const
Definition: sch_pin.cpp:291
const std::map< wxString, ALT > & GetAlternates() const
Definition: sch_pin.h:133
void SetNumber(const wxString &aNumber)
Definition: sch_pin.cpp:545
void SetVisible(bool aVisible)
Definition: sch_pin.h:113
void ChangeLength(int aLength)
Change the length of a pin and adjust its position based on orientation.
Definition: sch_pin.cpp:1012
void SetOrientation(PIN_ORIENTATION aOrientation)
Definition: sch_pin.h:92
void SetName(const wxString &aName)
Definition: sch_pin.cpp:415
bool IsVisible() const
Definition: sch_pin.cpp:383
void SetPosition(const VECTOR2I &aPos) override
Definition: sch_pin.h:214
const wxString & GetName() const
Definition: sch_pin.cpp:397
void SetLength(int aLength)
Definition: sch_pin.h:98
PIN_ORIENTATION GetOrientation() const
Definition: sch_pin.cpp:256
void SetNumberTextSize(int aSize)
Definition: sch_pin.cpp:596
void SetShape(GRAPHIC_PINSHAPE aShape)
Definition: sch_pin.h:95
VECTOR2I GetPosition() const override
Definition: sch_pin.cpp:248
int GetNameTextSize() const
Definition: sch_pin.cpp:558
void SetType(ELECTRICAL_PINTYPE aType)
Definition: sch_pin.cpp:325
const wxString & GetNumber() const
Definition: sch_pin.h:123
GRAPHIC_PINSHAPE GetShape() const
Definition: sch_pin.cpp:270
ELECTRICAL_PINTYPE GetType() const
Definition: sch_pin.cpp:305
void SetNameTextSize(int aSize)
Definition: sch_pin.cpp:572
void SetBitmap(const wxBitmapBundle &aBmp)
The symbol library editor main window.
int GetBodyStyle() const
bool m_SyncPinEdit
Set to true to synchronize pins at the same position when editing symbols with multiple units or mult...
void DisplayPart(LIB_SYMBOL *aSymbol, int aUnit, int aBodyStyle=0)
virtual bool IsMulti() const =0
virtual void SetShowPinNumbers(bool aShow)
Set or clear the pin number visibility flag.
Definition: symbol.h:164
virtual void SetShowPinNames(bool aShow)
Set or clear the pin name visibility flag.
Definition: symbol.h:158
virtual bool HasAlternateBodyStyle() const =0
Test if symbol has more than one body conversion type (DeMorgan).
int GetIntValue()
Definition: unit_binder.h:129
virtual long long int GetValue()
Return the current value in Internal Units.
virtual void SetValue(long long int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
void SetTable(wxGridTableBase *table, bool aTakeOwnership=false)
Hide wxGrid's SetTable() method with one which doesn't mess up the grid column widths when setting th...
Definition: wx_grid.cpp:275
void DestroyTable(wxGridTableBase *aTable)
Work-around for a bug in wxGrid which crashes when deleting the table if the cell edit control was no...
Definition: wx_grid.cpp:449
bool CommitPendingChanges(bool aQuietMode=false)
Close any open cell edit controls.
Definition: wx_grid.cpp:644
void RemoveAllButtons()
Remove all the buttons that have been added by the user.
Definition: wx_infobar.cpp:353
void AddButton(wxButton *aButton)
Add an already created button to the infobar.
Definition: wx_infobar.cpp:309
void Dismiss() override
Dismisses the infobar and updates the containing layout and AUI manager (if one is provided).
Definition: wx_infobar.cpp:190
void ShowMessage(const wxString &aMessage, int aFlags=wxICON_INFORMATION) override
Show the info bar with the provided message and icon.
Definition: wx_infobar.cpp:154
bool IsOK(wxWindow *aParent, const wxString &aMessage)
Display a yes/no dialog with aMessage and returns the user response.
Definition: confirm.cpp:249
void DisplayErrorMessage(wxWindow *aParent, const wxString &aText, const wxString &aExtraInfo)
Display an error message with aMessage.
Definition: confirm.cpp:194
This file is part of the common library.
#define _(s)
EDA_UNITS
Definition: eda_units.h:46
wxSize GetUnobscuredSize(const wxWindow *aWindow)
Tries to determine the size of the viewport of a scrollable widget (wxDataViewCtrl,...
Definition: wxgtk/ui.cpp:252
const std::vector< BITMAPS > & PinTypeIcons()
Definition: pin_type.cpp:167
const wxArrayString & PinTypeNames()
Definition: pin_type.cpp:158
int PinOrientationIndex(PIN_ORIENTATION code)
Definition: pin_type.cpp:70
const wxArrayString & PinShapeNames()
Definition: pin_type.cpp:176
const std::vector< BITMAPS > & PinShapeIcons()
Definition: pin_type.cpp:185
const wxArrayString & PinOrientationNames()
Definition: pin_type.cpp:194
PIN_ORIENTATION PinOrientationCode(size_t index)
Definition: pin_type.cpp:63
const std::vector< BITMAPS > & PinOrientationIcons()
Definition: pin_type.cpp:203
ELECTRICAL_PINTYPE
The symbol library pin object electrical types used in ERC tests.
Definition: pin_type.h:36
GRAPHIC_PINSHAPE
Definition: pin_type.h:59
wxString m_Name
Definition: sch_pin.h:44
GRAPHIC_PINSHAPE m_Shape
Definition: sch_pin.h:45
ELECTRICAL_PINTYPE m_Type
Definition: sch_pin.h:46
Functions for manipulating tab traversal in forms and dialogs.