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...
 
wxString EllipsizeStatusText (wxWindow *aWindow, const wxString &aString)
 Ellipsize text (at the end) to be no more than 1/3 of the window width. More...
 
wxString EllipsizeMenuText (const wxString &aString)
 Ellipsize text (at the end) to be no more than 36 characters. 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 309 of file ui_common.cpp.

310{
311 wxScrollBar* scrollBar = dynamic_cast<wxScrollBar*>( aWindow );
312 wxGrid* grid = dynamic_cast<wxGrid*>( aWindow );
313 wxStyledTextCtrl* scintilla = dynamic_cast<wxStyledTextCtrl*>( aWindow );
314 wxControl* control = dynamic_cast<wxControl*>( aWindow );
315
316 if( scrollBar )
317 {
318 // Leave a scroll bar active
319 }
320 else if( grid )
321 {
322 for( int row = 0; row < grid->GetNumberRows(); ++row )
323 {
324 for( int col = 0; col < grid->GetNumberCols(); ++col )
325 grid->SetReadOnly( row, col );
326 }
327 }
328 else if( scintilla )
329 {
330 scintilla->SetReadOnly( true );
331 }
332 else if( control )
333 {
334 control->Disable();
335 }
336 else
337 {
338 for( wxWindow* child : aWindow->GetChildren() )
339 Disable( child );
340 }
341}
void Disable(wxWindow *aWindow)
Makes a window read-only.
Definition: ui_common.cpp:309
must_if< error >::control< Rule > control
Definition: sim_serde.h:107

References Disable(), and grid.

Referenced by Disable(), DIALOG_SCHEMATIC_SETUP::onPageChanged(), DIALOG_BOARD_SETUP::onPageChanged(), and PANEL_DATA_COLLECTION::TransferDataToWindow().

◆ EllipsizeMenuText()

wxString KIUI::EllipsizeMenuText ( const wxString &  aString)

Ellipsize text (at the end) to be no more than 36 characters.

Returns
shortened text ending with an ellipsis.

Definition at line 203 of file ui_common.cpp.

204{
205 wxString msg = UnescapeString( aString );
206
207 msg.Replace( wxT( "\n" ), wxT( " " ) );
208 msg.Replace( wxT( "\r" ), wxT( " " ) );
209 msg.Replace( wxT( "\t" ), wxT( " " ) );
210
211 if( msg.Length() > 36 )
212 msg = msg.Left( 34 ) + wxT( "..." );
213
214 return msg;
215}
wxString UnescapeString(const wxString &aSource)

References UnescapeString().

Referenced by LIB_FIELD::GetSelectMenuText(), LIB_TEXT::GetSelectMenuText(), SCH_FIELD::GetSelectMenuText(), SCH_LABEL::GetSelectMenuText(), SCH_GLOBALLABEL::GetSelectMenuText(), SCH_HIERLABEL::GetSelectMenuText(), SCH_SHEET_PIN::GetSelectMenuText(), SCH_TEXT::GetSelectMenuText(), FP_TEXT::GetSelectMenuText(), and PCB_TEXT::GetSelectMenuText().

◆ EllipsizeStatusText()

wxString KIUI::EllipsizeStatusText ( wxWindow *  aWindow,
const wxString &  aString 
)

Ellipsize text (at the end) to be no more than 1/3 of the window width.

Returns
shortened text ending with an ellipsis.

Definition at line 185 of file ui_common.cpp.

186{
187 wxString msg = UnescapeString( aString );
188
189 msg.Replace( wxT( "\n" ), wxT( " " ) );
190 msg.Replace( wxT( "\r" ), wxT( " " ) );
191 msg.Replace( wxT( "\t" ), wxT( " " ) );
192
193 wxClientDC dc( aWindow );
194 int statusWidth = aWindow->GetSize().GetWidth();
195
196 // 30% of the first 800 pixels plus 60% of the remaining width
197 int textWidth = std::min( statusWidth, 800 ) * 0.3 + std::max( statusWidth - 800, 0 ) * 0.6;
198
199 return wxControl::Ellipsize( msg, dc, wxELLIPSIZE_END, textWidth );
200}

References UnescapeString().

Referenced by LIB_TEXTBOX::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), PCB_TEXT::GetMsgPanelInfo(), and PCB_TEXTBOX::GetMsgPanelInfo().

◆ 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(), PCB_CALCULATOR_FRAME::PCB_CALCULATOR_FRAME(), 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}

References getGUIFont().

Referenced by APPEARANCE_CONTROLS::APPEARANCE_CONTROLS(), APPEARANCE_CONTROLS::createControls(), DIALOG_ASSIGN_NETCLASS::DIALOG_ASSIGN_NETCLASS(), DIALOG_CLEANUP_GRAPHICS::DIALOG_CLEANUP_GRAPHICS(), 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_LINE_PROPERTIES::DIALOG_LINE_PROPERTIES(), DIALOG_NON_COPPER_ZONES_EDITOR::DIALOG_NON_COPPER_ZONES_EDITOR(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), DIALOG_PRINT_PCBNEW::DIALOG_PRINT_PCBNEW(), DIALOG_SHAPE_PROPERTIES::DIALOG_SHAPE_PROPERTIES(), DIALOG_SHEET_PROPERTIES::DIALOG_SHEET_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_WIRE_BUS_PROPERTIES::DIALOG_WIRE_BUS_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_PCM_SETTINGS::PANEL_PCM_SETTINGS(), PANEL_SELECTION_FILTER::PANEL_SELECTION_FILTER(), PANEL_SETUP_BUSES::PANEL_SETUP_BUSES(), PANEL_SETUP_CONSTRAINTS::PANEL_SETUP_CONSTRAINTS(), PANEL_SETUP_FORMATTING::PANEL_SETUP_FORMATTING(), PANEL_SETUP_MASK_AND_PASTE::PANEL_SETUP_MASK_AND_PASTE(), PANEL_SETUP_NETCLASSES::PANEL_SETUP_NETCLASSES(), PANEL_SYM_EDITING_OPTIONS::PANEL_SYM_EDITING_OPTIONS(), PROPERTIES_FRAME::PROPERTIES_FRAME(), TEMPLATE_WIDGET::SetTemplate(), 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( "Menlo" );
95#endif
96
97 return font;
98}

Referenced by CVPCB_MAINFRAME::BuildFootprintsListBox(), CVPCB_MAINFRAME::BuildSymbolsListBox(), CVPCB_MAINFRAME::CVPCB_MAINFRAME(), 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

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(), DIALOG_PLOT::DIALOG_PLOT(), DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE(), LIB_TREE_MODEL_ADAPTER::doAddColumn(), WX_ELLIPSIZED_STATIC_TEXT::DoGetBestSize(), EDA_DRAW_FRAME::EDA_DRAW_FRAME(), EnsureTextCtrlWidth(), FIELDS_EDITOR_GRID_DATA_MODEL::GetDataWidth(), PANEL_SETUP_CONSTRAINTS::PANEL_SETUP_CONSTRAINTS(), 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 286 of file ui_common.cpp.

287{
288 wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( aFocus );
289 wxStyledTextCtrl* styledText = dynamic_cast<wxStyledTextCtrl*>( aFocus );
290 wxSearchCtrl* searchCtrl = dynamic_cast<wxSearchCtrl*>( aFocus );
291
292 if( textEntry )
293 return textEntry->IsEditable();
294 else if( styledText )
295 return styledText->IsEditable();
296 else if( searchCtrl )
297 return searchCtrl->IsEditable();
298
299 return true; // Must return true if we can't determine the state, intentionally true for non inputs as well
300}

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 253 of file ui_common.cpp.

254{
255 if( aFocus == nullptr )
256 aFocus = wxWindow::FindFocus();
257
258 if( !aFocus )
259 return false;
260
261 wxTextEntry* textEntry = dynamic_cast<wxTextEntry*>( aFocus );
262 wxStyledTextCtrl* styledText = dynamic_cast<wxStyledTextCtrl*>( aFocus );
263 wxListBox* listBox = dynamic_cast<wxListBox*>( aFocus );
264 wxSearchCtrl* searchCtrl = dynamic_cast<wxSearchCtrl*>( aFocus );
265 wxCheckBox* checkboxCtrl = dynamic_cast<wxCheckBox*>( aFocus );
266 wxChoice* choiceCtrl = dynamic_cast<wxChoice*>( aFocus );
267 wxRadioButton* radioBtn = dynamic_cast<wxRadioButton*>( aFocus );
268 wxSpinCtrl* spinCtrl = dynamic_cast<wxSpinCtrl*>( aFocus );
269 wxSpinCtrlDouble* spinDblCtrl = dynamic_cast<wxSpinCtrlDouble*>( aFocus );
270 wxSlider* sliderCtl = dynamic_cast<wxSlider*>( aFocus );
271
272 // Data view control is annoying, the focus is on a "wxDataViewCtrlMainWindow" class that
273 // is not formally exported via the header.
274 wxDataViewCtrl* dataViewCtrl = nullptr;
275
276 wxWindow* parent = aFocus->GetParent();
277
278 if( parent )
279 dataViewCtrl = dynamic_cast<wxDataViewCtrl*>( parent );
280
281 return ( textEntry || styledText || listBox || searchCtrl || checkboxCtrl || choiceCtrl
282 || radioBtn || spinCtrl || spinDblCtrl || sliderCtl || dataViewCtrl );
283}

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

◆ IsModalDialogFocused()

bool KIUI::IsModalDialogFocused ( )

Definition at line 303 of file ui_common.cpp.

304{
305 return Pgm().m_ModalDialogCount > 0;
306}
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111

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 218 of file ui_common.cpp.

219{
220 wxString ref = aTextEntry->GetValue();
221
222 if( ref.find_first_of( '?' ) != ref.npos )
223 {
224 aTextEntry->SetSelection( ref.find_first_of( '?' ), ref.find_last_of( '?' ) + 1 );
225 }
226 else if( ref.find_first_of( '*' ) != ref.npos )
227 {
228 aTextEntry->SetSelection( ref.find_first_of( '*' ), ref.find_last_of( '*' ) + 1 );
229 }
230 else
231 {
232 wxString num = ref;
233
234 while( !num.IsEmpty() && ( !isdigit( num.Last() ) || !isdigit( num.GetChar( 0 ) ) ) )
235 {
236 // Trim non-digit from end
237 if( !isdigit( num.Last() ) )
238 num.RemoveLast();
239
240 // Trim non-digit from the start
241 if( !num.IsEmpty() && !isdigit( num.GetChar( 0 ) ) )
242 num = num.Right( num.Length() - 1 );
243 }
244
245 aTextEntry->SetSelection( ref.Find( num ), ref.Find( num ) + num.Length() );
246
247 if( num.IsEmpty() )
248 aTextEntry->SetSelection( -1, -1 );
249 }
250}

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

◆ 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, "Transferring validator data without a control" );
381
382 wxEventBlocker orient_update_blocker( ctrl, wxEVT_ANY );
383 aValidator.TransferToWindow();
384}