KiCad PCB EDA Suite
Loading...
Searching...
No Matches
eeschema/dialogs/dialog_text_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) 2013 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2013 Wayne Stambaugh <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <sch_edit_frame.h>
27#include <symbol_edit_frame.h>
29#include <widgets/font_choice.h>
31#include <widgets/wx_combobox.h>
33#include <sch_textbox.h>
34#include <confirm.h>
35#include <schematic.h>
36#include <sch_commit.h>
38#include <scintilla_tricks.h>
40#include <string_utils.h>
41
42
45 m_frame( aParent ),
46 m_currentItem( aTextItem ),
47 m_currentText( dynamic_cast<EDA_TEXT*>( aTextItem ) ),
48 m_textSize( aParent, m_textSizeLabel, m_textSizeCtrl, m_textSizeUnits ),
49 m_borderWidth( aParent, m_borderWidthLabel, m_borderWidthCtrl, m_borderWidthUnits ),
50 m_scintillaTricks( nullptr ),
51 m_helpWindow( nullptr )
52{
53 m_isSymbolEditor = dynamic_cast<SYMBOL_EDIT_FRAME*>( aParent ) != nullptr;
54
55 COLOR_SETTINGS* colorSettings = m_frame->GetColorSettings();
56 COLOR4D schematicBackground = colorSettings->GetColor( LAYER_SCHEMATIC_BACKGROUND );
57
58 if( aTextItem->Type() == SCH_TEXTBOX_T )
59 {
60 SetTitle( _( "Text Box Properties" ) );
61
62 m_borderColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
63 m_borderColorSwatch->SetSwatchBackground( schematicBackground );
64
65 for( const auto& [ lineStyle, lineStyleDesc ] : lineTypeNames )
66 m_borderStyleCombo->Append( lineStyleDesc.name, KiBitmapBundle( lineStyleDesc.bitmap ) );
67
68 m_fillColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
69 m_fillColorSwatch->SetSwatchBackground( schematicBackground );
70
72 m_infoBar->ShowMessage( _( "Note: individual item colors overridden in "
73 "Preferences." ) );
74 }
75 else
76 {
77 m_borderCheckbox->Show( false );
78 m_borderWidth.Show( false );
79 m_borderColorLabel->Show( false );
80 m_panelBorderColor->Show( false );
81 m_borderStyleLabel->Show( false );
82 m_borderStyleCombo->Show( false );
83 m_fillColorLabel->Show( false );
84 m_panelFillColor->Show( false );
85 m_filledCtrl->Show( false );
86 }
87
88 // DIALOG_SHIM needs a unique hash_key because classname is not sufficient because the
89 // different text item types (and even whether or not we're within the symbol editor) cause
90 // different dialog layouts).
91 m_hash_key = TO_UTF8( GetTitle() + aParent->GetName() );
92
93 m_textCtrl->SetEOLMode( wxSTC_EOL_LF );
94
95#ifdef _WIN32
96 // Without this setting, on Windows, some esoteric unicode chars create display issue
97 // in a wxStyledTextCtrl.
98 // for SetTechnology() info, see https://www.scintilla.org/ScintillaDoc.html#SCI_SETTECHNOLOGY
99 m_textCtrl->SetTechnology( wxSTC_TECHNOLOGY_DIRECTWRITE );
100#endif
101
102 m_scintillaTricks = new SCINTILLA_TRICKS( m_textCtrl, wxT( "{}" ), false,
103 // onAcceptFn
104 [this]( wxKeyEvent& aEvent )
105 {
106 wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
107 },
108
109 // onCharFn
110 [this]( wxStyledTextEvent& aEvent )
111 {
113 // getTokensFn
114 [this]( const wxString& xRef, wxArrayString* tokens )
115 {
116 getContextualTextVars( xRef, tokens );
117 } );
118 } );
119
120 m_textEntrySizer->AddGrowableRow( 0 );
121
122 m_textColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
123 m_textColorSwatch->SetSwatchBackground( schematicBackground );
124
126
128
130 m_bold->SetBitmap( KiBitmapBundle( BITMAPS::text_bold ) );
132 m_italic->SetBitmap( KiBitmapBundle( BITMAPS::text_italic ) );
133
135
137 m_hAlignLeft->SetBitmap( KiBitmapBundle( BITMAPS::text_align_left ) );
139 m_hAlignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_align_center ) );
141 m_hAlignRight->SetBitmap( KiBitmapBundle( BITMAPS::text_align_right ) );
142
144
146 m_vAlignTop->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_top ) );
148 m_vAlignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_center ) );
150 m_vAlignBottom->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_bottom ) );
151
153
155 m_horizontal->SetBitmap( KiBitmapBundle( BITMAPS::text_horizontal ) );
157 m_vertical->SetBitmap( KiBitmapBundle( BITMAPS::text_vertical ) );
158
160
162
163 if( SCH_EDIT_FRAME* schematicEditor = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
164 {
165 const SCHEMATIC& schematic = schematicEditor->Schematic();
166
167 for( const SCH_SHEET_PATH& sheet : schematic.Hierarchy() )
168 {
169 wxString sheetPageNum = sheet.GetPageNumber();
170 wxString sheetName = sheet.size() == 1 ? _( "<root sheet>" )
171 : sheet.Last()->GetName();
172
173 m_hyperlinkCombo->Append( wxT( "#" ) + sheetPageNum,
174 wxString::Format( _( "Page %s (%s)" ),
175 sheetPageNum,
176 sheetName ) );
177 m_pageNumbers.push_back( sheetPageNum );
178 }
179
180 m_hyperlinkCombo->Append( wxT( "---" ) );
181 m_hyperlinkCombo->Append( wxT( "file://" ), wxT( "file://..." ) );
182 m_hyperlinkCombo->Append( wxT( "http://" ), wxT( "http://..." ) );
183 m_hyperlinkCombo->Append( wxT( "https://" ), wxT( "https://..." ) );
184 }
185 else
186 {
187 m_excludeFromSim->Hide();
188 m_syntaxHelp->Hide();
189 m_hyperlinkCb->Hide();
190 m_hyperlinkCombo->Hide();
191 }
192
194 Layout();
195
196 m_hAlignLeft->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onHAlignButton, this );
197 m_hAlignCenter->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onHAlignButton, this );
198 m_hAlignRight->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onHAlignButton, this );
199 m_vAlignTop->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onVAlignButton, this );
200 m_vAlignCenter->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onVAlignButton, this );
201 m_vAlignBottom->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onVAlignButton, this );
202 m_horizontal->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onTextAngleButton, this );
203 m_vertical->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onTextAngleButton, this );
204
205 // Now all widgets have the size fixed, call FinishDialogSettings
207}
208
209
211{
212 delete m_scintillaTricks;
213
214 if( m_helpWindow )
215 m_helpWindow->Destroy();
216}
217
218
219void DIALOG_TEXT_PROPERTIES::getContextualTextVars( const wxString& aCrossRef,
220 wxArrayString* aTokens )
221{
222 SCHEMATIC* schematic = m_currentItem->Schematic();
223
224 if( !aCrossRef.IsEmpty() )
225 {
226 SCH_SYMBOL* refSymbol = nullptr;
227
228 if( schematic )
229 {
231 schematic->Hierarchy().GetSymbols( refs );
232
233 for( int jj = 0; jj < (int) refs.GetCount(); jj++ )
234 {
235 SCH_REFERENCE& ref = refs[jj];
236
237 if( ref.GetSymbol()->GetRef( &ref.GetSheetPath(), true ) == aCrossRef )
238 {
239 refSymbol = ref.GetSymbol();
240 break;
241 }
242 }
243 }
244
245 if( refSymbol )
246 refSymbol->GetContextualTextVars( aTokens );
247 }
248 else
249 {
250 if( schematic && schematic->CurrentSheet().Last() )
251 {
252 schematic->CurrentSheet().Last()->GetContextualTextVars( aTokens );
253 }
254 else
255 {
256 for( std::pair<wxString, wxString> entry : Prj().GetTextVars() )
257 aTokens->push_back( entry.first );
258 }
259 }
260}
261
262
264{
265 if( !wxDialog::TransferDataToWindow() )
266 return false;
267
270
271 wxString text = m_currentText->GetText();
272
273 // show text variable cross-references in a human-readable format
274 if( SCHEMATIC* schematic = m_currentItem->Schematic() )
275 text = schematic->ConvertKIIDsToRefs( text );
276
277 m_textCtrl->SetValue( text );
278 m_textCtrl->EmptyUndoBuffer();
279
280 if( !m_isSymbolEditor )
282
286
289
290 switch( m_currentText->GetHorizJustify() )
291 {
296 }
297
298 switch( m_currentText->GetVertJustify() )
299 {
300 case GR_TEXT_V_ALIGN_TOP: m_vAlignTop->Check(); break;
304 }
305
307 m_vertical->Check();
308 else
310
312 {
313 SCH_TEXTBOX* textBox = static_cast<SCH_TEXTBOX*>( m_currentItem );
314
315 m_borderCheckbox->SetValue( textBox->GetWidth() >= 0 );
316
317 if( textBox->GetWidth() >= 0 )
318 m_borderWidth.SetValue( textBox->GetWidth() );
319
321
322 int style = static_cast<int>( textBox->GetStroke().GetLineStyle() );
323
324 if( style >= 0 && style < (int) lineTypeNames.size() )
325 m_borderStyleCombo->SetSelection( style );
326 else
327 m_borderStyleCombo->SetSelection( 0 );
328
329 m_borderWidth.Enable( textBox->GetWidth() >= 0 );
330 m_borderColorLabel->Enable( textBox->GetWidth() >= 0 );
331 m_borderColorSwatch->Enable( textBox->GetWidth() >= 0 );
332 m_borderStyleLabel->Enable( textBox->GetWidth() >= 0 );
333 m_borderStyleCombo->Enable( textBox->GetWidth() >= 0 );
334
335 m_filledCtrl->SetValue( textBox->IsFilled() );
336 m_fillColorSwatch->SetSwatchColor( textBox->GetFillColor(), false );
337
338 m_fillColorLabel->Enable( textBox->IsFilled() );
339 m_fillColorSwatch->Enable( textBox->IsFilled() );
340 }
341
342 if( m_isSymbolEditor )
343 {
345
347 m_commonToAllUnits->SetValue( symbol->IsMulti() && m_currentItem->GetUnit() == 0 );
348 m_commonToAllUnits->Enable( symbol->IsMulti() );
350 && m_currentItem->GetBodyStyle() == 0 );
352 }
353
354 return true;
355}
356
357
358void DIALOG_TEXT_PROPERTIES::onBorderChecked( wxCommandEvent& aEvent )
359{
360 bool border = m_borderCheckbox->GetValue();
361
362 if( border && m_borderWidth.GetValue() < 0 )
364
365 m_borderWidth.Enable( border );
366 m_borderColorLabel->Enable( border );
367 m_borderColorSwatch->Enable( border );
368 m_borderStyleLabel->Enable( border );
369 m_borderStyleCombo->Enable( border );
370}
371
372
373void DIALOG_TEXT_PROPERTIES::onFillChecked( wxCommandEvent& aEvent )
374{
375 bool fill = m_filledCtrl->GetValue();
376
377 m_fillColorLabel->Enable( fill );
378 m_fillColorSwatch->Enable( fill );
379}
380
381
382void DIALOG_TEXT_PROPERTIES::onHyperlinkChecked( wxCommandEvent& aEvent )
383{
384 if( aEvent.IsChecked() && m_hyperlinkCombo->GetValue().IsEmpty() )
385 {
386 m_hyperlinkCombo->ChangeValue( m_lastLink );
387 }
388 else if( !aEvent.IsChecked() && !m_hyperlinkCombo->GetValue().IsEmpty() )
389 {
390 m_lastLink = m_hyperlinkCombo->GetValue();
391 m_hyperlinkCombo->SetValue( wxEmptyString );
392 }
393
394 aEvent.Skip();
395}
396
397
398void DIALOG_TEXT_PROPERTIES::onHyperlinkText( wxCommandEvent& event )
399{
400 if( !m_hyperlinkCombo->GetValue().IsEmpty() )
401 m_hyperlinkCb->SetValue( true );
402}
403
404
405void DIALOG_TEXT_PROPERTIES::onHyperlinkCombo( wxCommandEvent& aEvent )
406{
407 if( aEvent.GetSelection() >= 0 )
408 {
409 m_hyperlinkCb->SetValue( true );
410 m_hyperlinkCombo->SetInsertionPointEnd();
411 }
412}
413
414
415void DIALOG_TEXT_PROPERTIES::onHAlignButton( wxCommandEvent& aEvent )
416{
418 {
419 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
420 btn->Check( false );
421 }
422}
423
424
425void DIALOG_TEXT_PROPERTIES::onVAlignButton( wxCommandEvent& aEvent )
426{
428 {
429 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
430 btn->Check( false );
431 }
432}
433
434
435void DIALOG_TEXT_PROPERTIES::onTextAngleButton( wxCommandEvent& aEvent )
436{
437 for( BITMAP_BUTTON* btn : { m_horizontal, m_vertical } )
438 {
439 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
440 btn->Check( false );
441 }
442}
443
444
446{
447 if( !wxDialog::TransferDataFromWindow() )
448 return false;
449
450 // Don't allow text to disappear; it can be difficult to correct if you can't select it
451 if( !m_textSize.Validate( 0.01, 1000.0, EDA_UNITS::MILLIMETRES ) )
452 return false;
453
454 SCH_COMMIT commit( m_frame );
455
456 /* save old text in undo list if not already in edit */
457 if( m_currentItem->GetEditFlags() == 0 )
459
461
462 wxString text = m_textCtrl->GetValue();
463
464 // convert any text variable cross-references to their UUIDs
465 if( SCHEMATIC* schematic = m_currentItem->Schematic() )
466 text = schematic->ConvertRefsToKIIDs( text );
467
468#ifdef __WXMAC__
469 // On macOS CTRL+Enter produces '\r' instead of '\n' regardless of EOL setting
470 text.Replace( "\r", "\n" );
471#elif defined( __WINDOWS__ )
472 // On Windows, a new line is coded as \r\n. We use only \n in KiCad files and in
473 // drawing routines so strip the \r char.
474 text.Replace( "\r", "" );
475#endif
476
478 {
479 // Textboxes have a defined extent and so are allowed to be empty
481 }
482 else if( !text.IsEmpty() )
483 {
485 }
486 else
487 {
488 // Other text items do not have defined extents, and so will disappear if empty
489 DisplayError( this, _( "Text can not be empty." ) );
490 return false;
491 }
492
494
495 if( SYMBOL_EDIT_FRAME* symbolEditor = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame ) )
496 {
498
499 if( !m_commonToAllUnits->GetValue() )
500 m_currentItem->SetUnit( symbolEditor->GetUnit() );
501 else
503
504 if( !m_commonToAllBodyStyles->GetValue() )
505 m_currentItem->SetBodyStyle( symbolEditor->GetBodyStyle() );
506 else
508 }
509
511 {
512 DisplayError( this, _( "Invalid hyperlink destination. Please enter either a valid URL "
513 "(e.g. file:// or http(s)://) or \"#<page number>\" to create "
514 "a hyperlink to a page in this schematic." ) );
515 return false;
516 }
517 else
518 {
520 }
521
525
527 {
529 m_italic->IsChecked() ) );
530 }
531
532 // Must come after SetTextSize()
535
537
538 if( m_hAlignRight->IsChecked() )
540 else if( m_hAlignCenter->IsChecked() )
542 else
544
547 else if( m_vAlignCenter->IsChecked() )
549 else
551
552 if( m_vertical->IsChecked() )
554 else
556
558 {
559 SCH_TEXTBOX* textBox = static_cast<SCH_TEXTBOX*>( m_currentItem );
560
561 STROKE_PARAMS stroke = textBox->GetStroke();
562
563 if( m_borderCheckbox->GetValue() )
564 stroke.SetWidth( std::max( 0, m_borderWidth.GetIntValue() ) );
565 else
566 stroke.SetWidth( -1 );
567
568 auto it = lineTypeNames.begin();
569 std::advance( it, m_borderStyleCombo->GetSelection() );
570
571 if( it == lineTypeNames.end() )
572 stroke.SetLineStyle( LINE_STYLE::SOLID );
573 else
574 stroke.SetLineStyle( it->first );
575
577
578 textBox->SetStroke( stroke );
579
580 textBox->SetFillMode( m_filledCtrl->GetValue() ? FILL_T::FILLED_WITH_COLOR
581 : FILL_T::NO_FILL );
583 }
584
585 if( !commit.Empty() )
586 commit.Push( _( "Edit Text Properties" ) );
587
588 return true;
589}
590
591
592void DIALOG_TEXT_PROPERTIES::OnFormattingHelp( wxHyperlinkEvent& aEvent )
593{
595}
596
597
599{
602
603 event.Skip();
604}
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap)
Definition: bitmap.cpp:110
A bitmap button widget that behaves like an AUI toolbar item's button when it is drawn.
Definition: bitmap_button.h:42
void SetIsRadioButton()
bool IsChecked() const
void Check(bool aCheck=true)
Check the control.
void SetIsSeparator()
Render button as a toolbar separator.
void SetIsCheckButton()
Setup the control as a two-state button (checked or unchecked).
void SetBitmap(const wxBitmapBundle &aBmp)
Set the bitmap shown when the button is enabled.
Color settings are a bit different than most of the settings objects in that there can be more than o...
bool GetOverrideSchItemColors() const
COLOR4D GetColor(int aLayer) const
void SetSwatchColor(const KIGFX::COLOR4D &aColor, bool aSendEvent)
Set the current swatch color directly.
KIGFX::COLOR4D GetSwatchColor() const
void SetDefaultColor(const KIGFX::COLOR4D &aColor)
Sets the color that will be chosen with the "Reset to Default" button in the chooser.
void SetSwatchBackground(const KIGFX::COLOR4D &aBackground)
Set the swatch background color.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Modify a given item in the model.
Definition: commit.h:108
bool Empty() const
Definition: commit.h:150
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:102
void SetupStandardButtons(std::map< int, wxString > aLabels={})
std::string m_hash_key
Definition: dialog_shim.h:230
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
void onHyperlinkText(wxCommandEvent &aEvent) override
void onFillChecked(wxCommandEvent &aEvent) override
void onMultiLineTCLostFocus(wxFocusEvent &event) override
void onBorderChecked(wxCommandEvent &aEvent) override
void OnFormattingHelp(wxHyperlinkEvent &aEvent) override
DIALOG_TEXT_PROPERTIES(SCH_BASE_FRAME *parent, SCH_ITEM *aTextItem)
void onHyperlinkCombo(wxCommandEvent &aEvent) override
void getContextualTextVars(const wxString &aCrossRef, wxArrayString *aTokens)
void onHyperlinkChecked(wxCommandEvent &aEvent) override
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
EDA_ITEM_FLAGS GetEditFlags() const
Definition: eda_item.h:133
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:101
bool IsFilled() const
Definition: eda_shape.h:98
void SetFillColor(const COLOR4D &aColor)
Definition: eda_shape.h:119
COLOR4D GetFillColor() const
Definition: eda_shape.h:118
virtual int GetWidth() const
Definition: eda_shape.h:122
void SetFillMode(FILL_T aFill)
Definition: eda_shape.h:113
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition: eda_text.h:80
void SetTextColor(const COLOR4D &aColor)
Definition: eda_text.h:256
COLOR4D GetTextColor() const
Definition: eda_text.h:257
bool IsItalic() const
Definition: eda_text.h:156
const EDA_ANGLE & GetTextAngle() const
Definition: eda_text.h:134
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
Definition: eda_text.cpp:524
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:98
KIFONT::FONT * GetFont() const
Definition: eda_text.h:234
int GetTextWidth() const
Definition: eda_text.h:251
virtual bool HasHyperlink() const
Definition: eda_text.h:386
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
Definition: eda_text.cpp:408
wxString GetHyperlink() const
Definition: eda_text.h:387
GR_TEXT_H_ALIGN_T GetHorizJustify() const
Definition: eda_text.h:187
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
Definition: eda_text.cpp:326
static bool ValidateHyperlink(const wxString &aURL)
Check if aURL is a valid hyperlink.
Definition: eda_text.cpp:1227
bool IsBold() const
Definition: eda_text.h:171
void SetHyperlink(wxString aLink)
Definition: eda_text.h:388
GR_TEXT_V_ALIGN_T GetVertJustify() const
Definition: eda_text.h:190
virtual void SetText(const wxString &aText)
Definition: eda_text.cpp:268
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
Definition: eda_text.cpp:290
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
Definition: eda_text.cpp:298
void SetFont(KIFONT::FONT *aFont)
Definition: eda_text.cpp:490
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
Definition: eda_text.cpp:400
void SetFontSelection(KIFONT::FONT *aFont, bool aSilentMode=false)
Set the selection in wxChoice widget.
Definition: font_choice.cpp:73
KIFONT::FONT * GetFontSelection(bool aBold, bool aItalic, bool aForDrawingSheet=false) const
bool HaveFontSelection() const
Definition: font_choice.cpp:95
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
PROJECT & Prj() const
Return a reference to the PROJECT associated with this KIWAY.
virtual std::map< wxString, wxString > & GetTextVars() const
Definition: project.cpp:95
Holds all the data relating to one schematic.
Definition: schematic.h:82
SCH_SHEET_PATH & CurrentSheet() const override
Definition: schematic.h:161
SCH_SHEET_LIST Hierarchy() const override
Return the full schematic flattened hierarchical sheet list.
Definition: schematic.cpp:214
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
COLOR_SETTINGS * GetColorSettings(bool aForceRefresh=false) const override
Returns a pointer to the active color theme settings.
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
Definition: sch_commit.cpp:432
Schematic editor (Eeschema) main window.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:167
virtual bool GetExcludedFromSim() const
Definition: sch_item.h:239
virtual void SetBodyStyle(int aBodyStyle)
Definition: sch_item.h:232
const SYMBOL * GetParentSymbol() const
Definition: sch_item.cpp:166
void SetPrivate(bool aPrivate)
Definition: sch_item.h:235
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
Definition: sch_item.cpp:150
int GetBodyStyle() const
Definition: sch_item.h:233
int GetUnit() const
Definition: sch_item.h:230
bool IsPrivate() const
Definition: sch_item.h:236
virtual void SetExcludedFromSim(bool aExclude)
Definition: sch_item.h:238
virtual void SetUnit(int aUnit)
Definition: sch_item.h:229
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
size_t GetCount() const
A helper to define a symbol's reference designator in a schematic.
const SCH_SHEET_PATH & GetSheetPath() const
SCH_SYMBOL * GetSymbol() const
void SetStroke(const STROKE_PARAMS &aStroke) override
Definition: sch_shape.cpp:63
STROKE_PARAMS GetStroke() const override
Definition: sch_shape.h:55
void GetSymbols(SCH_REFERENCE_LIST &aReferences, bool aIncludePowerSymbols=true, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
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.
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this sheet.
Definition: sch_sheet.cpp:210
Schematic symbol object.
Definition: sch_symbol.h:77
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars & fields for this symbol.
const wxString GetRef(const SCH_SHEET_PATH *aSheet, bool aIncludeUnit=false) const override
Definition: sch_symbol.cpp:704
static HTML_MESSAGE_BOX * ShowSyntaxHelp(wxWindow *aParentWindow)
Definition: sch_label.cpp:2162
Add cut/copy/paste, dark theme, autocomplete and brace highlighting to a wxStyleTextCtrl instance.
void DoTextVarAutocomplete(const std::function< void(const wxString &xRef, wxArrayString *tokens)> &getTokensFn)
Simple container to manage line stroke parameters.
Definition: stroke_params.h:94
void SetLineStyle(LINE_STYLE aLineStyle)
void SetWidth(int aWidth)
void SetColor(const KIGFX::COLOR4D &aColor)
LINE_STYLE GetLineStyle() const
KIGFX::COLOR4D GetColor() const
The symbol library editor main window.
A base class for LIB_SYMBOL and SCH_SYMBOL.
Definition: symbol.h:63
virtual bool IsMulti() const =0
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.
void Enable(bool aEnable)
Enable/disable the label, widget and units label.
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.
void Show(bool aShow, bool aResize=false)
Show/hide the label, widget and units label.
void Append(const wxString &aText, const wxString &aMenuText=wxEmptyString)
void ShowMessage(const wxString &aMessage, int aFlags=wxICON_INFORMATION) override
Show the info bar with the provided message and icon.
Definition: wx_infobar.cpp:153
void DisplayError(wxWindow *aParent, const wxString &aText, int aDisplayTime)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:170
This file is part of the common library.
#define _(s)
static constexpr EDA_ANGLE ANGLE_VERTICAL
Definition: eda_angle.h:398
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
Definition: eda_angle.h:397
@ LAYER_SCHEMATIC_BACKGROUND
Definition: layer_ids.h:476
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: string_utils.h:398
const std::map< LINE_STYLE, struct LINE_STYLE_DESC > lineTypeNames
Conversion map between LINE_STYLE values and style names displayed.
@ GR_TEXT_H_ALIGN_CENTER
@ GR_TEXT_H_ALIGN_RIGHT
@ GR_TEXT_H_ALIGN_LEFT
@ GR_TEXT_H_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_BOTTOM
@ GR_TEXT_V_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_CENTER
@ GR_TEXT_V_ALIGN_TOP
@ SCH_TEXTBOX_T
Definition: typeinfo.h:152
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:695