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 The 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 title = _( "Footprint Field Properties" );
118 m_TextLabel->SetLabel( _( "Text:" ) );
119 }
120 }
121 else
122 {
123 title = _( "Footprint Text Properties" );
124 m_TextLabel->SetLabel( _( "Text:" ) );
125 }
126
128 m_MultiLineSizer->Show( false );
129
130 // Do not allow locking items in the footprint editor
131 m_cbLocked->Show( false );
132
133 m_tabOrder = {
146 };
147 }
148 else
149 {
150 title = _( "Text Properties" );
151
153 m_SingleLineSizer->Show( false );
154
155 m_KeepUpright->Show( false );
156 m_statusLine->Show( false );
157
158 m_tabOrder = {
171 };
172 }
173
175 m_bold->SetBitmap( KiBitmapBundle( BITMAPS::text_bold ) );
177 m_italic->SetBitmap( KiBitmapBundle( BITMAPS::text_italic ) );
178
180
182 m_alignLeft->SetBitmap( KiBitmapBundle( BITMAPS::text_align_left ) );
184 m_alignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_align_center ) );
186 m_alignRight->SetBitmap( KiBitmapBundle( BITMAPS::text_align_right ) );
187
189
191 m_valignBottom->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_bottom ) );
193 m_valignCenter->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_center ) );
195 m_valignTop->SetBitmap( KiBitmapBundle( BITMAPS::text_valign_top ) );
196
198
200 m_mirrored->SetBitmap( KiBitmapBundle( BITMAPS::text_mirrored ) );
201
202 SetTitle( title );
203 m_hash_key = title;
204
205 // Configure the layers list selector. Note that footprints are built outside the current
206 // board and so we may need to show all layers if the text is on an unactivated layer.
207 if( !m_frame->GetBoard()->IsLayerEnabled( m_item->GetLayer() ) )
209
213
214 m_orientation.SetUnits( EDA_UNITS::DEGREES );
216
217 // Set predefined rotations in combo dropdown, according to the locale floating point
218 // separator notation
219 double rot_list[] = { 0.0, 90.0, -90.0, 180.0 };
220
221 for( size_t ii = 0; ii < m_OrientCtrl->GetCount() && ii < 4; ++ii )
222 m_OrientCtrl->SetString( ii, wxString::Format( wxT( "%.1f" ), rot_list[ii] ) );
223
224 // Set font sizes
225 m_statusLine->SetFont( KIUI::GetInfoFont( this ) );
226
228
229 // wxTextCtrls fail to generate wxEVT_CHAR events when the wxTE_MULTILINE flag is set,
230 // so we have to listen to wxEVT_CHAR_HOOK events instead.
231 Connect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_TEXT_PROPERTIES::OnCharHook ),
232 nullptr, this );
233
235}
236
237
239{
240 Disconnect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_TEXT_PROPERTIES::OnCharHook ),
241 nullptr, this );
242
243 delete m_scintillaTricks;
244}
245
246
248{
249 DIALOG_TEXT_PROPERTIES dlg( this, aText );
250
251 // QuasiModal required for Scintilla auto-complete
252 dlg.ShowQuasiModal();
253}
254
255
256void DIALOG_TEXT_PROPERTIES::OnSetFocusText( wxFocusEvent& event )
257{
258 if( m_item->Type() == PCB_FIELD_T && static_cast<PCB_FIELD*>( m_item )->IsReference() )
259 {
260#ifdef __WXGTK__
261 // Force an update of the text control before setting the text selection
262 // This is needed because GTK seems to ignore the selection on first update
263 //
264 // Note that we can't do this on OSX as it tends to provoke Apple's
265 // "[NSAlert runModal] may not be invoked inside of transaction begin/commit pair"
266 // bug. See: https://bugs.launchpad.net/kicad/+bug/1837225
267 m_SingleLineText->Update();
268#endif
269 KIUI::SelectReferenceNumber( static_cast<wxTextEntry*>( m_SingleLineText ) );
270 }
271 else
272 m_SingleLineText->SetSelection( -1, -1 );
273
274 event.Skip();
275}
276
277
279{
280 BOARD* board = m_frame->GetBoard();
281 FOOTPRINT* parentFP = m_item->GetParentFootprint();
282 wxString text = m_item->GetText();
283
284 // show text variable cross-references in a human-readable format
286
287 if( m_SingleLineText->IsShown() )
288 {
289 m_SingleLineText->SetValue( text );
290
291 if( m_item->Type() == PCB_FIELD_T && static_cast<PCB_FIELD*>( m_item )->IsReference() )
292 KIUI::SelectReferenceNumber( static_cast<wxTextEntry*>( m_SingleLineText ) );
293 else
294 m_SingleLineText->SetSelection( -1, -1 );
295 }
296 else if( m_MultiLineText->IsShown() )
297 {
298 m_MultiLineText->SetValue( text );
299 m_MultiLineText->SetSelection( -1, -1 );
300 m_MultiLineText->EmptyUndoBuffer();
301 }
302
303 if( parentFP )
304 {
305 m_statusLine->SetLabel( wxString::Format( _( "Footprint %s (%s), %s, rotated %.1f deg"),
306 parentFP->GetReference(),
307 parentFP->GetValue(),
308 parentFP->IsFlipped() ? _( "back side (mirrored)" )
309 : _( "front side" ),
310 parentFP->GetOrientation().AsDegrees() ) );
311 }
312 else
313 {
314 m_statusLine->Show( false );
315 }
316
317 m_cbLocked->SetValue( m_item->IsLocked() );
318
320 m_cbKnockout->SetValue( m_item->IsKnockout() );
321
323
329
330 if( parentFP )
331 m_KeepUpright->SetValue( m_item->IsKeepUpright() );
332
333 m_bold->Check( m_item->IsBold() );
335
336 switch ( m_item->GetHorizJustify() )
337 {
338 case GR_TEXT_H_ALIGN_LEFT: m_alignLeft->Check( true ); break;
339 case GR_TEXT_H_ALIGN_CENTER: m_alignCenter->Check( true ); break;
340 case GR_TEXT_H_ALIGN_RIGHT: m_alignRight->Check( true ); break;
342 }
343
344 switch ( m_item->GetVertJustify() )
345 {
346 case GR_TEXT_V_ALIGN_BOTTOM: m_valignBottom->Check( true ); break;
347 case GR_TEXT_V_ALIGN_CENTER: m_valignCenter->Check( true ); break;
348 case GR_TEXT_V_ALIGN_TOP: m_valignTop->Check( true ); break;
350 }
351
353
354 EDA_ANGLE orientation = m_item->GetTextAngle();
356
357 return DIALOG_TEXT_PROPERTIES_BASE::TransferDataToWindow();
358}
359
360
361void DIALOG_TEXT_PROPERTIES::onFontSelected( wxCommandEvent & aEvent )
362{
363 if( KIFONT::FONT::IsStroke( aEvent.GetString() ) )
364 {
365 m_thickness.Show( true );
366 m_buttonUpdateTh->Show( true );
367
368 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
369 int thickness = m_thickness.GetValue();
370
371 m_bold->Check( abs( thickness - GetPenSizeForBold( textSize ) )
372 < abs( thickness - GetPenSizeForNormal( textSize ) ) );
373 }
374 else
375 {
376 m_thickness.Show( false );
377 m_buttonUpdateTh->Show( false );
378 }
379}
380
381
382void DIALOG_TEXT_PROPERTIES::onBoldToggle( wxCommandEvent & aEvent )
383{
384 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
385
386 if( aEvent.IsChecked() )
388 else
390
391 aEvent.Skip();
392}
393
394
395void DIALOG_TEXT_PROPERTIES::onAlignButton( wxCommandEvent& aEvent )
396{
398 {
399 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
400 btn->Check( false );
401 }
402}
403
404
405void DIALOG_TEXT_PROPERTIES::onValignButton( wxCommandEvent& aEvent )
406{
408 {
409 if( btn->IsChecked() && btn != aEvent.GetEventObject() )
410 btn->Check( false );
411 }
412}
413
414
415void DIALOG_TEXT_PROPERTIES::onThickness( wxCommandEvent& event )
416{
417 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
418 int thickness = m_thickness.GetValue();
419
420 m_bold->Check( abs( thickness - GetPenSizeForBold( textSize ) )
421 < abs( thickness - GetPenSizeForNormal( textSize ) ) );
422}
423
424
426{
427 int textSize = std::min( m_textWidth.GetValue(), m_textHeight.GetValue() );
428 int thickness;
429
430 // Calculate the "best" thickness from text size and bold option:
431 if( m_bold->IsChecked() )
432 thickness = GetPenSizeForBold( textSize );
433 else
434 thickness = GetPenSizeForNormal( textSize );
435
436 m_thickness.SetValue( thickness );
437}
438
439
441{
442 if( !DIALOG_TEXT_PROPERTIES_BASE::TransferDataFromWindow() )
443 return false;
444
446 int maxSize = pcbIUScale.mmToIU( TEXT_MAX_SIZE_MM );
447
448 if( !m_textWidth.Validate( minSize, maxSize ) || !m_textHeight.Validate( minSize, maxSize ) )
449 return false;
450
451 BOARD* board = m_frame->GetBoard();
452 BOARD_COMMIT commit( m_frame );
453 commit.Modify( m_item );
454
455 // If no other command in progress, prepare undo command
456 // (for a command in progress, will be made later, at the completion of command)
457 bool pushCommit = ( m_item->GetEditFlags() == 0 );
458
459 // Set IN_EDIT flag to force undo/redo/abort proper operation and avoid new calls to
460 // SaveCopyInUndoList for the same text if is moved, and then rotated, edited, etc....
461 if( !pushCommit )
463
464 // Set the new text content
465 if( m_SingleLineText->IsShown() )
466 {
467 if( !m_SingleLineText->GetValue().IsEmpty() )
468 {
469 // convert any text variable cross-references to their UUIDs
470 wxString txt = board->ConvertCrossReferencesToKIIDs( m_SingleLineText->GetValue() );
471
472 m_item->SetText( txt );
473 }
474 }
475 else if( m_MultiLineText->IsShown() )
476 {
477 if( !m_MultiLineText->GetValue().IsEmpty() )
478 {
479 // convert any text variable cross-references to their UUIDs
480 wxString txt = board->ConvertCrossReferencesToKIIDs( m_MultiLineText->GetValue() );
481
482#ifdef __WXMAC__
483 // On macOS CTRL+Enter produces '\r' instead of '\n' regardless of EOL setting.
484 // Replace it now.
485 txt.Replace( wxT( "\r" ), wxT( "\n" ) );
486#elif defined( __WINDOWS__ )
487 // On Windows, a new line is coded as \r\n. We use only \n in kicad files and in
488 // drawing routines so strip the \r char.
489 txt.Replace( wxT( "\r" ), wxT( "" ) );
490#endif
492 }
493 }
494
495 m_item->SetLocked( m_cbLocked->GetValue() );
496
498 m_item->SetIsKnockout( m_cbKnockout->GetValue() );
499
501 {
503 m_italic->IsChecked() ) );
504 }
505
509
510 // Test for acceptable values for thickness and size and clamp if fails
511 int maxPenWidth = ClampTextPenSize( m_item->GetTextThickness(), m_item->GetTextSize() );
512
513 if( m_item->GetTextThickness() > maxPenWidth )
514 {
515 DisplayError( this, _( "The text thickness is too large for the text size.\n"
516 "It will be clamped." ) );
517 m_item->SetTextThickness( maxPenWidth );
518 }
519
521
522 if( m_KeepUpright->IsShown() )
523 m_item->SetKeepUpright( m_KeepUpright->GetValue() );
524
527
528 if( m_alignLeft->IsChecked() )
530 else if( m_alignCenter->IsChecked() )
532 else
534
537 else if( m_valignCenter->IsChecked() )
539 else
541
543
544 if( pushCommit )
545 commit.Push( _( "Edit Text Properties" ) );
546
547 return true;
548}
549
550
551void DIALOG_TEXT_PROPERTIES::onMultiLineTCLostFocus( wxFocusEvent& event )
552{
555
556 event.Skip();
557}
constexpr EDA_IU_SCALE pcbIUScale
Definition: base_units.h:108
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.
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:239
virtual void SetLocked(bool aLocked)
Definition: board_item.h:330
virtual bool IsKnockout() const
Definition: board_item.h:326
virtual void SetIsKnockout(bool aKnockout)
Definition: board_item.h:327
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:290
FOOTPRINT * GetParentFootprint() const
Definition: board_item.cpp:298
VECTOR2I GetFPRelativePosition() const
Definition: board_item.cpp:327
void SetFPRelativePosition(const VECTOR2I &aPos)
Definition: board_item.cpp:341
virtual bool IsLocked() const
Definition: board_item.cpp:75
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:295
wxString ConvertCrossReferencesToKIIDs(const wxString &aSource) const
Convert cross-references back and forth between ${refDes:field} and ${kiid:field}.
Definition: board.cpp:1625
wxString ConvertKIIDsToCrossReferences(const wxString &aSource) const
Definition: board.cpp:1679
std::vector< wxWindow * > m_tabOrder
Definition: dialog_shim.h:250
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:230
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 updateTextThickness(wxCommandEvent &aEvent) override
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
EDA_ITEM_FLAGS GetEditFlags() const
Definition: eda_item.h:131
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:125
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:101
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:526
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:98
bool IsKeepUpright() const
Definition: eda_text.h:193
KIFONT::FONT * GetFont() const
Definition: eda_text.h:234
void SetMirrored(bool isMirrored)
Definition: eda_text.cpp:386
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
Definition: eda_text.cpp:410
GR_TEXT_H_ALIGN_T GetHorizJustify() const
Definition: eda_text.h:187
void SetBoldFlag(bool aBold)
Set only the bold flag, without changing the font.
Definition: eda_text.cpp:371
void SetTextThickness(int aWidth)
The TextThickness is that set by the user.
Definition: eda_text.cpp:284
void SetItalicFlag(bool aItalic)
Set only the italic flag, without changing the font.
Definition: eda_text.cpp:320
bool IsMirrored() const
Definition: eda_text.h:177
bool IsBold() const
Definition: eda_text.h:171
void SetKeepUpright(bool aKeepUpright)
Definition: eda_text.cpp:418
GR_TEXT_V_ALIGN_T GetVertJustify() const
Definition: eda_text.h:190
virtual void SetText(const wxString &aText)
Definition: eda_text.cpp:270
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
Definition: eda_text.cpp:292
int GetTextThickness() const
Definition: eda_text.h:126
void SetFont(KIFONT::FONT *aFont)
Definition: eda_text.cpp:492
VECTOR2I GetTextSize() const
Definition: eda_text.h:248
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
Definition: eda_text.cpp:402
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
EDA_ANGLE GetOrientation() const
Definition: footprint.h:225
bool IsFlipped() const
Definition: footprint.h:389
const wxString & GetValue() const
Definition: footprint.h:642
const wxString & GetReference() const
Definition: footprint.h:620
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:68
bool IsValue() const
Definition: pcb_field.h:69
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:200
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:47
#define TEXT_MAX_SIZE_MM
Maximum text size in mm (~10 inches)
Definition: eda_text.h:48
int GetPenSizeForBold(int aTextSize)
Definition: gr_text.cpp:36
int GetPenSizeForNormal(int aTextSize)
Definition: gr_text.cpp:60
int ClampTextPenSize(int aPenSize, int aSize, bool aStrict)
Pen width should not allow characters to become cluttered up in their own fatness.
Definition: gr_text.cpp:72
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition: lset.cpp:714
KICOMMON_API wxFont GetInfoFont(wxWindow *aWindow)
Definition: ui_common.cpp:155
KICOMMON_API void SelectReferenceNumber(wxTextEntry *aTextEntry)
Select the number (or "?") in a reference for ease of editing.
Definition: ui_common.cpp:229
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:695