KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_table.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 The KiCad Developers, see AUTHORS.txt for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#include <pgm_base.h>
25#include <sch_edit_frame.h>
26#include <plotters/plotter.h>
28#include <geometry/shape_rect.h>
29#include <bitmaps.h>
30#include <string_utils.h>
31#include <schematic.h>
33#include <sch_painter.h>
34#include <wx/log.h>
35#include <sch_table.h>
37
38
39SCH_TABLE::SCH_TABLE( int aLineWidth ) :
40 SCH_ITEM( nullptr, SCH_TABLE_T ),
41 m_strokeExternal( true ),
44 m_strokeRows( true ),
45 m_strokeColumns( true ),
47 m_colCount( 0 )
48{
50}
51
52
54 SCH_ITEM( aTable )
55{
62
63 m_colCount = aTable.m_colCount;
64 m_colWidths = aTable.m_colWidths;
66
67 for( SCH_TABLECELL* src : aTable.m_cells )
68 AddCell( new SCH_TABLECELL( *src ) );
69}
70
71
73{
74 // We own our cells; delete them
75 for( SCH_TABLECELL* cell : m_cells )
76 delete cell;
77}
78
79
81{
82 wxCHECK_RET( aItem != nullptr && aItem->Type() == SCH_TABLE_T, wxT( "Cannot swap data with invalid table." ) );
83
84 SCH_TABLE* table = static_cast<SCH_TABLE*>( aItem );
85
86 std::swap( m_strokeExternal, table->m_strokeExternal );
87 std::swap( m_StrokeHeaderSeparator, table->m_StrokeHeaderSeparator );
88 std::swap( m_borderStroke, table->m_borderStroke );
89 std::swap( m_strokeRows, table->m_strokeRows );
90 std::swap( m_strokeColumns, table->m_strokeColumns );
91 std::swap( m_separatorsStroke, table->m_separatorsStroke );
92
93 std::swap( m_colCount, table->m_colCount );
94 std::swap( m_colWidths, table->m_colWidths );
95 std::swap( m_rowHeights, table->m_rowHeights );
96
97 std::swap( m_cells, table->m_cells );
98
99 for( SCH_TABLECELL* cell : m_cells )
100 cell->SetParent( this );
101
102 for( SCH_TABLECELL* cell : table->m_cells )
103 cell->SetParent( table );
104}
105
106
108{
109 Move( aPos - GetPosition() );
110}
111
112
114{
115 if( m_cells.empty() )
116 return VECTOR2I( 0, 0 ); // Return origin if table has no cells
117
118 return m_cells[0]->GetPosition();
119}
120
121
123{
124 BOX2I bbox;
125
126 for( SCH_TABLECELL* cell : m_cells )
127 {
128 bbox.Merge( cell->GetPosition() );
129 bbox.Merge( cell->GetEnd() );
130 }
131
132 return bbox.GetCenter();
133}
134
135
137{
138 VECTOR2I tableSize;
139
140 for( int ii = 0; ii < GetColCount(); ++ii )
141 tableSize.x += GetColWidth( ii );
142
143 for( int ii = 0; ii < GetRowCount(); ++ii )
144 tableSize.y += GetRowHeight( ii );
145
146 return GetPosition() + tableSize;
147}
148
149
151{
152 int y = GetPosition().y;
153
154 for( int row = 0; row < GetRowCount(); ++row )
155 {
156 int x = GetPosition().x;
157 int rowHeight = m_rowHeights[row];
158
159 for( int col = 0; col < GetColCount(); ++col )
160 {
161 int colWidth = m_colWidths[col];
162
163 SCH_TABLECELL* cell = GetCell( row, col );
164
165 if( !cell )
166 continue; // Skip if cell doesn't exist (shouldn't happen, but be defensive)
167
168 VECTOR2I pos( x, y );
169
170 RotatePoint( pos, GetPosition(), cell->GetTextAngle() );
171
172 if( cell->GetPosition() != pos )
173 {
174 cell->SetPosition( pos );
175 cell->ClearRenderCache();
176 }
177
178 VECTOR2I end = VECTOR2I( x + colWidth, y + rowHeight );
179
180 if( cell->GetColSpan() > 1 || cell->GetRowSpan() > 1 )
181 {
182 for( int ii = col + 1; ii < col + cell->GetColSpan(); ++ii )
183 end.x += m_colWidths[ii];
184
185 for( int ii = row + 1; ii < row + cell->GetRowSpan(); ++ii )
186 end.y += m_rowHeights[ii];
187 }
188
190
191 if( cell->GetEnd() != end )
192 {
193 cell->SetEnd( end );
194 cell->ClearRenderCache();
195 }
196
197 x += colWidth;
198 }
199
200 y += rowHeight;
201 }
202}
203
204
205void SCH_TABLE::Move( const VECTOR2I& aMoveVector )
206{
207 for( SCH_TABLECELL* cell : m_cells )
208 cell->Move( aMoveVector );
209}
210
211
213{
214 // We could mirror all the cells, but it doesn't seem useful....
215}
216
217
219{
220 // We could mirror all the cells, but it doesn't seem useful....
221}
222
223
224void SCH_TABLE::Rotate( const VECTOR2I& aCenter, bool aRotateCCW )
225{
226 for( SCH_TABLECELL* cell : m_cells )
227 cell->Rotate( aCenter, aRotateCCW );
228
229 Normalize();
230}
231
232
233bool SCH_TABLE::operator<( const SCH_ITEM& aItem ) const
234{
235 if( Type() != aItem.Type() )
236 return Type() < aItem.Type();
237
238 const SCH_TABLE& other = static_cast<const SCH_TABLE&>( aItem );
239
240 if( m_cells.size() != other.m_cells.size() )
241 return m_cells.size() < other.m_cells.size();
242
243 if( GetPosition().x != other.GetPosition().x )
244 return GetPosition().x < GetPosition().x;
245
246 if( GetPosition().y != GetPosition().y )
247 return GetPosition().y < GetPosition().y;
248
249 return m_cells[0] < other.m_cells[0];
250}
251
252
253void SCH_TABLE::RunOnChildren( const std::function<void( SCH_ITEM* )>& aFunction, RECURSE_MODE aMode )
254{
255 for( SCH_TABLECELL* cell : m_cells )
256 aFunction( cell );
257}
258
259
261{
262 // Note: a table with no cells is not allowed
263 BOX2I bbox = m_cells[0]->GetBoundingBox();
264
265 bbox.Merge( m_cells[m_cells.size() - 1]->GetBoundingBox() );
266
267 return bbox;
268}
269
270
271INSPECT_RESULT SCH_TABLE::Visit( INSPECTOR aInspector, void* aTestData, const std::vector<KICAD_T>& aScanTypes )
272{
273 for( KICAD_T scanType : aScanTypes )
274 {
275 if( scanType == SCH_LOCATE_ANY_T || scanType == SCH_TABLE_T )
276 {
277 if( INSPECT_RESULT::QUIT == aInspector( this, aTestData ) )
279 }
280
281 if( scanType == SCH_LOCATE_ANY_T || scanType == SCH_TABLECELL_T )
282 {
283 for( SCH_TABLECELL* cell : m_cells )
284 {
285 if( INSPECT_RESULT::QUIT == aInspector( cell, (void*) this ) )
287 }
288 }
289 }
290
292}
293
294
295wxString SCH_TABLE::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
296{
297 return wxString::Format( _( "%d Column Table" ), m_colCount );
298}
299
300
302{
303 return BITMAPS::spreadsheet; // JEY TODO
304}
305
306
307std::vector<int> SCH_TABLE::ViewGetLayers() const
308{
310}
311
312
313bool SCH_TABLE::HitTest( const VECTOR2I& aPosition, int aAccuracy ) const
314{
315 BOX2I rect = GetBoundingBox();
316
317 rect.Inflate( aAccuracy );
318
319 return rect.Contains( aPosition );
320}
321
322
323bool SCH_TABLE::HitTest( const BOX2I& aRect, bool aContained, int aAccuracy ) const
324{
325 BOX2I rect = aRect;
326
327 rect.Inflate( aAccuracy );
328
329 if( aContained )
330 return rect.Contains( GetBoundingBox() );
331
332 return rect.Intersects( GetBoundingBox() );
333}
334
335
336bool SCH_TABLE::HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const
337{
338 return KIGEOM::BoxHitTest( aPoly, GetBoundingBox(), aContained );
339}
340
341
342void SCH_TABLE::DrawBorders( const std::function<void( const VECTOR2I& aPt1, const VECTOR2I& aPt2,
343 const STROKE_PARAMS& aStroke )>& aCallback ) const
344{
345 EDA_ANGLE drawAngle = GetCell( 0, 0 )->GetTextAngle();
346
347 std::vector<VECTOR2I> topLeft = GetCell( 0, 0 )->GetCornersInSequence( drawAngle );
348 std::vector<VECTOR2I> bottomLeft = GetCell( GetRowCount() - 1, 0 )->GetCornersInSequence( drawAngle );
349 std::vector<VECTOR2I> topRight = GetCell( 0, GetColCount() - 1 )->GetCornersInSequence( drawAngle );
350 std::vector<VECTOR2I> bottomRight =
351 GetCell( GetRowCount() - 1, GetColCount() - 1 )->GetCornersInSequence( drawAngle );
352 STROKE_PARAMS stroke;
353
354 for( int col = 0; col < GetColCount() - 1; ++col )
355 {
356 for( int row = 0; row < GetRowCount(); ++row )
357 {
358 if( row == 0 && StrokeHeaderSeparator() )
359 stroke = GetBorderStroke();
360 else if( StrokeColumns() )
361 stroke = GetSeparatorsStroke();
362 else
363 continue;
364
365 SCH_TABLECELL* cell = GetCell( row, col );
366
367 if( cell->GetColSpan() == 0 )
368 continue;
369
370 if( col + cell->GetColSpan() == GetColCount() )
371 continue;
372
373 std::vector<VECTOR2I> corners = cell->GetCornersInSequence( drawAngle );
374
375 if( corners.size() == 4 )
376 aCallback( corners[1], corners[2], stroke );
377 }
378 }
379
380 for( int row = 0; row < GetRowCount() - 1; ++row )
381 {
382 if( row == 0 && StrokeHeaderSeparator() )
383 stroke = GetBorderStroke();
384 else if( StrokeRows() )
385 stroke = GetSeparatorsStroke();
386 else
387 continue;
388
389 for( int col = 0; col < GetColCount(); ++col )
390 {
391 SCH_TABLECELL* cell = GetCell( row, col );
392
393 if( cell->GetRowSpan() == 0 )
394 continue;
395
396 if( row + cell->GetRowSpan() == GetRowCount() )
397 continue;
398
399 std::vector<VECTOR2I> corners = cell->GetCornersInSequence( drawAngle );
400
401 if( corners.size() == 4 )
402 aCallback( corners[2], corners[3], stroke );
403 }
404 }
405
406 if( StrokeExternal() && GetBorderStroke().GetWidth() >= 0 )
407 {
408 aCallback( topLeft[0], topRight[1], GetBorderStroke() );
409 aCallback( topRight[1], bottomRight[2], GetBorderStroke() );
410 aCallback( bottomRight[2], bottomLeft[3], GetBorderStroke() );
411 aCallback( bottomLeft[3], topLeft[0], GetBorderStroke() );
412 }
413}
414
415
416void SCH_TABLE::Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts, int aUnit, int aBodyStyle,
417 const VECTOR2I& aOffset, bool aDimmed )
418{
419 for( SCH_TABLECELL* cell : m_cells )
420 cell->Plot( aPlotter, aBackground, aPlotOpts, aUnit, aBodyStyle, aOffset, aDimmed );
421
422 if( aBackground )
423 return;
424
425 RENDER_SETTINGS* settings = aPlotter->RenderSettings();
426
428 [&]( const VECTOR2I& ptA, const VECTOR2I& ptB, const STROKE_PARAMS& stroke )
429 {
430 int lineWidth = stroke.GetWidth();
431 COLOR4D color = stroke.GetColor();
432 LINE_STYLE lineStyle = stroke.GetLineStyle();
433
434 if( lineWidth == 0 )
435 {
436 if( SCHEMATIC* schematic = Schematic() )
437 lineWidth = schematic->Settings().m_DefaultLineWidth;
438 else
439 lineWidth = schIUScale.MilsToIU( DEFAULT_LINE_WIDTH_MILS );
440 }
441
442 if( lineWidth < settings->GetMinPenWidth() )
443 lineWidth = settings->GetMinPenWidth();
444
445 if( !aPlotter->GetColorMode() || color == COLOR4D::UNSPECIFIED )
446 color = settings->GetLayerColor( m_layer );
447
448 if( lineStyle == LINE_STYLE::DEFAULT )
449 lineStyle = LINE_STYLE::SOLID;
450
451 aPlotter->SetColor( color );
452 aPlotter->SetDash( lineWidth, lineStyle );
453
454 aPlotter->MoveTo( ptA );
455 aPlotter->FinishTo( ptB );
456 } );
457}
458
459
460void SCH_TABLE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList )
461{
462 // Don't use GetShownText() here; we want to show the user the variable references
463 aList.emplace_back( _( "Table" ), wxString::Format( _( "%d Columns" ), m_colCount ) );
464
465 SCH_ITEM::GetMsgPanelInfo( aFrame, aList );
466}
467
468
469bool SCH_TABLE::operator==( const SCH_ITEM& aOther ) const
470{
471 if( Type() != aOther.Type() )
472 return false;
473
474 const SCH_TABLE& other = static_cast<const SCH_TABLE&>( aOther );
475
476 if( m_cells.size() != other.m_cells.size() )
477 return false;
478
479 if( m_colWidths != other.m_colWidths )
480 return false;
481
482 if( m_rowHeights != other.m_rowHeights )
483 return false;
484
485 for( int ii = 0; ii < (int) m_cells.size(); ++ii )
486 {
487 if( !( *m_cells[ii] == *other.m_cells[ii] ) )
488 return false;
489 }
490
491 return true;
492}
493
494
495double SCH_TABLE::Similarity( const SCH_ITEM& aOther ) const
496{
497 if( aOther.Type() != Type() )
498 return 0.0;
499
500 const SCH_TABLE& other = static_cast<const SCH_TABLE&>( aOther );
501
502 if( m_cells.size() != other.m_cells.size() )
503 return 0.1;
504
505 double similarity = 1.0;
506
507 for( int ii = 0; ii < (int) m_cells.size(); ++ii )
508 similarity *= m_cells[ii]->Similarity( *other.m_cells[ii] );
509
510 return similarity;
511}
512
513
514static struct SCH_TABLE_DESC
515{
517 {
520
523
524 propMgr.AddProperty( new PROPERTY<SCH_TABLE, int>( _HKI( "Start X" ),
527 propMgr.AddProperty( new PROPERTY<SCH_TABLE, int>( _HKI( "Start Y" ),
530
531 const wxString tableProps = _( "Table Properties" );
532
533 propMgr.AddProperty( new PROPERTY<SCH_TABLE, bool>( _HKI( "External Border" ),
535 tableProps );
536
537 propMgr.AddProperty( new PROPERTY<SCH_TABLE, bool>( _HKI( "Header Border" ),
539 tableProps );
540
541 propMgr.AddProperty( new PROPERTY<SCH_TABLE, int>( _HKI( "Border Width" ),
544 tableProps );
545
546 propMgr.AddProperty( new PROPERTY_ENUM<SCH_TABLE, LINE_STYLE>( _HKI( "Border Style" ),
548 tableProps );
549
550 propMgr.AddProperty( new PROPERTY<SCH_TABLE, COLOR4D>( _HKI( "Border Color" ),
552 tableProps );
553
554 propMgr.AddProperty( new PROPERTY<SCH_TABLE, bool>( _HKI( "Row Separators" ),
556 tableProps );
557
558 propMgr.AddProperty( new PROPERTY<SCH_TABLE, bool>( _HKI( "Cell Separators" ),
560 tableProps );
561
562 propMgr.AddProperty( new PROPERTY<SCH_TABLE, int>( _HKI( "Separators Width" ),
565 tableProps );
566
567 propMgr.AddProperty( new PROPERTY_ENUM<SCH_TABLE, LINE_STYLE>( _HKI( "Separators Style" ),
569 tableProps );
570
571 propMgr.AddProperty( new PROPERTY<SCH_TABLE, COLOR4D>( _HKI( "Separators Color" ),
573 tableProps );
574 }
constexpr EDA_IU_SCALE schIUScale
Definition base_units.h:114
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
Definition box2.h:558
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition box2.h:658
constexpr const Vec GetCenter() const
Definition box2.h:230
constexpr bool Contains(const Vec &aPoint) const
Definition box2.h:168
constexpr bool Intersects(const BOX2< Vec > &aRect) const
Definition box2.h:311
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:399
The base class for create windows for drawing purpose.
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.h:113
std::vector< VECTOR2I > GetCornersInSequence(EDA_ANGLE angle) const
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
Definition eda_shape.h:215
void SetEnd(const VECTOR2I &aEnd)
Definition eda_shape.h:219
const EDA_ANGLE & GetTextAngle() const
Definition eda_text.h:147
virtual void ClearRenderCache()
Definition eda_text.cpp:677
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:105
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
Base plotter engine class.
Definition plotter.h:136
void MoveTo(const VECTOR2I &pos)
Definition plotter.h:308
virtual void SetDash(int aLineWidth, LINE_STYLE aLineStyle)=0
void FinishTo(const VECTOR2I &pos)
Definition plotter.h:318
RENDER_SETTINGS * RenderSettings()
Definition plotter.h:167
bool GetColorMode() const
Definition plotter.h:164
virtual void SetColor(const COLOR4D &color)=0
Provide class metadata.Helper macro to map type hashes to names.
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
static PROPERTY_MANAGER & Instance()
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
Holds all the data relating to one schematic.
Definition schematic.h:88
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:167
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
Definition sch_item.cpp:682
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Definition sch_item.cpp:244
void SetLayer(SCH_LAYER_ID aLayer)
Definition sch_item.h:322
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:51
SCH_LAYER_ID m_layer
Definition sch_item.h:753
void SetPosition(const VECTOR2I &aPos) override
Definition sch_shape.h:86
VECTOR2I GetPosition() const override
Definition sch_shape.h:85
int GetColSpan() const
int GetRowSpan() const
void SetBorderWidth(int aWidth)
Definition sch_table.h:61
void SetSeparatorsStyle(const LINE_STYLE aStyle)
Definition sch_table.h:82
LINE_STYLE GetSeparatorsStyle() const
Definition sch_table.h:87
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
bool operator<(const SCH_ITEM &aItem) const override
std::vector< SCH_TABLECELL * > m_cells
Definition sch_table.h:259
const STROKE_PARAMS & GetSeparatorsStroke() const
Definition sch_table.h:77
std::map< int, int > m_rowHeights
Definition sch_table.h:258
bool m_strokeColumns
Definition sch_table.h:253
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
bool StrokeExternal() const
Definition sch_table.h:53
void SetBorderColor(const COLOR4D &aColor)
Definition sch_table.h:73
bool m_strokeRows
Definition sch_table.h:252
int GetPositionY() const
Definition sch_table.h:117
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
void SetPositionX(int x)
Definition sch_table.h:114
LINE_STYLE GetBorderStyle() const
Definition sch_table.h:65
void SetSeparatorsColor(const COLOR4D &aColor)
Definition sch_table.h:95
int GetRowHeight(int aRow) const
Definition sch_table.h:139
void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode) override
COLOR4D GetSeparatorsColor() const
Definition sch_table.h:96
SCH_TABLE(int aLineWidth=0)
Definition sch_table.cpp:39
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
void DrawBorders(const std::function< void(const VECTOR2I &aPt1, const VECTOR2I &aPt2, const STROKE_PARAMS &aStroke)> &aCallback) const
int GetColWidth(int aCol) const
Definition sch_table.h:129
void SetStrokeHeaderSeparator(bool aDoStroke)
Definition sch_table.h:55
void AddCell(SCH_TABLECELL *aCell)
Definition sch_table.h:162
void SetSeparatorsWidth(int aWidth)
Definition sch_table.h:79
const STROKE_PARAMS & GetBorderStroke() const
Definition sch_table.h:59
bool m_StrokeHeaderSeparator
Definition sch_table.h:250
VECTOR2I GetCenter() const
int m_colCount
Definition sch_table.h:256
VECTOR2I GetPosition() const override
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
Definition sch_table.cpp:80
void SetStrokeExternal(bool aDoStroke)
Definition sch_table.h:52
VECTOR2I GetEnd() const
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
void SetPositionY(int y)
Definition sch_table.h:115
STROKE_PARAMS m_separatorsStroke
Definition sch_table.h:254
int GetColCount() const
Definition sch_table.h:120
bool StrokeHeaderSeparator() const
Definition sch_table.h:56
bool m_strokeExternal
Definition sch_table.h:249
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
std::map< int, int > m_colWidths
Definition sch_table.h:257
void SetStrokeColumns(bool aDoStroke)
Definition sch_table.h:98
SCH_TABLECELL * GetCell(int aRow, int aCol) const
Definition sch_table.h:147
int GetSeparatorsWidth() const
Definition sch_table.h:80
bool StrokeColumns() const
Definition sch_table.h:99
void SetPosition(const VECTOR2I &aPos) override
int GetPositionX() const
Definition sch_table.h:116
bool StrokeRows() const
Definition sch_table.h:102
STROKE_PARAMS m_borderStroke
Definition sch_table.h:251
int GetRowCount() const
Definition sch_table.h:122
void SetStrokeRows(bool aDoStroke)
Definition sch_table.h:101
void SetBorderStyle(const LINE_STYLE aStyle)
Definition sch_table.h:64
COLOR4D GetBorderColor() const
Definition sch_table.h:74
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
bool operator==(const SCH_ITEM &aOther) const override
int GetBorderWidth() const
Definition sch_table.h:62
void Normalize()
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
Simple container to manage line stroke parameters.
int GetWidth() const
LINE_STYLE GetLineStyle() const
KIGFX::COLOR4D GetColor() const
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
#define _(s)
RECURSE_MODE
Definition eda_item.h:50
INSPECT_RESULT
Definition eda_item.h:44
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
Definition eda_item.h:91
a few functions useful in geometry calculations.
@ LAYER_NOTES
Definition layer_ids.h:467
@ LAYER_NOTES_BACKGROUND
Definition layer_ids.h:469
@ LAYER_SELECTION_SHADOWS
Definition layer_ids.h:495
bool BoxHitTest(const VECTOR2I &aHitPoint, const BOX2I &aHittee, int aAccuracy)
Perform a point-to-box hit test.
#define _HKI(x)
Definition page_info.cpp:44
see class PGM_BASE
#define TYPE_HASH(x)
Definition property.h:74
@ PT_COORD
Coordinate expressed in distance units (mm/inch)
Definition property.h:65
@ PT_SIZE
Size expressed in distance units (mm/inch)
Definition property.h:63
#define REGISTER_TYPE(x)
static struct SCH_TABLE_DESC _SCH_TABLE_DESC
LINE_STYLE
Dashed line types.
VECTOR2I end
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
Definition trigo.cpp:229
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition typeinfo.h:78
@ SCH_TABLE_T
Definition typeinfo.h:169
@ SCH_TABLECELL_T
Definition typeinfo.h:170
@ SCH_LOCATE_ANY_T
Definition typeinfo.h:203
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695