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
69static bool g_modifyValues;
76static bool g_filterByLayer;
77static int g_layerFilter;
79static wxString g_referenceFilter;
81static wxString g_footprintFilter;
82static bool g_filterSelected = false;
83static bool g_setToSpecifiedValues = true;
84
85
87{
92
97
98public:
101
102protected:
103 void onActionButtonChange( wxCommandEvent& event ) override;
104 void onSpecifiedValueUpdateUI( wxUpdateUIEvent& event ) override;
105 void onDimensionItemCheckbox( wxCommandEvent& aEvent ) override;
106
107 void OnLayerFilterSelect( wxCommandEvent& event ) override
108 {
109 m_layerFilterOpt->SetValue( true );
110 }
111 void OnReferenceFilterText( wxCommandEvent& event ) override
112 {
113 m_referenceFilterOpt->SetValue( true );
114 }
115 void OnFootprintFilterText( wxCommandEvent& event ) override
116 {
117 m_footprintFilterOpt->SetValue( true );
118 }
119
120 bool TransferDataToWindow() override;
121 bool TransferDataFromWindow() override;
122
123 void visitItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem );
124 void processItem( BOARD_COMMIT& aCommit, BOARD_ITEM* aItem );
125};
126
127
130 m_lineWidth( parent, m_lineWidthLabel, m_LineWidthCtrl, m_lineWidthUnits ),
131 m_textWidth( parent, m_SizeXlabel, m_SizeXCtrl, m_SizeXunit ),
132 m_textHeight( parent, m_SizeYlabel, m_SizeYCtrl, m_SizeYunit ),
133 m_thickness( parent, m_ThicknessLabel, m_ThicknessCtrl, m_ThicknessUnit )
134{
135 m_parent = parent;
136 m_brdSettings = &m_parent->GetDesignSettings();
137 m_isBoardEditor = dynamic_cast<PCB_EDIT_FRAME*>( m_parent ) != nullptr;
138
139 if( !m_isBoardEditor )
140 {
141 m_otherFootprintTexts->SetLabel( _( "Other footprint text items" ) );
142 m_footprintGraphics->SetLabel( _( "Graphic items" ) );
143 m_footprintDimensions->SetLabel( _( "Dimension items" ) );
144
145 m_boardText->Show( false );
146 m_boardGraphics->Show( false );
147
148 m_referenceFilterOpt->Show( false );
149 m_referenceFilter->Show( false );
150 m_footprintFilterOpt->Show( false );
151 m_footprintFilter->Show( false );
152 }
153
157
162
163 m_grid->SetCellHighlightPenWidth( 0 );
164 m_grid->SetDefaultCellFont( KIUI::GetInfoFont( this ) );
165
166 if( g_setToSpecifiedValues == true )
167 m_setToSpecifiedValues->SetValue( true );
168 else
169 m_setToLayerDefaults->SetValue( true );
170
171 SetupStandardButtons( { { wxID_OK, _( "Apply and Close" ) },
172 { wxID_CANCEL, _( "Close" ) } } );
173
175}
176
177
179{
180 g_modifyReferences = m_references->GetValue();
181 g_modifyValues = m_values->GetValue();
186
187 if( m_isBoardEditor )
188 {
189 g_modifyBoardText = m_boardText->GetValue();
191 }
192
193 g_filterByLayer = m_layerFilterOpt->GetValue();
195
196 if( m_isBoardEditor )
197 {
202 }
203
206}
207
208
210{
212 m_selection = selTool->GetSelection();
213
214 m_references->SetValue( g_modifyReferences );
215 m_values->SetValue( g_modifyValues );
220
221 if( m_isBoardEditor )
222 {
223 m_boardText->SetValue( g_modifyBoardText );
225 }
226
227 if( m_layerFilter->SetLayerSelection( g_layerFilter ) != wxNOT_FOUND )
229
230 if( m_isBoardEditor )
231 {
232 // SetValue() generates events, ChangeValue() does not
233 m_referenceFilter->ChangeValue( g_referenceFilter );
235 m_footprintFilter->ChangeValue( g_footprintFilter );
237 }
238
240
242
244 m_fontCtrl->SetStringSelection( INDETERMINATE_ACTION );
245
249 m_bold->Set3StateValue( wxCHK_UNDETERMINED );
250 m_italic->Set3StateValue( wxCHK_UNDETERMINED );
251 m_keepUpright->Set3StateValue( wxCHK_UNDETERMINED );
252 m_visible->Set3StateValue( wxCHK_UNDETERMINED );
254
255 wxCommandEvent dummy;
257
258#define SET_INT_VALUE( aRow, aCol, aValue ) \
259 m_grid->SetCellValue( aRow, aCol, m_parent->StringFromValue( aValue, true ) )
260
261#define SET_BOOL_VALUE( aRow, aCol, aValue ) \
262 attr = new wxGridCellAttr; \
263 attr->SetRenderer( new wxGridCellBoolRenderer() ); \
264 attr->SetAlignment( wxALIGN_CENTER, wxALIGN_CENTER ); \
265 attr->SetReadOnly(); \
266 m_grid->SetAttr( aRow, aCol, attr ); \
267 m_grid->SetCellValue( aRow, aCol, ( aValue ) ? wxT( "1" ) : wxT( "" ) )
268
269 const BOARD_DESIGN_SETTINGS& bds = m_parent->GetBoard()->GetDesignSettings();
270 wxGridCellAttr* attr;
271
272 m_grid->SetCellValue( ROW_SILK, COL_CLASS_NAME, _( "Silk Layers" ) );
273 m_grid->SetCellValue( ROW_COPPER, COL_CLASS_NAME, _( "Copper Layers" ) );
274 m_grid->SetCellValue( ROW_EDGES, COL_CLASS_NAME, _( "Edge Cuts" ) );
275 m_grid->SetCellValue( ROW_COURTYARD, COL_CLASS_NAME, _( "Courtyards" ) );
276 m_grid->SetCellValue( ROW_FAB, COL_CLASS_NAME, _( "Fab Layers" ) );
277 m_grid->SetCellValue( ROW_OTHERS, COL_CLASS_NAME, _( "Other Layers" ) );
278
279 m_grid->SetCellValue( ROW_HEADER, COL_LINE_THICKNESS, _( "Line Thickness" ) );
286
287 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_WIDTH, _( "Text Width" ) );
292
293 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_HEIGHT, _( "Text Height" ) );
298
299 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_THICKNESS, _( "Text Thickness" ) );
304
305 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_ITALIC, _( "Italic" ) );
310
311 m_grid->SetCellValue( ROW_HEADER, COL_TEXT_UPRIGHT, _( "Upright" ) );
316
317 return true;
318
319#undef SET_INT_VALUE
320#undef SET_BOOL_VALUE
321}
322
323
325{
326 // Update the UNIT_BINDER controls if the action to take is changed
327 bool enable = m_setToSpecifiedValues->GetValue();
328
329 m_LayerLabel->Enable( enable );
330 m_LayerCtrl->Enable( enable );
331
332 m_lineWidth.Enable( enable );
333 m_textWidth.Enable( enable );
334 m_textHeight.Enable( enable );
335 m_thickness.Enable( enable );
336
337 m_fontLabel->Enable( enable );
338 m_fontCtrl->Enable( enable );
339
340 m_centerOnFP->Enable( enable );
341
342 enable = !enable;
343 m_grid->Enable( enable );
344}
345
346
348{
349 // Update the UI for the elements inside the use specified values sizer
350 event.Enable( m_setToSpecifiedValues->GetValue() );
351}
352
353
355{
356 if( m_footprintDimensions->GetValue() || m_boardDimensions->GetValue() )
357 m_setToLayerDefaults->SetLabel( _( "Set to layer and dimension default values:" ) );
358 else
359 m_setToLayerDefaults->SetLabel( _( "Set to layer default values:" ) );
360}
361
362
364{
365 aCommit.Modify( aItem );
366
367 PCB_FIELD* field = dynamic_cast<PCB_FIELD*>( aItem );
368 PCB_TEXT* text = dynamic_cast<PCB_TEXT*>( aItem );
369 PCB_SHAPE* shape = dynamic_cast<PCB_SHAPE*>( aItem );
370 PCB_DIMENSION_BASE* dimension = dynamic_cast<PCB_DIMENSION_BASE*>( aItem );
371 FOOTPRINT* parentFP = aItem->GetParentFootprint();
372
373 if( m_setToSpecifiedValues->GetValue() )
374 {
377
378 if( text )
379 {
381 text->SetTextSize( VECTOR2I( m_textWidth.GetValue(), text->GetTextSize().y ) );
382
384 text->SetTextSize( VECTOR2I( text->GetTextSize().x, m_textHeight.GetValue() ) );
385
387 text->SetTextThickness( m_thickness.GetValue() );
388
389 // Must be after SetTextSize()
390 if( m_bold->Get3StateValue() != wxCHK_UNDETERMINED )
391 text->SetBold( m_bold->GetValue() );
392
393 if( m_italic->Get3StateValue() != wxCHK_UNDETERMINED )
394 text->SetItalic( m_italic->GetValue() );
395
396 // Must come after setting bold & italic
397 if( m_fontCtrl->GetStringSelection() != INDETERMINATE_ACTION )
398 {
399 text->SetFont( m_fontCtrl->GetFontSelection( text->IsBold(), text->IsItalic() ) );
400 }
401 else if(( m_italic->Get3StateValue() != wxCHK_UNDETERMINED
402 || m_bold->Get3StateValue() != wxCHK_UNDETERMINED ) )
403 {
404 wxString fontName = text->GetFontName();
405
406 if( !text->GetFontName().IsEmpty() )
407 {
408 text->SetFont( KIFONT::FONT::GetFont( text->GetFontName(), text->IsBold(),
409 text->IsItalic(),
410 m_parent->GetBoard()->GetEmbeddedFiles()->GetFontFiles() ) );
411 }
412 }
413
414 if( parentFP )
415 {
416 if( m_keepUpright->Get3StateValue() != wxCHK_UNDETERMINED )
417 text->SetKeepUpright( m_keepUpright->GetValue() );
418
419 if( m_centerOnFP->GetValue() == wxCHK_CHECKED )
420 text->SetTextPos( text->GetParent()->GetCenter() );
421 }
422 }
423
424 if( field )
425 {
426 if( m_visible->Get3StateValue() != wxCHK_UNDETERMINED )
427 field->SetVisible( m_visible->GetValue() );
428 }
429
431 {
432 if( shape )
433 {
434 STROKE_PARAMS stroke = shape->GetStroke();
435 stroke.SetWidth( m_lineWidth.GetValue() );
436 shape->SetStroke( stroke );
437 }
438
439 if( dimension )
440 dimension->SetLineThickness( m_lineWidth.GetValue() );
441 }
442 }
443 else
444 {
445 PCB_LAYER_ID layer = aItem->GetLayer();
446
447 if( text )
448 {
449 text->SetTextSize( m_brdSettings->GetTextSize( layer ) );
450 text->SetTextThickness( m_brdSettings->GetTextThickness( layer ) );
451 text->SetItalic( m_brdSettings->GetTextItalic( layer ) );
452
453 if( parentFP )
454 text->SetKeepUpright( m_brdSettings->GetTextUpright( layer ) );
455 }
456
457 if( shape )
458 {
459 STROKE_PARAMS stroke = shape->GetStroke();
460 stroke.SetWidth( m_brdSettings->GetLineThickness( layer ) );
461 shape->SetStroke( stroke );
462 }
463
464 if( dimension )
465 {
466 dimension->SetLineThickness( m_brdSettings->GetLineThickness( layer ) );
473 dimension->Update(); // refresh text & geometry
474 }
475 }
476}
477
478
480{
481 if( m_selectedItemsFilter->GetValue() )
482 {
483 BOARD_ITEM* candidate = aItem;
484
485 if( !candidate->IsSelected() )
486 {
487 if( candidate->GetParent() && candidate->GetParent()->Type() == PCB_FOOTPRINT_T )
488 candidate = candidate->GetParent();
489 }
490
491 if( !candidate->IsSelected() )
492 {
493 candidate = candidate->GetParentGroup();
494
495 while( candidate && !candidate->IsSelected() )
496 candidate = candidate->GetParentGroup();
497
498 if( !candidate )
499 return;
500 }
501 }
502
504 {
505 if( aItem->GetLayer() != m_layerFilter->GetLayerSelection() )
506 return;
507 }
508
509 if( m_isBoardEditor )
510 {
511 if( m_referenceFilterOpt->GetValue() && !m_referenceFilter->GetValue().IsEmpty() )
512 {
513 if( FOOTPRINT* fp = aItem->GetParentFootprint() )
514 {
515 if( !WildCompareString( m_referenceFilter->GetValue(), fp->GetReference(), false ) )
516 return;
517 }
518 }
519
520 if( m_footprintFilterOpt->GetValue() && !m_footprintFilter->GetValue().IsEmpty() )
521 {
522 if( FOOTPRINT* fp = aItem->GetParentFootprint() )
523 {
524 if( !WildCompareString( m_footprintFilter->GetValue(), fp->GetFPID().Format(), false ) )
525 return;
526 }
527 }
528 }
529
530 processItem( aCommit, aItem );
531}
532
533
535{
536 int minTextSize = pcbIUScale.mmToIU( TEXT_MIN_SIZE_MM );
537 int maxTextSize = pcbIUScale.mmToIU( TEXT_MAX_SIZE_MM );
538
539 if( !m_textWidth.Validate( minTextSize, maxTextSize )
540 || !m_textHeight.Validate( minTextSize, maxTextSize ) )
541 {
542 return false;
543 }
544
545 BOARD_COMMIT commit( m_parent );
546
547 // Go through the footprints
548 for( FOOTPRINT* fp : m_parent->GetBoard()->Footprints() )
549 {
550 if( m_references->GetValue() )
551 visitItem( commit, &fp->Reference() );
552
553 if( m_values->GetValue() )
554 visitItem( commit, &fp->Value() );
555
556 if( m_footprintFields->GetValue() )
557 {
558 for( PCB_FIELD* field : fp->GetFields() )
559 {
560 if( field->IsReference() )
561 continue;
562
563 if( field->IsValue() )
564 continue;
565
566 visitItem( commit, field );
567 }
568 }
569
570 // Go through all other footprint items
571 for( BOARD_ITEM* boardItem : fp->GraphicalItems() )
572 {
573 KICAD_T itemType = boardItem->Type();
574
575 if( itemType == PCB_TEXT_T || itemType == PCB_TEXTBOX_T )
576 {
577 if( m_otherFootprintTexts->GetValue() )
578 visitItem( commit, boardItem );
579 }
580 else if( BaseType( itemType ) == PCB_DIMENSION_T )
581 {
582 if( m_footprintDimensions->GetValue() )
583 visitItem( commit, boardItem );
584 }
585 else if( itemType == PCB_SHAPE_T )
586 {
587 if( m_footprintGraphics->GetValue() )
588 visitItem( commit, boardItem );
589 }
590 }
591 }
592
593 if( m_isBoardEditor )
594 {
595 // Go through the PCB text & graphic items
596 for( BOARD_ITEM* boardItem : m_parent->GetBoard()->Drawings() )
597 {
598 KICAD_T itemType = boardItem->Type();
599
600 if( itemType == PCB_TEXT_T || itemType == PCB_TEXTBOX_T )
601 {
602 if( m_boardText->GetValue() )
603 visitItem( commit, boardItem );
604 }
605 else if( BaseType( itemType ) == PCB_DIMENSION_T )
606 {
607 if( m_boardDimensions->GetValue() )
608 visitItem( commit, boardItem );
609 }
610 else if( itemType == PCB_SHAPE_T || BaseType( itemType ) == PCB_DIMENSION_T )
611 {
612 if( m_boardGraphics->GetValue() )
613 visitItem( commit, boardItem );
614 }
615 }
616 }
617
618 commit.Push( _( "Edit Text and Graphics" ) );
620
621 return true;
622}
623
624
626{
627 PCB_EDIT_FRAME* editFrame = getEditFrame<PCB_EDIT_FRAME>();
629
630 dlg.ShowModal();
631 return 0;
632}
633
634
636{
637 FOOTPRINT_EDIT_FRAME* editFrame = getEditFrame<FOOTPRINT_EDIT_FRAME>();
639
640 dlg.ShowModal();
641 return 0;
642}
643
644
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:108
@ 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:239
PCB_GROUP * GetParentGroup() const
Definition: board_item.h:90
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:290
FOOTPRINT * GetParentFootprint() const
Definition: board_item.cpp:298
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:217
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Modify a given item in the model.
Definition: commit.h:108
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
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:101
bool IsSelected() const
Definition: eda_item.h:110
virtual void SetVisible(bool aVisible)
Definition: eda_text.cpp:379
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:89
void SetStroke(const STROKE_PARAMS &aStroke) override
Definition: pcb_shape.h:90
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
virtual long long int GetValue()
Return the current value in Internal Units.
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:47
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
Definition: eda_text.h:48
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:714
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
Definition: ui_common.cpp:155
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:88
constexpr KICAD_T BaseType(const KICAD_T aType)
Return the underlying type of the given type.
Definition: typeinfo.h:249
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