KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcbnew/dialogs/dialog_global_edit_text_and_graphics.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) 2012 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 <string_utils.h>
26#include <board_commit.h>
27#include <pcb_edit_frame.h>
30#include <board.h>
32#include <footprint.h>
33#include <pcb_group.h>
34#include <pcb_dimension.h>
35#include <pcb_shape.h>
36#include <pcb_text.h>
37#include <widgets/unit_binder.h>
38#include <widgets/font_choice.h>
39#include <tool/tool_manager.h>
43
44// Columns of layer classes grid
45enum
46{
54};
55
56enum
57{
65};
66
67
68static wxString g_referenceFilter;
69static wxString g_footprintFilter;
70
71
73{
74public:
77
78protected:
79 void onActionButtonChange( wxCommandEvent& event ) override;
80 void onSpecifiedValueUpdateUI( wxUpdateUIEvent& event ) override;
81 void onDimensionItemCheckbox( wxCommandEvent& aEvent ) override;
82
83 void OnLayerFilterSelect( wxCommandEvent& event ) override
84 {
85 m_layerFilterOpt->SetValue( true );
86 }
87 void OnReferenceFilterText( wxCommandEvent& event ) override
88 {
89 m_referenceFilterOpt->SetValue( true );
90 }
91 void OnFootprintFilterText( wxCommandEvent& event ) override
92 {
93 m_footprintFilterOpt->SetValue( true );
94 }
95
96 bool TransferDataToWindow() override;
97 bool TransferDataFromWindow() override;
98
99 void visitItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem );
100 void processItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem );
101
102private:
107
112};
113
114
117 m_lineWidth( parent, m_lineWidthLabel, m_LineWidthCtrl, m_lineWidthUnits ),
118 m_textWidth( parent, m_SizeXlabel, m_SizeXCtrl, m_SizeXunit ),
119 m_textHeight( parent, m_SizeYlabel, m_SizeYCtrl, m_SizeYunit ),
120 m_thickness( parent, m_ThicknessLabel, m_ThicknessCtrl, m_ThicknessUnit )
121{
122 m_parent = parent;
123 m_brdSettings = &m_parent->GetDesignSettings();
124 m_isBoardEditor = dynamic_cast<PCB_EDIT_FRAME*>( m_parent ) != nullptr;
125
126 if( !m_isBoardEditor )
127 {
128 m_footprintTexts->SetLabel( _( "Text items" ) );
129 m_footprintGraphics->SetLabel( _( "Graphic items" ) );
130 m_footprintDimensions->SetLabel( _( "Dimension items" ) );
131
132 m_boardText->Show( false );
133 m_boardGraphics->Show( false );
134 m_boardDimensions->Show( false );
135
136 m_referenceFilterOpt->Show( false );
137 m_referenceFilter->Show( false );
138 m_footprintFilterOpt->Show( false );
139 m_footprintFilter->Show( false );
140 }
141
145
150
151 m_grid->SetCellHighlightPenWidth( 0 );
152 m_grid->SetDefaultCellFont( KIUI::GetInfoFont( this ) );
153 m_grid->SetDefaultRowSize( m_grid->GetDefaultRowSize() - FromDIP( 2 ) );
154
155 SetupStandardButtons( { { wxID_OK, _( "Apply and Close" ) },
156 { wxID_CANCEL, _( "Close" ) } } );
157
159}
160
161
163{
164 if( m_isBoardEditor )
165 {
168 }
169}
170
171
173{
175 m_selection = selTool->GetSelection();
176
177 if( m_isBoardEditor )
178 {
179 // SetValue() generates events, ChangeValue() does not
180 m_referenceFilter->ChangeValue( g_referenceFilter );
181 m_footprintFilter->ChangeValue( g_footprintFilter );
182 }
183
185
187 m_fontCtrl->SetStringSelection( INDETERMINATE_ACTION );
188
192 m_bold->Set3StateValue( wxCHK_UNDETERMINED );
193 m_italic->Set3StateValue( wxCHK_UNDETERMINED );
194 m_keepUpright->Set3StateValue( wxCHK_UNDETERMINED );
195 m_visible->Set3StateValue( wxCHK_UNDETERMINED );
197
198 wxCommandEvent dummy;
200
201#define SET_INT_VALUE( aRow, aCol, aValue ) \
202 m_grid->SetCellValue( aRow, aCol, m_parent->StringFromValue( aValue, true ) )
203
204#define SET_BOOL_VALUE( aRow, aCol, aValue ) \
205 attr = new wxGridCellAttr; \
206 attr->SetRenderer( new wxGridCellBoolRenderer() ); \
207 attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); \
208 attr->SetReadOnly(); \
209 m_grid->SetAttr( aRow, aCol, attr ); \
210 m_grid->SetCellValue( aRow, aCol, ( aValue ) ? wxT( "1" ) : wxT( "" ) )
211
212 const BOARD_DESIGN_SETTINGS& bds = m_parent->GetBoard()->GetDesignSettings();
213 wxGridCellAttr* attr;
214
215 m_grid->SetCellValue( ROW_SILK, COL_CLASS_NAME, _( "Silk Layers" ) );
216 m_grid->SetCellValue( ROW_COPPER, COL_CLASS_NAME, _( "Copper Layers" ) );
217 m_grid->SetCellValue( ROW_EDGES, COL_CLASS_NAME, _( "Edge Cuts" ) );
218 m_grid->SetCellValue( ROW_COURTYARD, COL_CLASS_NAME, _( "Courtyards" ) );
219 m_grid->SetCellValue( ROW_FAB, COL_CLASS_NAME, _( "Fab Layers" ) );
220 m_grid->SetCellValue( ROW_OTHERS, COL_CLASS_NAME, _( "Other Layers" ) );
221
222 m_grid->SetCellValue( ROW_HEADER, COL_LINE_THICKNESS, _( "Line Thickness" ) );
229
230 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_WIDTH, _( "Text Width" ) );
235
236 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_HEIGHT, _( "Text Height" ) );
241
242 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_THICKNESS, _( "Text Thickness" ) );
247
248 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_ITALIC, _( "Italic" ) );
253
254 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_UPRIGHT, _( "Keep Upright" ) );
259
260 return true;
261
262#undef SET_INT_VALUE
263#undef SET_BOOL_VALUE
264}
265
266
268{
269 // Update the UNIT_BINDER controls if the action to take is changed
270 bool enable = m_setToSpecifiedValues->GetValue();
271
272 m_LayerLabel->Enable( enable );
273 m_LayerCtrl->Enable( enable );
274
275 m_lineWidth.Enable( enable );
276 m_textWidth.Enable( enable );
277 m_textHeight.Enable( enable );
278 m_thickness.Enable( enable );
279
280 m_fontLabel->Enable( enable );
281 m_fontCtrl->Enable( enable );
282
283 m_centerOnFP->Enable( enable );
284
285 enable = !enable;
286 m_grid->Enable( enable );
287}
288
289
291{
292 // Update the UI for the elements inside the use specified values sizer
293 event.Enable( m_setToSpecifiedValues->GetValue() );
294}
295
296
298{
299 if( m_footprintDimensions->GetValue() || m_boardDimensions->GetValue() )
300 m_setToLayerDefaults->SetLabel( _( "Set to layer and dimension default values:" ) );
301 else
302 m_setToLayerDefaults->SetLabel( _( "Set to layer default values:" ) );
303}
304
305
307{
308 aCommit.Modify( aItem );
309
310 PCB_FIELD* field = dynamic_cast<PCB_FIELD*>( aItem );
311 PCB_TEXT* text = dynamic_cast<PCB_TEXT*>( aItem );
312 PCB_SHAPE* shape = dynamic_cast<PCB_SHAPE*>( aItem );
313 PCB_DIMENSION_BASE* dimension = dynamic_cast<PCB_DIMENSION_BASE*>( aItem );
314 FOOTPRINT* parentFP = aItem->GetParentFootprint();
315
316 if( m_setToSpecifiedValues->GetValue() )
317 {
320
321 if( text )
322 {
324 text->SetTextSize( VECTOR2I( m_textWidth.GetIntValue(), text->GetTextSize().y ) );
325
327 text->SetTextSize( VECTOR2I( text->GetTextSize().x, m_textHeight.GetIntValue() ) );
328
330 text->SetTextThickness( m_thickness.GetIntValue() );
331
332 // Must be after SetTextSize()
333 if( m_bold->Get3StateValue() != wxCHK_UNDETERMINED )
334 text->SetBold( m_bold->GetValue() );
335
336 if( m_italic->Get3StateValue() != wxCHK_UNDETERMINED )
337 text->SetItalic( m_italic->GetValue() );
338
339 // Must come after setting bold & italic
340 if( m_fontCtrl->GetStringSelection() != INDETERMINATE_ACTION )
341 {
342 text->SetFont( m_fontCtrl->GetFontSelection( text->IsBold(), text->IsItalic() ) );
343 }
344 else if(( m_italic->Get3StateValue() != wxCHK_UNDETERMINED
345 || m_bold->Get3StateValue() != wxCHK_UNDETERMINED ) )
346 {
347 if( !text->GetFontName().IsEmpty() )
348 {
349 text->SetFont( KIFONT::FONT::GetFont( text->GetFontName(), text->IsBold(),
350 text->IsItalic(),
351 m_parent->GetBoard()->GetEmbeddedFiles()->GetFontFiles() ) );
352 }
353 }
354
355 if( parentFP )
356 {
357 if( m_keepUpright->Get3StateValue() != wxCHK_UNDETERMINED )
358 text->SetKeepUpright( m_keepUpright->GetValue() );
359
360 if( m_centerOnFP->GetValue() == wxCHK_CHECKED )
361 text->SetTextPos( text->GetParent()->GetCenter() );
362 }
363 }
364
365 if( field )
366 {
367 if( m_visible->Get3StateValue() != wxCHK_UNDETERMINED )
368 field->SetVisible( m_visible->GetValue() );
369 }
370
372 {
373 if( shape )
374 {
375 STROKE_PARAMS stroke = shape->GetStroke();
376 stroke.SetWidth( m_lineWidth.GetIntValue() );
377 shape->SetStroke( stroke );
378 }
379
380 if( dimension )
382 }
383 }
384 else
385 {
386 PCB_LAYER_ID layer = aItem->GetLayer();
387
388 if( text )
389 {
390 text->SetTextSize( m_brdSettings->GetTextSize( layer ) );
391 text->SetTextThickness( m_brdSettings->GetTextThickness( layer ) );
392 text->SetItalic( m_brdSettings->GetTextItalic( layer ) );
393
394 if( parentFP )
395 text->SetKeepUpright( m_brdSettings->GetTextUpright( layer ) );
396 }
397
398 if( shape )
399 {
400 STROKE_PARAMS stroke = shape->GetStroke();
401 stroke.SetWidth( m_brdSettings->GetLineThickness( layer ) );
402 shape->SetStroke( stroke );
403 }
404
405 if( dimension )
406 {
407 dimension->SetLineThickness( m_brdSettings->GetLineThickness( layer ) );
414 dimension->Update(); // refresh text & geometry
415 }
416 }
417}
418
419
421{
422 if( m_selectedItemsFilter->GetValue() )
423 {
424 EDA_ITEM* candidate = aItem;
425
426 if( !candidate->IsSelected() )
427 {
428 if( candidate->GetParent() && candidate->GetParent()->Type() == PCB_FOOTPRINT_T )
429 candidate = candidate->GetParent();
430 }
431
432 if( !candidate->IsSelected() )
433 {
434 candidate = ( candidate->GetParentGroup() ? candidate->GetParentGroup()->AsEdaItem() : nullptr );
435
436 while( candidate && !candidate->IsSelected() )
437 candidate = candidate->GetParentGroup()->AsEdaItem();
438
439 if( !candidate )
440 return;
441 }
442 }
443
445 {
446 if( aItem->GetLayer() != m_layerFilter->GetLayerSelection() )
447 return;
448 }
449
450 if( m_isBoardEditor )
451 {
452 if( m_referenceFilterOpt->GetValue() && !m_referenceFilter->GetValue().IsEmpty() )
453 {
454 if( FOOTPRINT* fp = aItem->GetParentFootprint() )
455 {
456 if( !WildCompareString( m_referenceFilter->GetValue(), fp->GetReference(), false ) )
457 return;
458 }
459 }
460
461 if( m_footprintFilterOpt->GetValue() && !m_footprintFilter->GetValue().IsEmpty() )
462 {
463 if( FOOTPRINT* fp = aItem->GetParentFootprint() )
464 {
465 if( !WildCompareString( m_footprintFilter->GetValue(), fp->GetFPID().Format(), false ) )
466 return;
467 }
468 }
469 }
470
471 processItem( aCommit, aItem );
472}
473
474
476{
477 int minTextSize = pcbIUScale.mmToIU( TEXT_MIN_SIZE_MM );
478 int maxTextSize = pcbIUScale.mmToIU( TEXT_MAX_SIZE_MM );
479
480 if( !m_textWidth.Validate( minTextSize, maxTextSize )
481 || !m_textHeight.Validate( minTextSize, maxTextSize ) )
482 {
483 return false;
484 }
485
486 BOARD_COMMIT commit( m_parent );
487
488 // Go through the footprints
489 for( FOOTPRINT* fp : m_parent->GetBoard()->Footprints() )
490 {
491 if( m_references->GetValue() )
492 visitItem( commit, &fp->Reference() );
493
494 if( m_values->GetValue() )
495 visitItem( commit, &fp->Value() );
496
497 for( PCB_FIELD* field : fp->GetFields() )
498 {
499 if( field->IsReference() )
500 continue;
501
502 if( field->IsValue() )
503 continue;
504
505 if( m_otherFootprintFields->GetValue() )
506 visitItem( commit, field );
507 else if( m_references->GetValue() && field->GetText() == wxT( "${REFERENCE}" ) )
508 visitItem( commit, field );
509 else if( m_values->GetValue() && field->GetText() == wxT( "${VALUE}" ) )
510 visitItem( commit, field );
511 }
512
513 // Go through all other footprint items
514 for( BOARD_ITEM* boardItem : fp->GraphicalItems() )
515 {
516 KICAD_T itemType = boardItem->Type();
517
518 if( itemType == PCB_TEXT_T || itemType == PCB_TEXTBOX_T )
519 {
520 EDA_TEXT* textItem = dynamic_cast<EDA_TEXT*>( boardItem );
521
522 if( m_footprintTexts->GetValue() )
523 visitItem( commit, boardItem );
524 else if( m_references->GetValue() && textItem->GetText() == wxT( "${REFERENCE}" ) )
525 visitItem( commit, boardItem );
526 else if( m_values->GetValue() && textItem->GetText() == wxT( "${VALUE}" ) )
527 visitItem( commit, boardItem );
528 }
529 else if( BaseType( itemType ) == PCB_DIMENSION_T )
530 {
531 if( m_footprintDimensions->GetValue() )
532 visitItem( commit, boardItem );
533 }
534 else if( itemType == PCB_SHAPE_T )
535 {
536 if( m_footprintGraphics->GetValue() )
537 visitItem( commit, boardItem );
538 }
539 }
540 }
541
542 if( m_isBoardEditor )
543 {
544 // Go through the PCB text & graphic items
545 for( BOARD_ITEM* boardItem : m_parent->GetBoard()->Drawings() )
546 {
547 KICAD_T itemType = boardItem->Type();
548
549 if( itemType == PCB_TEXT_T || itemType == PCB_TEXTBOX_T )
550 {
551 if( m_boardText->GetValue() )
552 visitItem( commit, boardItem );
553 }
554 else if( BaseType( itemType ) == PCB_DIMENSION_T )
555 {
556 if( m_boardDimensions->GetValue() )
557 visitItem( commit, boardItem );
558 }
559 else if( itemType == PCB_SHAPE_T )
560 {
561 if( m_boardGraphics->GetValue() )
562 visitItem( commit, boardItem );
563 }
564 }
565 }
566
567 commit.Push( _( "Edit Text and Graphics" ) );
569
570 return true;
571}
572
573
575{
576 PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
578
579 dlg.ShowModal();
580 return 0;
581}
582
583
585{
586 FOOTPRINT_EDIT_FRAME* editFrame = getEditFrame<FOOTPRINT_EDIT_FRAME>();
588
589 dlg.ShowModal();
590 return 0;
591}
592
593
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:112
@ LAYER_CLASS_OTHERS
@ LAYER_CLASS_FAB
@ LAYER_CLASS_COURTYARD
@ LAYER_CLASS_SILK
@ LAYER_CLASS_COPPER
@ LAYER_CLASS_EDGES
Container for design settings for a BOARD object.
DIM_PRECISION m_DimensionPrecision
Number of digits after the decimal.
DIM_UNITS_FORMAT m_DimensionUnitsFormat
bool GetTextUpright(PCB_LAYER_ID aLayer) const
int GetTextThickness(PCB_LAYER_ID aLayer) const
Return the default text thickness from the layer class for the given layer.
bool m_TextUpright[LAYER_CLASS_COUNT]
bool GetTextItalic(PCB_LAYER_ID aLayer) const
int m_TextThickness[LAYER_CLASS_COUNT]
int m_LineThickness[LAYER_CLASS_COUNT]
VECTOR2I GetTextSize(PCB_LAYER_ID aLayer) const
Return the default text size from the layer class for the given layer.
int GetLineThickness(PCB_LAYER_ID aLayer) const
Return the default graphic segment thickness from the layer class for the given layer.
VECTOR2I m_TextSize[LAYER_CLASS_COUNT]
bool m_TextItalic[LAYER_CLASS_COUNT]
DIM_TEXT_POSITION m_DimensionTextPosition
DIM_UNITS_MODE m_DimensionUnitsMode
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:79
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:232
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:280
FOOTPRINT * GetParentFootprint() const
Definition: board_item.cpp:97
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
Definition: commit.h:107
void processItem(SCH_COMMIT *aCommit, const SCH_SHEET_PATH &aSheetPath, SCH_ITEM *aItem)
void visitItem(SCH_COMMIT *aCommit, const SCH_SHEET_PATH &aSheetPath, SCH_ITEM *aItem)
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...
int ShowModal() override
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
virtual EDA_ITEM * AsEdaItem()=0
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:98
virtual EDA_GROUP * GetParentGroup() const
Definition: eda_item.h:116
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:110
bool IsSelected() const
Definition: eda_item.h:127
EDA_ITEM * GetParent() const
Definition: eda_item.h:112
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition: eda_text.h:79
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:97
virtual void SetVisible(bool aVisible)
Definition: eda_text.cpp:386
KIFONT::FONT * GetFontSelection(bool aBold, bool aItalic, bool aForDrawingSheet=false) const
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
Definition: font.cpp:147
int SetLayerSelection(int layer)
bool SetLayersHotkeys(bool value)
Common, abstract interface for edit frames.
Abstract dimension API.
void Update()
Update the dimension's cached text and geometry.
void SetUnitsFormat(const DIM_UNITS_FORMAT aFormat)
void SetSuppressZeroes(bool aSuppress)
void SetTextPositionMode(DIM_TEXT_POSITION aMode)
void SetLineThickness(int aWidth)
void SetPrecision(DIM_PRECISION aPrecision)
void SetUnitsMode(DIM_UNITS_MODE aMode)
void SetKeepTextAligned(bool aKeepAligned)
The main frame for Pcbnew.
void SetBoardFrame(PCB_BASE_FRAME *aFrame)
void SetUndefinedLayerName(const wxString &aName)
The selection tool: currently supports:
PCB_SELECTION & GetSelection()
STROKE_PARAMS GetStroke() const override
Definition: pcb_shape.h:91
void SetStroke(const STROKE_PARAMS &aStroke) override
Definition: pcb_shape.h:92
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
Simple container to manage line stroke parameters.
Definition: stroke_params.h:94
void SetWidth(int aWidth)
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
Definition: tools_holder.h:55
Generic, UI-independent tool event.
Definition: tool_event.h:168
int GetIntValue()
Definition: unit_binder.h:134
void Enable(bool aEnable)
Enable/disable the label, widget and units label.
bool IsIndeterminate() const
Return true if the control holds the indeterminate value (for instance, if it represents a multiple s...
virtual bool Validate(double aMin, double aMax, EDA_UNITS aUnits=EDA_UNITS::UNSCALED)
Validate the control against the given range, informing the user of any errors found.
virtual void SetValue(long long int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion.
#define _(s)
#define TEXT_MIN_SIZE_MM
Minimum text size (1 micron).
Definition: eda_text.h:46
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
Definition: eda_text.h:47
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:60
@ UNDEFINED_LAYER
Definition: layer_ids.h:61
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:744
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
Definition: ui_common.cpp:156
Class to handle a set of BOARD_ITEMs.
#define SET_INT_VALUE(aRow, aCol, aValue)
#define SET_BOOL_VALUE(aRow, aCol, aValue)
std::vector< FAB_LAYER_COLOR > dummy
bool WildCompareString(const wxString &pattern, const wxString &string_to_tst, bool case_sensitive)
Compare a string against wild card (* and ?) pattern using the usual rules.
constexpr int mmToIU(double mm) const
Definition: base_units.h:92
constexpr KICAD_T BaseType(const KICAD_T aType)
Return the underlying type of the given type.
Definition: typeinfo.h:251
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:78
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:88
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition: typeinfo.h:93
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition: typeinfo.h:92
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition: typeinfo.h:86
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
Definition: typeinfo.h:100
#define INDETERMINATE_ACTION
Definition: ui_common.h:47