KiCad PCB EDA Suite
Loading...
Searching...
No Matches
pcbnew/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) 2004-2018 Jean-Pierre Charras jp.charras at wanadoo.fr
5 * Copyright (C) 2010-2023 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
26#include <widgets/font_choice.h>
28#include <confirm.h>
29#include <board_commit.h>
30#include <board.h>
31#include <footprint.h>
32#include <pcb_text.h>
33#include <project.h>
34#include <pcb_edit_frame.h>
36#include <wx/valnum.h>
37#include <scintilla_tricks.h>
38
39
42 m_frame( aParent ),
43 m_item( aText ),
44 m_textWidth( aParent, m_SizeXLabel, m_SizeXCtrl, m_SizeXUnits ),
45 m_textHeight( aParent, m_SizeYLabel, m_SizeYCtrl, m_SizeYUnits ),
46 m_thickness( aParent, m_ThicknessLabel, m_ThicknessCtrl, m_ThicknessUnits ),
47 m_posX( aParent, m_PositionXLabel, m_PositionXCtrl, m_PositionXUnits ),
48 m_posY( aParent, m_PositionYLabel, m_PositionYCtrl, m_PositionYUnits ),
49 m_orientation( aParent, m_OrientLabel, m_OrientCtrl, nullptr )
50{
51 wxString title;
52
53 // Configure display origin transforms
55 {
58 }
59 else
60 {
63 }
64
65 m_MultiLineText->SetEOLMode( wxSTC_EOL_LF );
66
67#ifdef _WIN32
68 // Without this setting, on Windows, some esoteric unicode chars create display issue
69 // in a wxStyledTextCtrl.
70 // for SetTechnology() info, see https://www.scintilla.org/ScintillaDoc.html#SCI_SETTECHNOLOGY
71 m_MultiLineText->SetTechnology(wxSTC_TECHNOLOGY_DIRECTWRITE);
72#endif
73
74 m_scintillaTricks = new SCINTILLA_TRICKS( m_MultiLineText, wxT( "{}" ), false,
75 // onAcceptFn
76 [this]( wxKeyEvent& aEvent )
77 {
78 wxPostEvent( this, wxCommandEvent( wxEVT_COMMAND_BUTTON_CLICKED, wxID_OK ) );
79 },
80 // onCharFn
81 [this]( wxStyledTextEvent& aEvent )
82 {
84 // getTokensFn
85 [this]( const wxString& xRef, wxArrayString* tokens )
86 {
87 m_frame->GetContextualTextVars( m_item, xRef, tokens );
88 } );
89 } );
90
91 // A hack which causes Scintilla to auto-size the text editor canvas
92 // See: https://github.com/jacobslusser/ScintillaNET/issues/216
93 m_MultiLineText->SetScrollWidth( 1 );
94 m_MultiLineText->SetScrollWidthTracking( true );
95
97 {
98 m_PositionXLabel->SetLabel( _( "Offset X:" ) );
99 m_PositionYLabel->SetLabel( _( "Offset Y:" ) );
100
101 if( m_item->Type() == PCB_FIELD_T )
102 {
103 PCB_FIELD* field = static_cast<PCB_FIELD*>( m_item );
104
105 if( field->IsReference() )
106 {
107 title = _( "Footprint Reference Properties" );
108 m_TextLabel->SetLabel( _( "Reference:" ) );
109 }
110 else if( field->IsValue() )
111 {
112 title = _( "Footprint Value Properties" );
113 m_TextLabel->SetLabel( _( "Value:" ) );
114 }
115 else
116 {
117 // Don't let users modify the library link, in the board editor
118 if( field->IsFootprint() && !m_frame->IsType( FRAME_FOOTPRINT_EDITOR ) )
119 m_SingleLineText->SetEditable( false );
120
121 title = _( "Footprint Field Properties" );
122 m_TextLabel->SetLabel( _( "Text:" ) );
123 }
124 }
125 else
126 {
127 title = _( "Footprint Text Properties" );
128 m_TextLabel->SetLabel( _( "Text:" ) );
129 }
130
132 m_MultiLineSizer->Show( false );
133
134 // Do not allow locking items in the footprint editor
135 m_cbLocked->Show( false );
136
137 m_tabOrder = {
143 m_Visible,
151 };
152 }
153 else
154 {
155 title = _( "Text Properties" );
156
158 m_SingleLineSizer->Show( false );
159
160 // This option makes sense only for footprint texts; texts on board are always visible.
161 m_Visible->SetValue( true );
162 m_Visible->Show( false );
163
164 m_KeepUpright->Show( false );
165 m_statusLine->Show( false );
166
167 m_tabOrder = {
180 };
181 }
182
184 m_bold->SetBitmap( KiBitmapBundle( BITMAPS::text_bold ) );
186 m_italic->SetBitmap( KiBitmapBundle( BITMAPS::text_italic ) );
187
189
191 m_alignLeft->SetBitmap( KiBitmapBundle( BITMAPS::text_align_left ) );
193 m_alignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_align_center ) );
195 m_alignRight->SetBitmap( KiBitmapBundle( BITMAPS::text_align_right ) );
196
198
200 m_valignBottom->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_bottom ) );
202 m_valignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_center ) );
204 m_valignTop->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_top ) );
205
207
209 m_mirrored->SetBitmap( KiBitmapBundle( BITMAPS::text_mirrored ) );
210
211 SetTitle( title );
212 m_hash_key = title;
213
214 // Configure the layers list selector. Note that footprints are built outside the current
215 // board and so we may need to show all layers if the text is on an unactivated layer.
216 if( !m_frame->GetBoard()->IsLayerEnabled( m_item->GetLayer() ) )
218
222
223 m_orientation.SetUnits( EDA_UNITS::DEGREES );
225
226 // Set predefined rotations in combo dropdown, according to the locale floating point
227 // separator notation
228 double rot_list[] = { 0.0, 90.0, -90.0, 180.0 };
229
230 for( size_t ii = 0; ii < m_OrientCtrl->GetCount() && ii < 4; ++ii )
231 m_OrientCtrl->SetString( ii, wxString::Format( wxT( "%.1f" ), rot_list[ii] ) );
232
233 // Set font sizes
234 m_statusLine->SetFont( KIUI::GetInfoFont( this ) );
235
237
238 // wxTextCtrls fail to generate wxEVT_CHAR events when the wxTE_MULTILINE flag is set,
239 // so we have to listen to wxEVT_CHAR_HOOK events instead.
240 Connect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_TEXT_PROPERTIES::OnCharHook ),
241 nullptr, this );
242
244}
245
246
248{
249 Disconnect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_TEXT_PROPERTIES::OnCharHook ),
250 nullptr, this );
251
252 delete m_scintillaTricks;
253}
254
255
257{
258 DIALOG_TEXT_PROPERTIES dlg( this, aText );
259
260 // QuasiModal required for Scintilla auto-complete
261 dlg.ShowQuasiModal();
262}
263
264
265void DIALOG_TEXT_PROPERTIES::OnSetFocusText( wxFocusEvent& event )
266{
267 if( m_item->Type() == PCB_FIELD_T && static_cast<PCB_FIELD*>( m_item )->IsReference() )
268 {
269#ifdef __WXGTK__
270 // Force an update of the text control before setting the text selection
271 // This is needed because GTK seems to ignore the selection on first update
272 //
273 // Note that we can't do this on OSX as it tends to provoke Apple's
274 // "[NSAlert runModal] may not be invoked inside of transaction begin/commit pair"
275 // bug. See: https://bugs.launchpad.net/kicad/+bug/1837225
276 m_SingleLineText->Update();
277#endif
278 KIUI::SelectReferenceNumber( static_cast<wxTextEntry*>( m_SingleLineText ) );
279 }
280 else
281 m_SingleLineText->SetSelection( -1, -1 );
282
283 event.Skip();
284}
285
286
288{
289 BOARD* board = m_frame->GetBoard();
290 FOOTPRINT* parentFP = m_item->GetParentFootprint();
291 wxString msg = board->ConvertKIIDsToCrossReferences( UnescapeString( m_item->GetText() ) );
292
293 if( m_SingleLineText->IsShown() )
294 {
295 m_SingleLineText->SetValue( msg );
296
297 if( m_item->Type() == PCB_FIELD_T && static_cast<PCB_FIELD*>( m_item )->IsReference() )
298 KIUI::SelectReferenceNumber( static_cast<wxTextEntry*>( m_SingleLineText ) );
299 else
300 m_SingleLineText->SetSelection( -1, -1 );
301 }
302 else if( m_MultiLineText->IsShown() )
303 {
304 m_MultiLineText->SetValue( msg );
305 m_MultiLineText->SetSelection( -1, -1 );
306 m_MultiLineText->EmptyUndoBuffer();
307 }
308
309 if( parentFP )
310 {
311 m_statusLine->SetLabel( wxString::Format( _( "Footprint %s (%s), %s, rotated %.1f deg"),
312 parentFP->GetReference(),
313 parentFP->GetValue(),
314 parentFP->IsFlipped() ? _( "back side (mirrored)" )
315 : _( "front side" ),
316 parentFP->GetOrientation().AsDegrees() ) );
317 }
318 else
319 {
320 m_statusLine->Show( false );
321 }
322
323 m_cbLocked->SetValue( m_item->IsLocked() );
324
326 m_cbKnockout->SetValue( m_item->IsKnockout() );
327
329
335
336 m_Visible->SetValue( m_item->IsVisible() );
337
338 if( parentFP )
339 m_KeepUpright->SetValue( m_item->IsKeepUpright() );
340
341 m_bold->Check( m_item->IsBold() );
343
344 switch ( m_item->GetHorizJustify() )
345 {
346 case GR_TEXT_H_ALIGN_LEFT: m_alignLeft->Check( true ); break;
347 case GR_TEXT_H_ALIGN_CENTER: m_alignCenter->Check( true ); break;
348 case GR_TEXT_H_ALIGN_RIGHT: m_alignRight->Check( true ); break;
350 }
351
352 switch ( m_item->GetVertJustify() )
353 {
354 case GR_TEXT_V_ALIGN_BOTTOM: m_valignBottom->Check( true ); break;
355 case GR_TEXT_V_ALIGN_CENTER: m_valignCenter->Check( true ); break;
356 case GR_TEXT_V_ALIGN_TOP: m_valignTop->Check( true ); break;
358 }
359
361
362 EDA_ANGLE orientation = m_item->GetTextAngle();
364
365 return DIALOG_TEXT_PROPERTIES_BASE::TransferDataToWindow();
366}
367
368
369void DIALOG_TEXT_PROPERTIES::onFontSelected( wxCommandEvent & aEvent )
370{
371 if( KIFONT::FONT::IsStroke( aEvent.GetString() ) )
372 {
373 m_thickness.Show( true );
374
375 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
376 int thickness = m_thickness.GetValue();
377
378 m_bold->Check( abs( thickness - GetPenSizeForBold( textSize ) )
379 < abs( thickness - GetPenSizeForNormal( textSize ) ) );
380 }
381 else
382 {
383 m_thickness.Show( false );
384 }
385}
386
387
388void DIALOG_TEXT_PROPERTIES::onBoldToggle( wxCommandEvent & aEvent )
389{
390 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
391
392 if( aEvent.IsChecked() )
394 else
396
397 aEvent.Skip();
398}
399
400
401void DIALOG_TEXT_PROPERTIES::onAlignButton( wxCommandEvent& aEvent )
402{
404 {
405 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
406 btn->Check( false );
407 }
408}
409
410
411void DIALOG_TEXT_PROPERTIES::onValignButton( wxCommandEvent& aEvent )
412{
414 {
415 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
416 btn->Check( false );
417 }
418}
419
420
421void DIALOG_TEXT_PROPERTIES::onThickness( wxCommandEvent& event )
422{
423 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
424 int thickness = m_thickness.GetValue();
425
426 m_bold->Check( abs( thickness - GetPenSizeForBold( textSize ) )
427 < abs( thickness - GetPenSizeForNormal( textSize ) ) );
428}
429
430
432{
433 if( !DIALOG_TEXT_PROPERTIES_BASE::TransferDataFromWindow() )
434 return false;
435
437 int maxSize = pcbIUScale.mmToIU( TEXT_MAX_SIZE_MM );
438
439 if( !m_textWidth.Validate( minSize, maxSize ) || !m_textHeight.Validate( minSize, maxSize ) )
440 return false;
441
442 BOARD* board = m_frame->GetBoard();
443 BOARD_COMMIT commit( m_frame );
444 commit.Modify( m_item );
445
446 // If no other command in progress, prepare undo command
447 // (for a command in progress, will be made later, at the completion of command)
448 bool pushCommit = ( m_item->GetEditFlags() == 0 );
449
450 // Set IN_EDIT flag to force undo/redo/abort proper operation and avoid new calls to
451 // SaveCopyInUndoList for the same text if is moved, and then rotated, edited, etc....
452 if( !pushCommit )
454
455 // Set the new text content
456 if( m_SingleLineText->IsShown() )
457 {
458 if( !m_SingleLineText->GetValue().IsEmpty() )
459 {
460 wxString txt = board->ConvertCrossReferencesToKIIDs( m_SingleLineText->GetValue() );
461
462 m_item->SetText( txt );
463 }
464 }
465 else if( m_MultiLineText->IsShown() )
466 {
467 if( !m_MultiLineText->GetValue().IsEmpty() )
468 {
469 wxString txt = board->ConvertCrossReferencesToKIIDs( m_MultiLineText->GetValue() );
470
471#ifdef __WXMAC__
472 // On macOS CTRL+Enter produces '\r' instead of '\n' regardless of EOL setting.
473 // Replace it now.
474 txt.Replace( wxT( "\r" ), wxT( "\n" ) );
475#elif defined( __WINDOWS__ )
476 // On Windows, a new line is coded as \r\n. We use only \n in kicad files and in
477 // drawing routines so strip the \r char.
478 txt.Replace( wxT( "\r" ), wxT( "" ) );
479#endif
481 }
482 }
483
484 m_item->SetLocked( m_cbLocked->GetValue() );
485
487 m_item->SetIsKnockout( m_cbKnockout->GetValue() );
488
490 {
492 m_italic->IsChecked() ) );
493 }
494
498
499 // Test for acceptable values for thickness and size and clamp if fails
500 int maxPenWidth = Clamp_Text_PenSize( m_item->GetTextThickness(), m_item->GetTextSize() );
501
502 if( m_item->GetTextThickness() > maxPenWidth )
503 {
504 DisplayError( this, _( "The text thickness is too large for the text size.\n"
505 "It will be clamped." ) );
506 m_item->SetTextThickness( maxPenWidth );
507 }
508
510
511 m_item->SetVisible( m_Visible->GetValue() );
512
513 if( m_KeepUpright->IsShown() )
514 m_item->SetKeepUpright( m_KeepUpright->GetValue() );
515
518
519 if( m_alignLeft->IsChecked() )
521 else if( m_alignCenter->IsChecked() )
523 else
525
528 else if( m_valignCenter->IsChecked() )
530 else
532
534
535 if( pushCommit )
536 commit.Push( _( "Edit Text Properties" ) );
537
538 return true;
539}
540
541
542void DIALOG_TEXT_PROPERTIES::onMultiLineTCLostFocus( wxFocusEvent& event )
543{
546
547 event.Skip();
548}
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:108
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.
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:240
virtual void SetLocked(bool aLocked)
Definition: board_item.h:316
virtual bool IsKnockout() const
Definition: board_item.h:312
virtual void SetIsKnockout(bool aKnockout)
Definition: board_item.h:313
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:276
FOOTPRINT * GetParentFootprint() const
Definition: board_item.cpp:264
VECTOR2I GetFPRelativePosition() const
Definition: board_item.cpp:293
void SetFPRelativePosition(const VECTOR2I &aPos)
Definition: board_item.cpp:307
virtual bool IsLocked() const
Definition: board_item.cpp:75
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:288
wxString ConvertCrossReferencesToKIIDs(const wxString &aSource) const
Convert cross-references back and forth between ${refDes:field} and ${kiid:field}.
Definition: board.cpp:1511
wxString ConvertKIIDsToCrossReferences(const wxString &aSource) const
Definition: board.cpp:1565
std::vector< wxWindow * > m_tabOrder
Definition: dialog_shim.h:230
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={})
int ShowQuasiModal()
std::string m_hash_key
Definition: dialog_shim.h:210
void finishDialogSettings()
In all dialogs, we must call the same functions to fix minimal dlg size, the default position and per...
virtual void OnCharHook(wxKeyEvent &aEvt)
virtual void OnSetFocusText(wxFocusEvent &event) override
Used to select the variant part of some text fields (for instance, the question mark or number in a r...
void onMultiLineTCLostFocus(wxFocusEvent &event) override
void onFontSelected(wxCommandEvent &aEvent) override
DIALOG_TEXT_PROPERTIES(SCH_BASE_FRAME *parent, SCH_ITEM *aTextItem)
void onBoldToggle(wxCommandEvent &aEvent) override
void onThickness(wxCommandEvent &aEvent) override
void onValignButton(wxCommandEvent &aEvent) override
void onAlignButton(wxCommandEvent &aEvent) override
EDA_ANGLE Normalize()
Definition: eda_angle.h:221
double AsDegrees() const
Definition: eda_angle.h:113
EDA_ANGLE Normalize180()
Definition: eda_angle.h:260
bool IsType(FRAME_T aType) const
EDA_ITEM_FLAGS GetEditFlags() const
Definition: eda_item.h:132
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:126
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:100
bool IsItalic() const
Definition: eda_text.h:140
const EDA_ANGLE & GetTextAngle() const
Definition: eda_text.h:130
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
Definition: eda_text.cpp:373
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:94
bool IsKeepUpright() const
Definition: eda_text.h:166
virtual bool IsVisible() const
Definition: eda_text.h:147
KIFONT::FONT * GetFont() const
Definition: eda_text.h:207
void SetMirrored(bool isMirrored)
Definition: eda_text.cpp:251
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
Definition: eda_text.cpp:275
GR_TEXT_H_ALIGN_T GetHorizJustify() const
Definition: eda_text.h:160
void SetBoldFlag(bool aBold)
Definition: eda_text.cpp:236
virtual void SetVisible(bool aVisible)
Definition: eda_text.cpp:244
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
Definition: eda_text.cpp:196
bool IsMirrored() const
Definition: eda_text.h:150
bool IsBold() const
Definition: eda_text.h:144
void SetKeepUpright(bool aKeepUpright)
Definition: eda_text.cpp:283
GR_TEXT_V_ALIGN_T GetVertJustify() const
Definition: eda_text.h:163
virtual void SetText(const wxString &aText)
Definition: eda_text.cpp:182
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
Definition: eda_text.cpp:204
int GetTextThickness() const
Definition: eda_text.h:122
void SetItalic(bool aItalic)
Definition: eda_text.cpp:212
void SetFont(KIFONT::FONT *aFont)
Definition: eda_text.cpp:357
VECTOR2I GetTextSize() const
Definition: eda_text.h:218
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
Definition: eda_text.cpp:267
bool HaveFontSelection() const
Definition: font_choice.cpp:94
void SetFontSelection(KIFONT::FONT *aFont)
Definition: font_choice.cpp:73
KIFONT::FONT * GetFontSelection(bool aBold, bool aItalic) const
EDA_ANGLE GetOrientation() const
Definition: footprint.h:215
bool IsFlipped() const
Definition: footprint.h:379
const wxString & GetValue() const
Definition: footprint.h:612
const wxString & GetReference() const
Definition: footprint.h:590
virtual bool IsStroke() const
Definition: font.h:138
int SetLayerSelection(int layer)
bool SetLayersHotkeys(bool value)
Common, abstract interface for edit frames.
bool IsReference() const
Definition: pcb_field.h:70
bool IsValue() const
Definition: pcb_field.h:71
bool IsFootprint() const
Definition: pcb_field.h:72
void SetBoardFrame(PCB_BASE_FRAME *aFrame)
void ShowNonActivatedLayers(bool aShow)
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)
virtual long long int GetValue()
Return the current value in Internal Units.
virtual void SetPrecision(int aLength)
Normally not needed, but can be used to set the precision when using internal units that are floats (...
virtual void SetUnits(EDA_UNITS aUnits)
Normally not needed (as the UNIT_BINDER inherits from the parent frame), but can be used to set to DE...
virtual EDA_ANGLE GetAngleValue()
virtual void SetAngleValue(const EDA_ANGLE &aValue)
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 ChangeValue(int aValue)
Set new value (in Internal Units) for the text field, taking care of units conversion WITHOUT trigger...
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 SetCoordType(ORIGIN_TRANSFORMS::COORD_TYPES_T aCoordType)
Set the current origin transform mode.
Definition: unit_binder.h:188
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.
const int minSize
Push and Shove router track width and via size dialog.
#define _(s)
#define IN_EDIT
Item currently edited.
#define TEXT_MIN_SIZE_MM
Minimum text size (1 micron).
Definition: eda_text.h:46
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
Definition: eda_text.h:47
@ FRAME_FOOTPRINT_EDITOR
Definition: frame_type.h:43
int GetPenSizeForBold(int aTextSize)
Definition: gr_text.cpp:40
int GetPenSizeForNormal(int aTextSize)
Definition: gr_text.cpp:64
int Clamp_Text_PenSize(int aPenSize, int aSize, bool aStrict)
Pen width should not allow characters to become cluttered up in their own fatness.
Definition: gr_text.cpp:87
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:880
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
Definition: ui_common.cpp:154
KICOMMON_API void SelectReferenceNumber(wxTextEntry *aTextEntry)
Select the number (or "?") in a reference for ease of editing.
Definition: ui_common.cpp:228
wxString UnescapeString(const wxString &aSource)
wxString EscapeString(const wxString &aSource, ESCAPE_CONTEXT aContext)
The Escape/Unescape routines use HTML-entity-reference-style encoding to handle characters which are:...
@ CTX_QUOTED_STR
Definition: string_utils.h:57
constexpr int mmToIU(double mm) const
Definition: base_units.h:88
@ 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
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Definition: typeinfo.h:90
VECTOR2< int32_t > VECTOR2I
Definition: vector2d.h:673