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 // A hack which causes Scintilla to auto-size the text editor canvas
121 // See: https://github.com/jacobslusser/ScintillaNET/issues/216
122 m_textCtrl->SetScrollWidth( 1 );
123 m_textCtrl->SetScrollWidthTracking( true );
124
125 m_textEntrySizer->AddGrowableRow( 0 );
126
127 m_textColorSwatch->SetDefaultColor( COLOR4D::UNSPECIFIED );
128 m_textColorSwatch->SetSwatchBackground( schematicBackground );
129
131
133
135 m_bold->SetBitmap( KiBitmapBundle( BITMAPS::text_bold ) );
137 m_italic->SetBitmap( KiBitmapBundle( BITMAPS::text_italic ) );
138
140
142 m_hAlignLeft->SetBitmap( KiBitmapBundle( BITMAPS::text_align_left ) );
144 m_hAlignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_align_center ) );
146 m_hAlignRight->SetBitmap( KiBitmapBundle( BITMAPS::text_align_right ) );
147
149
151 m_vAlignTop->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_top ) );
153 m_vAlignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_center ) );
155 m_vAlignBottom->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_bottom ) );
156
158
160 m_horizontal->SetBitmap( KiBitmapBundle( BITMAPS::text_horizontal ) );
162 m_vertical->SetBitmap( KiBitmapBundle( BITMAPS::text_vertical ) );
163
165
167
168 if( SCH_EDIT_FRAME* schematicEditor = dynamic_cast<SCH_EDIT_FRAME*>( m_frame ) )
169 {
170 const SCHEMATIC& schematic = schematicEditor->Schematic();
171
172 for( const SCH_SHEET_PATH& sheet : schematic.Hierarchy() )
173 {
174 wxString sheetPageNum = sheet.GetPageNumber();
175 wxString sheetName = sheet.size() == 1 ? _( "<root sheet>" )
176 : sheet.Last()->GetName();
177
178 m_hyperlinkCombo->Append( wxT( "#" ) + sheetPageNum,
179 wxString::Format( _( "Page %s (%s)" ),
180 sheetPageNum,
181 sheetName ) );
182 m_pageNumbers.push_back( sheetPageNum );
183 }
184
185 m_hyperlinkCombo->Append( wxT( "---" ) );
186 m_hyperlinkCombo->Append( wxT( "file://" ), wxT( "file://..." ) );
187 m_hyperlinkCombo->Append( wxT( "http://" ), wxT( "http://..." ) );
188 m_hyperlinkCombo->Append( wxT( "https://" ), wxT( "https://..." ) );
189 }
190 else
191 {
192 m_excludeFromSim->Hide();
193 m_syntaxHelp->Hide();
194 m_hyperlinkCb->Hide();
195 m_hyperlinkCombo->Hide();
196 }
197
199 Layout();
200
201 m_hAlignLeft->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onHAlignButton, this );
202 m_hAlignCenter->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onHAlignButton, this );
203 m_hAlignRight->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onHAlignButton, this );
204 m_vAlignTop->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onVAlignButton, this );
205 m_vAlignCenter->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onVAlignButton, this );
206 m_vAlignBottom->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onVAlignButton, this );
207 m_horizontal->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onTextAngleButton, this );
208 m_vertical->Bind( wxEVT_BUTTON, &DIALOG_TEXT_PROPERTIES::onTextAngleButton, this );
209
210 // Now all widgets have the size fixed, call FinishDialogSettings
212}
213
214
216{
217 delete m_scintillaTricks;
218
219 if( m_helpWindow )
220 m_helpWindow->Destroy();
221}
222
223
224void DIALOG_TEXT_PROPERTIES::getContextualTextVars( const wxString& aCrossRef,
225 wxArrayString* aTokens )
226{
227 SCHEMATIC* schematic = m_currentItem->Schematic();
228
229 if( !aCrossRef.IsEmpty() )
230 {
231 SCH_SYMBOL* refSymbol = nullptr;
232
233 if( schematic )
234 {
236 schematic->Hierarchy().GetSymbols( refs );
237
238 for( int jj = 0; jj < (int) refs.GetCount(); jj++ )
239 {
240 SCH_REFERENCE& ref = refs[jj];
241
242 if( ref.GetSymbol()->GetRef( &ref.GetSheetPath(), true ) == aCrossRef )
243 {
244 refSymbol = ref.GetSymbol();
245 break;
246 }
247 }
248 }
249
250 if( refSymbol )
251 refSymbol->GetContextualTextVars( aTokens );
252 }
253 else
254 {
255 if( schematic && schematic->CurrentSheet().Last() )
256 {
257 schematic->CurrentSheet().Last()->GetContextualTextVars( aTokens );
258 }
259 else
260 {
261 for( std::pair<wxString, wxString> entry : Prj().GetTextVars() )
262 aTokens->push_back( entry.first );
263 }
264 }
265}
266
267
269{
270 if( !wxDialog::TransferDataToWindow() )
271 return false;
272
275
276 wxString text = m_currentText->GetText();
277
278 // show text variable cross-references in a human-readable format
279 if( SCHEMATIC* schematic = m_currentItem->Schematic() )
280 text = schematic->ConvertKIIDsToRefs( text );
281
282 m_textCtrl->SetValue( text );
283 m_textCtrl->EmptyUndoBuffer();
284
285 if( !m_isSymbolEditor )
287
291
294
295 switch( m_currentText->GetHorizJustify() )
296 {
301 }
302
303 switch( m_currentText->GetVertJustify() )
304 {
305 case GR_TEXT_V_ALIGN_TOP: m_vAlignTop->Check(); break;
309 }
310
312 m_vertical->Check();
313 else
315
317 {
318 SCH_TEXTBOX* textBox = static_cast<SCH_TEXTBOX*>( m_currentItem );
319
320 m_borderCheckbox->SetValue( textBox->GetWidth() >= 0 );
321
322 if( textBox->GetWidth() >= 0 )
323 m_borderWidth.SetValue( textBox->GetWidth() );
324
326
327 int style = static_cast<int>( textBox->GetStroke().GetLineStyle() );
328
329 if( style >= 0 && style < (int) lineTypeNames.size() )
330 m_borderStyleCombo->SetSelection( style );
331 else
332 m_borderStyleCombo->SetSelection( 0 );
333
334 m_borderWidth.Enable( textBox->GetWidth() >= 0 );
335 m_borderColorLabel->Enable( textBox->GetWidth() >= 0 );
336 m_borderColorSwatch->Enable( textBox->GetWidth() >= 0 );
337 m_borderStyleLabel->Enable( textBox->GetWidth() >= 0 );
338 m_borderStyleCombo->Enable( textBox->GetWidth() >= 0 );
339
340 m_filledCtrl->SetValue( textBox->IsSolidFill() );
341 m_fillColorSwatch->SetSwatchColor( textBox->GetFillColor(), false );
342
343 m_fillColorLabel->Enable( textBox->IsSolidFill() );
344 m_fillColorSwatch->Enable( textBox->IsSolidFill() );
345 }
346
347 if( m_isSymbolEditor )
348 {
350
352 m_commonToAllUnits->SetValue( symbol->IsMulti() && m_currentItem->GetUnit() == 0 );
353 m_commonToAllUnits->Enable( symbol->IsMulti() );
355 && m_currentItem->GetBodyStyle() == 0 );
357 }
358
359 return true;
360}
361
362
363void DIALOG_TEXT_PROPERTIES::onBorderChecked( wxCommandEvent& aEvent )
364{
365 bool border = m_borderCheckbox->GetValue();
366
367 if( border && m_borderWidth.GetValue() < 0 )
369
370 m_borderWidth.Enable( border );
371 m_borderColorLabel->Enable( border );
372 m_borderColorSwatch->Enable( border );
373 m_borderStyleLabel->Enable( border );
374 m_borderStyleCombo->Enable( border );
375}
376
377
378void DIALOG_TEXT_PROPERTIES::onFillChecked( wxCommandEvent& aEvent )
379{
380 bool fill = m_filledCtrl->GetValue();
381
382 m_fillColorLabel->Enable( fill );
383 m_fillColorSwatch->Enable( fill );
384}
385
386
387void DIALOG_TEXT_PROPERTIES::onHyperlinkChecked( wxCommandEvent& aEvent )
388{
389 if( aEvent.IsChecked() && m_hyperlinkCombo->GetValue().IsEmpty() )
390 {
391 m_hyperlinkCombo->ChangeValue( m_lastLink );
392 }
393 else if( !aEvent.IsChecked() && !m_hyperlinkCombo->GetValue().IsEmpty() )
394 {
395 m_lastLink = m_hyperlinkCombo->GetValue();
396 m_hyperlinkCombo->SetValue( wxEmptyString );
397 }
398
399 aEvent.Skip();
400}
401
402
403void DIALOG_TEXT_PROPERTIES::onHyperlinkText( wxCommandEvent& event )
404{
405 if( !m_hyperlinkCombo->GetValue().IsEmpty() )
406 m_hyperlinkCb->SetValue( true );
407}
408
409
410void DIALOG_TEXT_PROPERTIES::onHyperlinkCombo( wxCommandEvent& aEvent )
411{
412 if( aEvent.GetSelection() >= 0 )
413 {
414 m_hyperlinkCb->SetValue( true );
415 m_hyperlinkCombo->SetInsertionPointEnd();
416 }
417}
418
419
420void DIALOG_TEXT_PROPERTIES::onHAlignButton( wxCommandEvent& aEvent )
421{
423 {
424 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
425 btn->Check( false );
426 }
427}
428
429
430void DIALOG_TEXT_PROPERTIES::onVAlignButton( wxCommandEvent& aEvent )
431{
433 {
434 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
435 btn->Check( false );
436 }
437}
438
439
440void DIALOG_TEXT_PROPERTIES::onTextAngleButton( wxCommandEvent& aEvent )
441{
442 for( BITMAP_BUTTON* btn : { m_horizontal, m_vertical } )
443 {
444 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
445 btn->Check( false );
446 }
447}
448
449
451{
452 if( !wxDialog::TransferDataFromWindow() )
453 return false;
454
455 // Don't allow text to disappear; it can be difficult to correct if you can't select it
456 if( !m_textSize.Validate( 0.01, 1000.0, EDA_UNITS::MM ) )
457 return false;
458
459 SCH_COMMIT commit( m_frame );
460
461 /* save old text in undo list if not already in edit */
462 if( m_currentItem->GetEditFlags() == 0 )
464
466
467 wxString text = m_textCtrl->GetValue();
468
469 // convert any text variable cross-references to their UUIDs
470 if( SCHEMATIC* schematic = m_currentItem->Schematic() )
471 text = schematic->ConvertRefsToKIIDs( text );
472
473#ifdef __WXMAC__
474 // On macOS CTRL+Enter produces '\r' instead of '\n' regardless of EOL setting
475 text.Replace( "\r", "\n" );
476#elif defined( __WINDOWS__ )
477 // On Windows, a new line is coded as \r\n. We use only \n in KiCad files and in
478 // drawing routines so strip the \r char.
479 text.Replace( "\r", "" );
480#endif
481
483 {
484 // Textboxes have a defined extent and so are allowed to be empty
486 }
487 else if( !text.IsEmpty() )
488 {
490 }
491 else
492 {
493 // Other text items do not have defined extents, and so will disappear if empty
494 DisplayError( this, _( "Text can not be empty." ) );
495 return false;
496 }
497
499
500 if( SYMBOL_EDIT_FRAME* symbolEditor = dynamic_cast<SYMBOL_EDIT_FRAME*>( m_frame ) )
501 {
503
504 if( !m_commonToAllUnits->GetValue() )
505 m_currentItem->SetUnit( symbolEditor->GetUnit() );
506 else
508
509 if( !m_commonToAllBodyStyles->GetValue() )
510 m_currentItem->SetBodyStyle( symbolEditor->GetBodyStyle() );
511 else
513 }
514
516 {
517 DisplayError( this, _( "Invalid hyperlink destination. Please enter either a valid URL "
518 "(e.g. file:// or http(s)://) or \"#<page number>\" to create "
519 "a hyperlink to a page in this schematic." ) );
520 return false;
521 }
522 else
523 {
525 }
526
530
532 {
534 m_italic->IsChecked() ) );
535 }
536
537 // Must come after SetTextSize()
540
542
543 if( m_hAlignRight->IsChecked() )
545 else if( m_hAlignCenter->IsChecked() )
547 else
549
552 else if( m_vAlignCenter->IsChecked() )
554 else
556
557 if( m_vertical->IsChecked() )
559 else
561
563 {
564 SCH_TEXTBOX* textBox = static_cast<SCH_TEXTBOX*>( m_currentItem );
565
566 STROKE_PARAMS stroke = textBox->GetStroke();
567
568 if( m_borderCheckbox->GetValue() )
569 stroke.SetWidth( std::max( 0, m_borderWidth.GetIntValue() ) );
570 else
571 stroke.SetWidth( -1 );
572
573 auto it = lineTypeNames.begin();
574 std::advance( it, m_borderStyleCombo->GetSelection() );
575
576 if( it == lineTypeNames.end() )
577 stroke.SetLineStyle( LINE_STYLE::SOLID );
578 else
579 stroke.SetLineStyle( it->first );
580
582
583 textBox->SetStroke( stroke );
584
585 textBox->SetFillMode( m_filledCtrl->GetValue() ? FILL_T::FILLED_WITH_COLOR
586 : FILL_T::NO_FILL );
588 }
589
590 if( !commit.Empty() )
591 commit.Push( _( "Edit Text Properties" ) );
592
593 return true;
594}
595
596
597void DIALOG_TEXT_PROPERTIES::OnFormattingHelp( wxHyperlinkEvent& aEvent )
598{
600}
601
602
604{
607
608 event.Skip();
609}
wxBitmapBundle KiBitmapBundle(BITMAPS aBitmap, int aMinHeight)
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.
bool Empty() const
Definition: commit.h:152
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
Definition: commit.h:107
void SetInitialFocus(wxWindow *aWindow)
Sets the window (usually a wxTextCtrl) that should be focused when the dialog is shown.
Definition: dialog_shim.h:75
void SetupStandardButtons(std::map< int, wxString > aLabels={})
std::string m_hash_key
Definition: dialog_shim.h:236
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:148
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:110
void SetFillColor(const COLOR4D &aColor)
Definition: eda_shape.h:153
bool IsSolidFill() const
Definition: eda_shape.h:117
COLOR4D GetFillColor() const
Definition: eda_shape.h:152
virtual int GetWidth() const
Definition: eda_shape.h:156
void SetFillMode(FILL_T aFill)
Definition: eda_shape.cpp:540
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition: eda_text.h:79
void SetTextColor(const COLOR4D &aColor)
Definition: eda_text.h:266
COLOR4D GetTextColor() const
Definition: eda_text.h:267
bool IsItalic() const
Definition: eda_text.h:166
const EDA_ANGLE & GetTextAngle() const
Definition: eda_text.h:144
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
Definition: eda_text.cpp:533
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:97
KIFONT::FONT * GetFont() const
Definition: eda_text.h:244
int GetTextWidth() const
Definition: eda_text.h:261
virtual bool HasHyperlink() const
Definition: eda_text.h:397
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
Definition: eda_text.cpp:417
wxString GetHyperlink() const
Definition: eda_text.h:398
GR_TEXT_H_ALIGN_T GetHorizJustify() const
Definition: eda_text.h:197
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
Definition: eda_text.cpp:335
static bool ValidateHyperlink(const wxString &aURL)
Check if aURL is a valid hyperlink.
Definition: eda_text.cpp:1211
bool IsBold() const
Definition: eda_text.h:181
void SetHyperlink(wxString aLink)
Definition: eda_text.h:399
GR_TEXT_V_ALIGN_T GetVertJustify() const
Definition: eda_text.h:200
virtual void SetText(const wxString &aText)
Definition: eda_text.cpp:270
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
Definition: eda_text.cpp:299
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
Definition: eda_text.cpp:307
void SetFont(KIFONT::FONT *aFont)
Definition: eda_text.cpp:499
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
Definition: eda_text.cpp:409
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:98
Holds all the data relating to one schematic.
Definition: schematic.h:88
SCH_SHEET_LIST Hierarchy() const
Return the full schematic flattened hierarchical sheet list.
Definition: schematic.cpp:258
SCH_SHEET_PATH & CurrentSheet() const
Definition: schematic.h:171
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:489
Schematic editor (Eeschema) main window.
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:168
virtual bool GetExcludedFromSim() const
Definition: sch_item.h:257
virtual void SetBodyStyle(int aBodyStyle)
Definition: sch_item.h:247
const SYMBOL * GetParentSymbol() const
Definition: sch_item.cpp:252
void SetPrivate(bool aPrivate)
Definition: sch_item.h:253
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Definition: sch_item.cpp:246
int GetBodyStyle() const
Definition: sch_item.h:248
int GetUnit() const
Definition: sch_item.h:239
bool IsPrivate() const
Definition: sch_item.h:254
virtual void SetExcludedFromSim(bool aExclude)
Definition: sch_item.h:256
virtual void SetUnit(int aUnit)
Definition: sch_item.h:238
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:61
STROKE_PARAMS GetStroke() const override
Definition: sch_shape.h:57
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:177
Schematic symbol object.
Definition: sch_symbol.h:75
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:558
static HTML_MESSAGE_BOX * ShowSyntaxHelp(wxWindow *aParentWindow)
Definition: sch_label.cpp:2256
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:134
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:156
void DisplayError(wxWindow *aParent, const wxString &aText)
Display an error or warning message box with aMessage.
Definition: confirm.cpp:169
This file is part of the common library.
#define _(s)
static constexpr EDA_ANGLE ANGLE_VERTICAL
Definition: eda_angle.h:408
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
Definition: eda_angle.h:407
@ LAYER_SCHEMATIC_BACKGROUND
Definition: layer_ids.h:478
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: string_utils.h:429
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:153
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:695