KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_tablecell.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, see <https://www.gnu.org/licenses/>.
18 */
19
20#include <advanced_config.h>
21#include <common.h>
22#include <sch_edit_frame.h>
23#include <widgets/msgpanel.h>
24#include <string_utils.h>
25#include <sch_table.h>
26#include <sch_tablecell.h>
27#include <properties/property.h>
29
30#include <api/api_utils.h>
31#include <api/schematic/schematic_types.pb.h>
32
33
34SCH_TABLECELL::SCH_TABLECELL( int aLineWidth, FILL_T aFillType ) :
35 SCH_TEXTBOX( LAYER_NOTES, aLineWidth, aFillType, wxEmptyString, SCH_TABLECELL_T ),
36 m_colSpan( 1 ),
37 m_rowSpan( 1 )
38{
39}
40
41void SCH_TABLECELL::Serialize( kiapi::schematic::types::SchematicTableCell& aCell ) const
42{
43 aCell.set_column_span( m_colSpan );
44 aCell.set_row_span( m_rowSpan );
45
46 SCH_TEXTBOX::Serialize( *aCell.mutable_text_box(), schIUScale );
47 kiapi::common::PackCustomProperties( aCell.mutable_custom_properties(), *this );
48}
49
50
51void SCH_TABLECELL::Serialize( google::protobuf::Any& aContainer ) const
52{
53 kiapi::schematic::types::SchematicTableCell cell;
54 Serialize( cell );
55 aContainer.PackFrom( cell );
56}
57
58
59bool SCH_TABLECELL::Deserialize( const kiapi::schematic::types::SchematicTableCell& aCell )
60{
61 if( !aCell.has_text_box() )
62 return false;
63
64 if( !SCH_TEXTBOX::Deserialize( aCell.text_box(), schIUScale ) )
65 return false;
66
67 SetColSpan( aCell.column_span() );
68 SetRowSpan( aCell.row_span() );
69
70 kiapi::common::UnpackCustomProperties( aCell.custom_properties(), *this );
71
72 return true;
73}
74
75
76bool SCH_TABLECELL::Deserialize( const google::protobuf::Any& aContainer )
77{
78 kiapi::schematic::types::SchematicTableCell cell;
79
80 if( !aContainer.UnpackTo( &cell ) )
81 return false;
82
83 return Deserialize( cell );
84}
85
86
87
88
90{
91 SCH_TEXTBOX::swapData( aItem );
92
93 SCH_TABLECELL* cell = static_cast<SCH_TABLECELL*>( aItem );
94
95 std::swap( m_colSpan, cell->m_colSpan );
96 std::swap( m_rowSpan, cell->m_rowSpan );
97}
98
99
100wxString SCH_TABLECELL::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
101{
102 return wxString::Format( _( "Table Cell %s" ), GetAddr() );
103}
104
105
107{
108 const SCH_TABLE* table = static_cast<const SCH_TABLE*>( GetParent() );
109
110 for( int row = 0; row < table->GetRowCount(); ++row )
111 {
112 for( int col = 0; col < table->GetColCount(); ++col )
113 {
114 if( table->GetCell( row, col ) == this )
115 return row;
116 }
117 }
118
119 return -1;
120}
121
122
124{
125 const SCH_TABLE* table = static_cast<const SCH_TABLE*>( GetParent() );
126
127 for( int row = 0; row < table->GetRowCount(); ++row )
128 {
129 for( int col = 0; col < table->GetColCount(); ++col )
130 {
131 if( table->GetCell( row, col ) == this )
132 return col;
133 }
134 }
135
136 return -1;
137}
138
139
141{
142 return wxString::Format( wxT( "%c%d" ), 'A' + GetColumn() % 26, GetRow() );
143}
144
145
156static bool parseCellAddress( const wxString& aAddr, int& aRow, int& aCol )
157{
158 if( aAddr.IsEmpty() )
159 return false;
160
161 // Extract column part (letters) and row part (numbers)
162 size_t i = 0;
163 wxString colPart;
164
165 // Read column letters (A-Z, AA-ZZ, etc.)
166 while( i < aAddr.Length() && wxIsalpha( aAddr[i] ) )
167 {
168 colPart += wxToupper( aAddr[i] );
169 i++;
170 }
171
172 // Must have at least one letter
173 if( colPart.IsEmpty() )
174 return false;
175
176 // Convert column letters to 0-based index (A=0, B=1, ..., Z=25, AA=26, AB=27, etc.)
177 aCol = 0;
178 for( size_t j = 0; j < colPart.Length(); j++ )
179 {
180 aCol = aCol * 26 + ( colPart[j] - 'A' + 1 );
181 }
182 aCol -= 1; // Convert to 0-based
183
184 // Read row number (0-based)
185 wxString rowPart = aAddr.Mid( i );
186 if( rowPart.IsEmpty() )
187 return false;
188
189 // Convert row string to number (already 0-based in address string)
190 long rowNum;
191 if( !rowPart.ToLong( &rowNum ) || rowNum < 0 )
192 return false;
193
194 aRow = rowNum; // Already 0-based
195
196 return true;
197}
198
199
200wxString SCH_TABLECELL::GetShownText( const RENDER_SETTINGS* aSettings, const SCH_SHEET_PATH* aPath,
201 RESOLUTION_CONTEXT aContext, int aDepth ) const
202{
203 // Local depth counter for ResolveTextVars iteration tracking (separate from cross-cell aDepth)
204 int depth = 0;
205
206 SCH_SHEET* sheet = nullptr;
207
208 if( aPath )
209 sheet = aPath->Last();
210
211 // Text variable resolver supporting:
212 // - ${ROW}, ${COL}, ${ADDR} - cell position variables
213 // - @{expression} - math expression evaluation
214 // - ${CELL("A1")} or ${CELL(row,col)} - reference to another cell's evaluated text
215 // - \${...} and \@{...} - escape sequences for literal display
216 std::function<bool( wxString* )> tableCellResolver =
217 [&]( wxString* token ) -> bool
218 {
219 if( token->IsSameAs( wxT( "ROW" ) ) )
220 {
221 *token = wxString::Format( wxT( "%d" ), GetRow() ); // 0-based
222 return true;
223 }
224 else if( token->IsSameAs( wxT( "COL" ) ) )
225 {
226 *token = wxString::Format( wxT( "%d" ), GetColumn() ); // 0-based
227 return true;
228 }
229 else if( token->IsSameAs( wxT( "ADDR" ) ) )
230 {
231 *token = GetAddr();
232 return true;
233 }
234 else if( token->StartsWith( wxT( "CELL(" ) ) && token->EndsWith( wxT( ")" ) ) )
235 {
236 // Handle CELL("A0") or CELL(0, 1) syntax
237 wxString args = token->Mid( 5, token->Length() - 6 ); // Extract arguments
238 args.Trim( true ).Trim( false ); // Remove whitespace
239
240 SCH_TABLE* table = static_cast<SCH_TABLE*>( GetParent() );
241 if( !table )
242 {
243 *token = wxT( "<Unresolved: CELL() requires table context>" );
244 return true;
245 }
246
247 int targetRow = -1;
248 int targetCol = -1;
249
250 // Check if it's cell("A1") format (string argument with quotes)
251 if( args.StartsWith( wxT( "\"" ) ) && args.EndsWith( wxT( "\"" ) ) )
252 {
253 wxString addr = args.Mid( 1, args.Length() - 2 ); // Remove quotes
254 if( !parseCellAddress( addr, targetRow, targetCol ) )
255 {
256 *token = wxString::Format( wxT( "<Unresolved: Invalid cell address: %s>" ), addr );
257 return true;
258 }
259 }
260 // Check if it's cell(row, col) format (two numeric arguments)
261 else if( args.Find( ',' ) != wxNOT_FOUND )
262 {
263 wxString rowStr = args.BeforeFirst( ',' ).Trim( true ).Trim( false );
264 wxString colStr = args.AfterFirst( ',' ).Trim( true ).Trim( false );
265
266 long rowNum, colNum;
267 if( !rowStr.ToLong( &rowNum ) || !colStr.ToLong( &colNum ) )
268 {
269 *token = wxString::Format( wxT( "<Unresolved: Invalid cell coordinates: %s>" ), args );
270 return true;
271 }
272
273 // Arguments are already 0-based
274 targetRow = rowNum;
275 targetCol = colNum;
276 }
277 else
278 {
279 *token = wxString::Format( wxT( "<Unresolved: Invalid CELL() syntax: %s>" ), args );
280 return true;
281 }
282
283 // Check bounds
284 if( targetRow < 0 || targetRow >= table->GetRowCount() || targetCol < 0
285 || targetCol >= table->GetColCount() )
286 {
287 wxString cellAddr;
288 if( targetRow >= 0 && targetCol >= 0 )
289 {
290 char colLetter = 'A' + ( targetCol % 26 );
291 cellAddr = wxString::Format( wxT( "%c%d" ), colLetter, targetRow );
292 }
293 else
294 {
295 cellAddr = args;
296 }
297 *token = wxString::Format( wxT( "<Unresolved: Cell %s not found>" ), cellAddr );
298 return true;
299 }
300
301 // Get the target cell and return its evaluated text
302 SCH_TABLECELL* targetCell = table->GetCell( targetRow, targetCol );
303 if( targetCell )
304 {
305 // Check for excessive recursion depth (circular references)
307 if( aDepth >= maxDepth )
308 {
309 *token = wxT( "<Circular reference>" );
310 return true;
311 }
312
313 *token = targetCell->GetShownText( aSettings, aPath, aContext, aDepth + 1 );
314 return true;
315 }
316 else
317 {
318 *token = wxT( "<Unresolved: Cell not found>" );
319 return true;
320 }
321 }
322
323 // Fall back to sheet variables
324 if( sheet )
325 {
326 if( sheet->ResolveTextVar( aPath, token, depth + 1 ) )
327 return true;
328 }
329
330 return false;
331 };
332
333 wxString text = EDA_TEXT::GetShownText( aContext, depth );
334
335 if( HasTextVars() && aContext != RAW_VALUE )
336 {
337 text = ResolveTextVars( text, &tableCellResolver, depth );
338
339 // Only do this at the top level (aDepth == 0) to avoid premature unescaping in nested CELL() calls
340 if( aDepth == 0 )
341 FinalizeTextVarExpansion( text, aContext );
342 }
343
344 // Only linebreak when at top level
345 if( aDepth == 0 )
346 {
347 VECTOR2I size = GetEnd() - GetStart();
348 int colWidth;
349
350 if( GetTextAngle().IsVertical() )
351 colWidth = abs( size.y ) - ( GetMarginTop() + GetMarginBottom() );
352 else
353 colWidth = abs( size.x ) - ( GetMarginLeft() + GetMarginRight() );
354
356 IsBold(), IsItalic() );
357 }
358
359 return text;
360}
361
362
364{
365 return static_cast<SCH_TABLE*>( GetParent() )->GetColWidth( GetColumn() );
366}
367
368
370{
371 SCH_TABLE* table = static_cast<SCH_TABLE*>( GetParent() );
372
373 table->SetColWidth( GetColumn(), aWidth );
374 table->Normalize();
375}
376
377
379{
380 return static_cast<SCH_TABLE*>( GetParent() )->GetRowHeight( GetRow() );
381}
382
383
385{
386 SCH_TABLE* table = static_cast<SCH_TABLE*>( GetParent() );
387
388 table->SetRowHeight( GetRow(), aHeight );
389 table->Normalize();
390}
391
392
393void SCH_TABLECELL::Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts, int aUnit,
394 int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed )
395{
396 const int cell_body_style = -1; // flag to disable box ouline plotting
397
398 if( m_colSpan >= 1 && m_rowSpan >= 1 )
399 SCH_TEXTBOX::Plot( aPlotter, aBackground, aPlotOpts, aUnit, cell_body_style, aOffset, aDimmed );
400}
401
402
403void SCH_TABLECELL::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList )
404{
405 aList.emplace_back( _( "Table Cell" ), GetAddr() );
406
407 // Don't use GetShownText() here; we want to show the user the variable references
408 aList.emplace_back( _( "Text" ), KIUI::EllipsizeStatusText( aFrame, GetText() ) );
409
410 aList.emplace_back( _( "Cell Width" ), aFrame->MessageTextFromValue( std::abs( GetEnd().x - GetStart().x ) ) );
411 aList.emplace_back( _( "Cell Height" ), aFrame->MessageTextFromValue( std::abs( GetEnd().y - GetStart().y ) ) );
412
413 aList.emplace_back( _( "Font" ), GetFont() ? GetFont()->GetName() : _( "Default" ) );
414
415 wxString textStyle[] = { _( "Normal" ), _( "Italic" ), _( "Bold" ), _( "Bold Italic" ) };
416 int style = IsBold() && IsItalic() ? 3 : IsBold() ? 2 : IsItalic() ? 1 : 0;
417 aList.emplace_back( _( "Style" ), textStyle[style] );
418
419 aList.emplace_back( _( "Text Size" ), aFrame->MessageTextFromValue( GetTextWidth() ) );
420}
421
422
423double SCH_TABLECELL::Similarity( const SCH_ITEM& aOtherItem ) const
424{
425 if( aOtherItem.Type() != Type() )
426 return 0.0;
427
428 const SCH_TABLECELL& other = static_cast<const SCH_TABLECELL&>( aOtherItem );
429
430 double similarity = 1.0;
431
432 if( m_colSpan != other.m_colSpan )
433 similarity *= 0.9;
434
435 if( m_rowSpan != other.m_rowSpan )
436 similarity *= 0.9;
437
438 similarity *= SCH_TEXTBOX::Similarity( other );
439
440 return similarity;
441}
442
443
444bool SCH_TABLECELL::operator==( const SCH_ITEM& aOtherItem ) const
445{
446 if( aOtherItem.Type() != Type() )
447 return false;
448
449 const SCH_TABLECELL& other = static_cast<const SCH_TABLECELL&>( aOtherItem );
450
451 return *this == other;
452}
453
454
455bool SCH_TABLECELL::operator==( const SCH_TABLECELL& aOtherItem ) const
456{
457 return m_colSpan == aOtherItem.m_colSpan && m_rowSpan == aOtherItem.m_rowSpan
458 && SCH_TEXTBOX::operator==( aOtherItem );
459}
460
461
463{
465 {
468
477
478 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Start X" ) );
479 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Start Y" ) );
480 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "End X" ) );
481 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "End Y" ) );
482
483 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Shape" ) );
484 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Width" ) );
485 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Height" ) );
486 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Fill" ) );
487 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Fill Color" ) );
488 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Line Width" ) );
489 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Line Style" ) );
490 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Line Color" ) );
491 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_SHAPE ), _HKI( "Corner Radius" ) );
492
493 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Width" ) );
494 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Height" ) );
495 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Thickness" ) );
496 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Orientation" ) );
497 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Mirrored" ) );
498 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Visible" ) );
499 propMgr.Mask( TYPE_HASH( SCH_TABLECELL ), TYPE_HASH( EDA_TEXT ), _HKI( "Hyperlink" ) );
500
501 const wxString tableProps = _( "Table" );
502
503 propMgr.AddProperty( new PROPERTY<SCH_TABLECELL, int>( _HKI( "Column Width" ),
505 tableProps );
506
507 propMgr.AddProperty( new PROPERTY<SCH_TABLECELL, int>( _HKI( "Row Height" ),
509 tableProps );
510
511 const wxString cellProps = _( "Cell Properties" );
512
513 propMgr.AddProperty( new PROPERTY<SCH_TABLECELL, bool, EDA_SHAPE>( _HKI( "Background Fill" ),
515 cellProps );
516
517 propMgr.AddProperty( new PROPERTY<SCH_TABLECELL, COLOR4D, EDA_SHAPE>( _HKI( "Background Fill Color" ),
519 cellProps )
521 }
constexpr EDA_IU_SCALE schIUScale
Definition base_units.h:123
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
The base class for create windows for drawing purpose.
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
EDA_ITEM * GetParent() const
Definition eda_item.h:112
virtual void SetFilled(bool aFlag)
Definition eda_shape.h:142
void SetFillColor(const COLOR4D &aColor)
Definition eda_shape.h:160
bool IsSolidFill() const
Definition eda_shape.h:123
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
Definition eda_shape.h:325
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
Definition eda_shape.h:275
COLOR4D GetFillColor() const
Definition eda_shape.h:159
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition eda_text.h:94
virtual VECTOR2I GetTextSize() const
Definition eda_text.h:301
bool IsItalic() const
Definition eda_text.h:200
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:118
KIFONT::FONT * GetFont() const
Definition eda_text.h:286
virtual wxString GetShownText(RESOLUTION_CONTEXT aContext, int aDepth=0) const
Return the string actually shown after processing of the base text.
Definition eda_text.h:128
virtual int GetTextWidth() const
Definition eda_text.h:304
bool HasTextVars() const
Indicates the ShownText has text var references which need to be processed.
Definition eda_text.h:139
virtual EDA_ANGLE GetTextAngle() const
Definition eda_text.h:178
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
Definition eda_text.cpp:422
bool IsBold() const
Definition eda_text.h:215
void LinebreakText(wxString &aText, int aColumnWidth, const VECTOR2I &aGlyphSize, int aThickness, bool aBold, bool aItalic) const
Insert characters into text to ensure that no lines are wider than aColumnWidth.
Definition font.cpp:609
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
Base plotter engine class.
Definition plotter.h:136
PROPERTY_BASE & SetIsHiddenFromRulesEditor(bool aHide=true)
Definition property.h:332
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.
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
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.
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:52
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition sch_sheet.h:48
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
int GetRowHeight() const
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
wxString GetShownText(const RENDER_SETTINGS *aSettings, const SCH_SHEET_PATH *aPath, RESOLUTION_CONTEXT aContext, int aDepth=0) const override
SCH_TABLECELL(int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL)
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
wxString GetAddr() const
bool operator==(const SCH_TABLECELL &aOther) const
void SetRowSpan(int aSpan)
void SetColumnWidth(int aWidth)
int GetColumn() const
void SetColSpan(int aSpan)
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
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.
void SetRowHeight(int aHeight)
int GetColumnWidth() const
int GetRow() const
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
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.
int GetMarginBottom() const
Definition sch_textbox.h:82
bool operator==(const SCH_ITEM &aOther) const override
int GetMarginLeft() const
Definition sch_textbox.h:79
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
int GetMarginRight() const
Definition sch_textbox.h:81
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.
int GetMarginTop() const
Definition sch_textbox.h:80
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const override
SCH_TEXTBOX(SCH_LAYER_ID aLayer=LAYER_NOTES, int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL, const wxString &aText=wxEmptyString, KICAD_T aType=SCH_TEXTBOX_T)
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
void FinalizeTextVarExpansion(wxString &aText, RESOLUTION_CONTEXT aContext)
Definition common.cpp:88
wxString ResolveTextVars(const wxString &aSource, const std::function< bool(wxString *)> *aResolver, int &aDepth)
Multi-pass text variable expansion and math expression evaluation.
Definition common.cpp:333
RESOLUTION_CONTEXT
Definition common.h:87
@ RAW_VALUE
Definition common.h:94
#define _(s)
FILL_T
Definition eda_fill.h:29
int m_ResolveTextRecursionDepth
The number of recursions to resolve text variables.
@ LAYER_NOTES
Definition layer_ids.h:489
Message panel definition file.
KICOMMON_API wxString EllipsizeStatusText(wxWindow *aWindow, const wxString &aString)
Ellipsize text (at the end) to be no more than 1/3 of the window width.
KICOMMON_API void PackCustomProperties(google::protobuf::RepeatedPtrField< types::CustomProperty > *aOutput, const EDA_ITEM &aItem)
KICOMMON_API void UnpackCustomProperties(const google::protobuf::RepeatedPtrField< types::CustomProperty > &aInput, EDA_ITEM &aItem)
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
Definition eda_angle.h:411
#define _HKI(x)
Definition page_info.cpp:40
#define TYPE_HASH(x)
Definition property.h:74
@ PT_SIZE
Size expressed in distance units (mm/inch)
Definition property.h:63
#define REGISTER_TYPE(x)
static struct SCH_TABLECELL_DESC _SCH_TABLECELL_DESC
static bool parseCellAddress(const wxString &aAddr, int &aRow, int &aCol)
Parse a cell address string like "A0" or "B12" into 0-based row and column indices.
@ SCH_TABLECELL_T
Definition typeinfo.h:162
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683