KiCad PCB EDA Suite
KIUI Namespace Reference

Functions

void ValidatorTransferToWindowWithoutEvents (wxValidator &aValidator)
 Call a text validator's TransferDataToWindow method without firing a text change event. More...
 
void SetControlsTabOrder (const std::vector< wxWindow * > &aControlsInTabOrder)
 Set a list of controls to have a defined sequential tab order. More...
 
int GetStdMargin ()
 Get the standard margin around a widget in the KiCad UI. More...
 
wxSize GetTextSize (const wxString &aSingleLine, wxWindow *aWindow)
 Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currently set in that window. More...
 
wxFont GetMonospacedUIFont ()
 
wxFont GetControlFont (wxWindow *aWindow)
 
wxFont GetInfoFont (wxWindow *aWindow)
 
wxFont GetStatusFont (wxWindow *aWindow)
 
bool EnsureTextCtrlWidth (wxTextCtrl *aCtrl, const wxString *aString=nullptr)
 Set the minimum pixel width on a text control in order to make a text string be fully visible within it. More...
 
void SelectReferenceNumber (wxTextEntry *aTextEntry)
 Select the number (or "?") in a reference for ease of editing. More...
 
bool IsInputControlFocused (wxWindow *aFocus=nullptr)
 Check if a input control has focus. More...
 
bool IsInputControlEditable (wxWindow *aControl)
 Check if a input control has focus. More...
 
bool IsModalDialogFocused ()
 
void Disable (wxWindow *aWindow)
 Makes a window read-only. More...
 

Function Documentation

◆ Disable()

void KIUI::Disable ( wxWindow *  aWindow)

Makes a window read-only.

Does some extra work over wxWindow::Disable() to make sure you can still scroll around in sub-windows.

Definition at line 276 of file ui_common.cpp.

277 {
278  wxScrollBar* scrollBar = dynamic_cast<wxScrollBar*>( aWindow );
279  wxGrid* grid = dynamic_cast<wxGrid*>( aWindow );
280  wxStyledTextCtrl* scintilla = dynamic_cast<wxStyledTextCtrl*>( aWindow );
281  wxControl* control = dynamic_cast<wxControl*>( aWindow );
282 
283  if( scrollBar )
284  {
285  // Leave a scroll bar active
286  }
287  else if( grid )
288  {
289  for( int row = 0; row < grid->GetNumberRows(); ++row )
290  {
291  for( int col = 0; col < grid->GetNumberCols(); ++col )
292  grid->SetReadOnly( row, col );
293  }
294  }
295  else if( scintilla )
296  {
297  scintilla->SetReadOnly( true );
298  }
299  else if( control )
300  {
301  control->Disable();
302  }
303  else
304  {
305  for( wxWindow* child : aWindow->GetChildren() )
306  Disable( child );
307  }
308 }
void Disable(wxWindow *aWindow)
Makes a window read-only.
Definition: ui_common.cpp:276

References grid.

Referenced by DIALOG_SCHEMATIC_SETUP::OnPageChange(), and DIALOG_BOARD_SETUP::OnPageChange().

◆ EnsureTextCtrlWidth()

bool KIUI::EnsureTextCtrlWidth ( wxTextCtrl *  aCtrl,
const wxString *  aString = nullptr 
)

Set the minimum pixel width on a text control in order to make a text string be fully visible within it.

The current font within the text control is considered. The text can come either from the control or be given as an argument. If the text control is larger than needed, then nothing is done.

Parameters
aCtrlthe text control to potentially make wider.
aStringthe text that is used in sizing the control's pixel width. If NULL, then the text already within the control is used.
Returns
true if the aCtrl had its size changed, else false.

Definition at line 156 of file ui_common.cpp.

157 {
158  wxWindow* window = aCtrl->GetParent();
159 
160  if( !window )
161  window = aCtrl;
162 
163  wxString ctrlText;
164 
165  if( !aString )
166  {
167  ctrlText = aCtrl->GetValue();
168  aString = &ctrlText;
169  }
170 
171  wxSize textz = GetTextSize( *aString, window );
172  wxSize ctrlz = aCtrl->GetSize();
173 
174  if( ctrlz.GetWidth() < textz.GetWidth() + 10 )
175  {
176  ctrlz.SetWidth( textz.GetWidth() + 10 );
177  aCtrl->SetSizeHints( ctrlz );
178  return true;
179  }
180 
181  return false;
182 }
wxSize GetTextSize(const wxString &aSingleLine, wxWindow *aWindow)
Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currentl...
Definition: ui_common.cpp:70

References GetTextSize().

Referenced by GERBVIEW_FRAME::UpdateTitleAndInfo().

◆ GetControlFont()

wxFont KIUI::GetControlFont ( wxWindow *  aWindow)

Definition at line 150 of file ui_common.cpp.

151 {
152  return getGUIFont( aWindow, 0 );
153 }
wxFont getGUIFont(wxWindow *aWindow, int aRelativeSize)
Definition: ui_common.cpp:101

References getGUIFont().

Referenced by EDA_MSG_PANEL::GetRequiredHeight(), EDA_MSG_PANEL::OnPaint(), PAGED_DIALOG::PAGED_DIALOG(), PROJECT_TREE::PROJECT_TREE(), WX_GRID::SetColLabelSize(), and WX_GRID::WX_GRID().

◆ GetInfoFont()

wxFont KIUI::GetInfoFont ( wxWindow *  aWindow)

Definition at line 144 of file ui_common.cpp.

145 {
146  return getGUIFont( aWindow, -1 );
147 }
wxFont getGUIFont(wxWindow *aWindow, int aRelativeSize)
Definition: ui_common.cpp:101

References getGUIFont().

Referenced by APPEARANCE_CONTROLS::APPEARANCE_CONTROLS(), APPEARANCE_CONTROLS::createControls(), DIALOG_FIELD_PROPERTIES::DIALOG_FIELD_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES::DIALOG_FOOTPRINT_PROPERTIES(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR(), DIALOG_GET_FOOTPRINT_BY_NAME::DIALOG_GET_FOOTPRINT_BY_NAME(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS(), DIALOG_JUNCTION_PROPS::DIALOG_JUNCTION_PROPS(), DIALOG_LIB_SHAPE_PROPERTIES::DIALOG_LIB_SHAPE_PROPERTIES(), DIALOG_LIB_TEXT_PROPERTIES::DIALOG_LIB_TEXT_PROPERTIES(), DIALOG_LINE_WIRE_BUS_PROPERTIES::DIALOG_LINE_WIRE_BUS_PROPERTIES(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES(), DIALOG_TEXT_AND_LABEL_PROPERTIES::DIALOG_TEXT_AND_LABEL_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), PANEL_ATTENUATORS::PANEL_ATTENUATORS(), PANEL_COMMON_SETTINGS::PANEL_COMMON_SETTINGS(), PANEL_EESCHEMA_DISPLAY_OPTIONS::PANEL_EESCHEMA_DISPLAY_OPTIONS(), PANEL_FP_EDITOR_DEFAULTS::PANEL_FP_EDITOR_DEFAULTS(), PANEL_SELECTION_FILTER::PANEL_SELECTION_FILTER(), PANEL_SETUP_CONSTRAINTS::PANEL_SETUP_CONSTRAINTS(), PANEL_SETUP_MASK_AND_PASTE::PANEL_SETUP_MASK_AND_PASTE(), PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES(), PROPERTIES_FRAME::PROPERTIES_FRAME(), PANEL_ATTENUATORS::ThemeChanged(), and WX_HTML_REPORT_PANEL::WX_HTML_REPORT_PANEL().

◆ GetMonospacedUIFont()

wxFont KIUI::GetMonospacedUIFont ( )

Definition at line 85 of file ui_common.cpp.

86 {
87  static int guiFontSize = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ).GetPointSize();
88 
89  wxFont font( guiFontSize, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL );
90 
91 #ifdef __WXMAC__
92  // https://trac.wxwidgets.org/ticket/19210
93  if( font.GetFaceName().IsEmpty() )
94  font.SetFaceName( wxT( "Menlo" ) );
95 #endif
96 
97  return font;
98 }

Referenced by CVPCB_MAINFRAME::BuildFootprintsListBox(), CVPCB_MAINFRAME::BuildLibrariesListBox(), CVPCB_MAINFRAME::BuildSymbolsListBox(), SIM_PLOT_FRAME::onShowNetlist(), and SCINTILLA_TRICKS::setupStyles().

◆ GetStatusFont()

wxFont KIUI::GetStatusFont ( wxWindow *  aWindow)

Definition at line 132 of file ui_common.cpp.

133 {
134 #ifdef __WXMAC__
135  int scale = -2;
136 #else
137  int scale = 0;
138 #endif
139 
140  return getGUIFont( aWindow, scale );
141 }
const int scale
wxFont getGUIFont(wxWindow *aWindow, int aRelativeSize)
Definition: ui_common.cpp:101

References getGUIFont(), and scale.

Referenced by CVPCB_MAINFRAME::CVPCB_MAINFRAME(), DIALOG_BOARD_STATISTICS::DIALOG_BOARD_STATISTICS(), EDA_DRAW_FRAME::EDA_DRAW_FRAME(), EDA_MSG_PANEL::EDA_MSG_PANEL(), and EVT_MENU_RANGE().

◆ GetStdMargin()

int KIUI::GetStdMargin ( )

Get the standard margin around a widget in the KiCad UI.

Returns
margin in pixels

Definition at line 41 of file ui_common.cpp.

42 {
43  // This is the value used in (most) wxFB dialogs
44  return 5;
45 }

Referenced by BUTTON_ROW_PANEL::addButtons(), BUTTON_ROW_PANEL::BUTTON_ROW_PANEL(), DIALOG_LIST_HOTKEYS::DIALOG_LIST_HOTKEYS(), PANEL_HOTKEYS_EDITOR::installButtons(), and PANEL_HOTKEYS_EDITOR::PANEL_HOTKEYS_EDITOR().

◆ GetTextSize()

wxSize KIUI::GetTextSize ( const wxString &  aSingleLine,
wxWindow *  aWindow 
)

Return the size of aSingleLine of text when it is rendered in aWindow using whatever font is currently set in that window.

Definition at line 70 of file ui_common.cpp.

71 {
72  wxCoord width;
73  wxCoord height;
74 
75  {
76  wxClientDC dc( aWindow );
77  dc.SetFont( aWindow->GetFont() );
78  dc.GetTextExtent( aSingleLine, &width, &height );
79  }
80 
81  return wxSize( width, height );
82 }

Referenced by DIALOG_EDIT_SYMBOLS_LIBID::AdjustGridColumns(), LIB_TREE_MODEL_ADAPTER::AttachTo(), DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE(), WX_ELLIPSIZED_STATIC_TEXT::DoGetBestSize(), EDA_DRAW_FRAME::EDA_DRAW_FRAME(), EnsureTextCtrlWidth(), FIELDS_EDITOR_GRID_DATA_MODEL::GetDataWidth(), PL_EDITOR_FRAME::PL_EDITOR_FRAME(), PANEL_SETUP_PINMAP::reBuildMatrixPanel(), DIALOG_FP_CONFLICT_ASSIGNMENT_SELECTOR::recalculateColumns(), PL_EDITOR_FRAME::ReCreateHToolbar(), ZONE_SETTINGS::SetupLayersList(), and NET_SELECTOR_COMBOPOPUP::updateSize().

◆ IsInputControlEditable()

bool KIUI::IsInputControlEditable ( wxWindow *  aControl)

Check if a input control has focus.

Parameters
aFocusControl that test if editable
Returns
True if control is input and editable OR control is not a input. False if control is input and not editable.

Definition at line 253 of file ui_common.cpp.

254 {
255  wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( aFocus );
256  wxStyledTextCtrl* styledText = dynamic_cast<wxStyledTextCtrl*>( aFocus );
257  wxSearchCtrl* searchCtrl = dynamic_cast<wxSearchCtrl*>( aFocus );
258 
259  if( textEntry )
260  return textEntry->IsEditable();
261  else if( styledText )
262  return styledText->IsEditable();
263  else if( searchCtrl )
264  return searchCtrl->IsEditable();
265 
266  return true; // Must return true if we can't determine the state, intentionally true for non inputs as well
267 }

Referenced by TOOL_DISPATCHER::DispatchWxEvent().

◆ IsInputControlFocused()

bool KIUI::IsInputControlFocused ( wxWindow *  aFocus = nullptr)

Check if a input control has focus.

Parameters
aFocusControl that has focus, if null, wxWidgets will be queried

Definition at line 220 of file ui_common.cpp.

221 {
222  if( aFocus == nullptr )
223  aFocus = wxWindow::FindFocus();
224 
225  if( !aFocus )
226  return false;
227 
228  wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( aFocus );
229  wxStyledTextCtrl* styledText = dynamic_cast<wxStyledTextCtrl*>( aFocus );
230  wxListBox* listBox = dynamic_cast<wxListBox*>( aFocus );
231  wxSearchCtrl* searchCtrl = dynamic_cast<wxSearchCtrl*>( aFocus );
232  wxCheckBox* checkboxCtrl = dynamic_cast<wxCheckBox*>( aFocus );
233  wxChoice* choiceCtrl = dynamic_cast<wxChoice*>( aFocus );
234  wxRadioButton* radioBtn = dynamic_cast<wxRadioButton*>( aFocus );
235  wxSpinCtrl* spinCtrl = dynamic_cast<wxSpinCtrl*>( aFocus );
236  wxSpinCtrlDouble* spinDblCtrl = dynamic_cast<wxSpinCtrlDouble*>( aFocus );
237  wxSlider* sliderCtl = dynamic_cast<wxSlider*>( aFocus );
238 
239  // Data view control is annoying, the focus is on a "wxDataViewCtrlMainWindow" class that
240  // is not formerly exported via the header.
241  wxDataViewCtrl* dataViewCtrl = nullptr;
242 
243  wxWindow* parent = aFocus->GetParent();
244 
245  if( parent )
246  dataViewCtrl = dynamic_cast<wxDataViewCtrl*>( parent );
247 
248  return ( textEntry || styledText || listBox || searchCtrl || checkboxCtrl || choiceCtrl
249  || radioBtn || spinCtrl || spinDblCtrl || sliderCtl || dataViewCtrl );
250 }

Referenced by TOOL_DISPATCHER::DispatchWxEvent(), KIGFX::WX_VIEW_CONTROLS::onEnter(), EDA_DRAW_PANEL_GAL::onEnter(), and EDA_DRAW_PANEL_GAL::OnEvent().

◆ IsModalDialogFocused()

bool KIUI::IsModalDialogFocused ( )

Definition at line 270 of file ui_common.cpp.

271 {
272  return Pgm().m_ModalDialogCount > 0;
273 }
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:106

References Pgm().

Referenced by EDA_DRAW_PANEL_GAL::onEnter(), and EDA_DRAW_PANEL_GAL::OnEvent().

◆ SelectReferenceNumber()

void KIUI::SelectReferenceNumber ( wxTextEntry *  aTextEntry)

Select the number (or "?") in a reference for ease of editing.

Definition at line 185 of file ui_common.cpp.

186 {
187  wxString ref = aTextEntry->GetValue();
188 
189  if( ref.find_first_of( '?' ) != ref.npos )
190  {
191  aTextEntry->SetSelection( ref.find_first_of( '?' ), ref.find_last_of( '?' ) + 1 );
192  }
193  else if( ref.find_first_of( '*' ) != ref.npos )
194  {
195  aTextEntry->SetSelection( ref.find_first_of( '*' ), ref.find_last_of( '*' ) + 1 );
196  }
197  else
198  {
199  wxString num = ref;
200 
201  while( !num.IsEmpty() && ( !isdigit( num.Last() ) || !isdigit( num.GetChar( 0 ) ) ) )
202  {
203  // Trim non-digit from end
204  if( !isdigit( num.Last() ) )
205  num.RemoveLast();
206 
207  // Trim non-digit from the start
208  if( !num.IsEmpty() && !isdigit( num.GetChar( 0 ) ) )
209  num = num.Right( num.Length() - 1 );
210  }
211 
212  aTextEntry->SetSelection( ref.Find( num ), ref.Find( num ) + num.Length() );
213 
214  if( num.IsEmpty() )
215  aTextEntry->SetSelection( -1, -1 );
216  }
217 }

Referenced by DIALOG_TEXT_PROPERTIES::OnSetFocusText(), DIALOG_FIELD_PROPERTIES::OnSetFocusText(), DIALOG_FOOTPRINT_PROPERTIES::OnUpdateUI(), DIALOG_SYMBOL_PROPERTIES::OnUpdateUI(), and DIALOG_TEXT_PROPERTIES::TransferDataToWindow().

◆ SetControlsTabOrder()

void KIUI::SetControlsTabOrder ( const std::vector< wxWindow * > &  aControlsInTabOrder)

Set a list of controls to have a defined sequential tab order.

Each control in the list will come after the previous one. The first control will keep its current position. The end result will be that the given control will be sequential when tabbed though.

This can be slightly clearer than manually calling MoveAfterInTabOrder on each control in turn.

Parameters
aControlsInTabOrderlist of controls (wxWindows) in desired tab order

◆ ValidatorTransferToWindowWithoutEvents()

void KIUI::ValidatorTransferToWindowWithoutEvents ( wxValidator &  aValidator)

Call a text validator's TransferDataToWindow method without firing a text change event.

This is useful when you want to keep a validator in sync with other data, but the act of changing it should not trigger other updates. It is the validator equivalent of ChangeValue() compared to SetValue().

This function blocks all events, but the same technique can be used to selectively block events.

Parameters
aValidatorthe validator to update the control of

Definition at line 376 of file validators.cpp.

377 {
378  wxWindow* ctrl = aValidator.GetWindow();
379 
380  wxCHECK_RET( ctrl != nullptr, wxT( "Transferring validator data without a control" ) );
381 
382  wxEventBlocker orient_update_blocker( ctrl, wxEVT_ANY );
383  aValidator.TransferToWindow();
384 }

Referenced by DIALOG_FOOTPRINT_PROPERTIES::updateOrientationControl().