KiCad PCB EDA Suite
Loading...
Searching...
No Matches
toolbars_sch_editor.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) 2008 Wayne Stambaugh <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 * Copyright (C) 2019 CERN
8 *
9 * This program is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * as published by the Free Software Foundation; either version 2
12 * of the License, or (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, you may find one here:
21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
22 * or you may search the http://www.gnu.org website for the version 2 license,
23 * or you may write to the Free Software Foundation, Inc.,
24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
25 */
26
27#include <advanced_config.h>
29#include <sch_draw_panel.h>
30#include <sch_edit_frame.h>
31#include <kiface_base.h>
32#include <bitmaps.h>
33#include <eeschema_id.h>
34#include <pgm_base.h>
35#include <python_scripting.h>
36#include <tool/action_menu.h>
37#include <tool/tool_manager.h>
38#include <tool/action_toolbar.h>
40#include <tools/sch_actions.h>
47#include <toolbars_sch_editor.h>
48#include <wx/choice.h>
49#include <wx/stattext.h>
50
51
53 _( "Current variant" ),
54 _( "Selects the current schematic variant" ),
55 { FRAME_SCH } );
56
57
58std::optional<TOOLBAR_CONFIGURATION> SCH_EDIT_TOOLBAR_SETTINGS::DefaultToolbarConfig( TOOLBAR_LOC aToolbar )
59{
61
62 // clang-format off
63 switch( aToolbar )
64 {
66 return std::nullopt;
67
69 config.AppendAction( ACTIONS::toggleGrid )
70 .WithContextMenu(
71 []( TOOL_MANAGER* aToolMgr )
72 {
73 SCH_SELECTION_TOOL* selTool = aToolMgr->GetTool<SCH_SELECTION_TOOL>();
74 auto menu = std::make_unique<ACTION_MENU>( false, selTool );
75 menu->Add( ACTIONS::gridProperties );
76 return menu;
77 } )
78 .AppendAction( ACTIONS::toggleGridOverrides )
79 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Units" ) )
80 .AddAction( ACTIONS::inchesUnits )
81 .AddAction( ACTIONS::milsUnits )
82 .AddAction( ACTIONS::millimetersUnits ) )
83 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Crosshair modes" ) )
86 .AddAction( ACTIONS::cursor45Crosshairs ) );
87
88 config.AppendSeparator()
89 .AppendAction( SCH_ACTIONS::toggleHiddenPins );
90
91 config.AppendSeparator()
92 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Line modes" ) )
93 .AddAction( SCH_ACTIONS::lineModeFree )
94 .AddAction( SCH_ACTIONS::lineMode90 )
95 .AddAction( SCH_ACTIONS::lineMode45 ) );
96
97 config.AppendSeparator()
98 .AppendAction( SCH_ACTIONS::toggleAnnotateAuto );
99
100 config.AppendSeparator()
101 .AppendAction( SCH_ACTIONS::showHierarchy )
102 .AppendAction( ACTIONS::showProperties );
103
104 if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
105 config.AppendAction( ACTIONS::toggleBoundingBoxes );
106
107 break;
108
110 config.AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Selection modes" ) )
111 .AddAction( ACTIONS::selectSetRect )
112 .AddAction( ACTIONS::selectSetLasso ) )
113 .AppendAction( SCH_ACTIONS::highlightNetTool );
114
115 config.AppendSeparator()
116 .AppendAction( SCH_ACTIONS::placeSymbol )
117 .AppendAction( SCH_ACTIONS::placePower )
118 .AppendAction( SCH_ACTIONS::drawWire )
119 .AppendAction( SCH_ACTIONS::drawBus )
120 .AppendAction( SCH_ACTIONS::placeBusWireEntry )
121 .AppendAction( SCH_ACTIONS::placeNoConnect )
122 .AppendAction( SCH_ACTIONS::placeJunction )
123 .AppendGroup( TOOLBAR_GROUP_CONFIG( _( "Labels" ) )
124 .AddAction( SCH_ACTIONS::placeLabel )
125 .AddAction( SCH_ACTIONS::placeClassLabel )
127 .AddAction( SCH_ACTIONS::placeHierLabel ) )
128 .AppendAction( SCH_ACTIONS::drawRuleArea )
129 .AppendAction( SCH_ACTIONS::drawSheet )
130 .AppendAction( SCH_ACTIONS::placeSheetPin )
131 .AppendAction( SCH_ACTIONS::syncAllSheetsPins );
132
133 config.AppendSeparator()
134 .AppendAction( SCH_ACTIONS::placeSchematicText )
135 .AppendAction( SCH_ACTIONS::drawTextBox )
136 .AppendAction( SCH_ACTIONS::drawTable )
137 .AppendAction( SCH_ACTIONS::drawRectangle )
138 .AppendAction( SCH_ACTIONS::drawCircle )
139 .AppendAction( SCH_ACTIONS::drawArc )
140 .AppendAction( SCH_ACTIONS::drawBezier )
141 .AppendAction( SCH_ACTIONS::drawLines )
142 .AppendAction( SCH_ACTIONS::placeImage )
143 .AppendAction( ACTIONS::deleteTool );
144
145 break;
146
148 if( Kiface().IsSingle() ) // not when under a project mgr
149 {
150 config.AppendAction( ACTIONS::doNew );
151 config.AppendAction( ACTIONS::open );
152 }
153
154 config.AppendAction( ACTIONS::save );
155
156 config.AppendSeparator()
157 .AppendAction( SCH_ACTIONS::schematicSetup );
158
159 config.AppendSeparator()
160 .AppendAction( ACTIONS::pageSettings )
161 .AppendAction( ACTIONS::print )
162 .AppendAction( ACTIONS::plot );
163
164 config.AppendSeparator()
165 .AppendAction( ACTIONS::paste );
166
167 config.AppendSeparator()
168 .AppendAction( ACTIONS::undo )
169 .AppendAction( ACTIONS::redo );
170
171 config.AppendSeparator()
172 .AppendAction( ACTIONS::find )
173 .AppendAction( ACTIONS::findAndReplace );
174
175 config.AppendSeparator()
176 .AppendAction( ACTIONS::zoomRedraw )
177 .AppendAction( ACTIONS::zoomInCenter )
178 .AppendAction( ACTIONS::zoomOutCenter )
179 .AppendAction( ACTIONS::zoomFitScreen )
180 .AppendAction( ACTIONS::zoomFitObjects )
181 .AppendAction( ACTIONS::zoomTool );
182
183 config.AppendSeparator()
184 .AppendAction( SCH_ACTIONS::navigateBack )
185 .AppendAction( SCH_ACTIONS::navigateUp )
186 .AppendAction( SCH_ACTIONS::navigateForward );
187
188 config.AppendSeparator()
189 .AppendAction( SCH_ACTIONS::rotateCCW )
190 .AppendAction( SCH_ACTIONS::rotateCW )
191 .AppendAction( SCH_ACTIONS::mirrorV )
192 .AppendAction( SCH_ACTIONS::mirrorH )
193 .AppendAction( ACTIONS::group )
194 .AppendAction( ACTIONS::ungroup );
195
196 config.AppendSeparator()
197 .AppendAction( ACTIONS::showSymbolEditor )
198 .AppendAction( ACTIONS::showSymbolBrowser )
199 .AppendAction( ACTIONS::showFootprintEditor );
200
201 config.AppendSeparator()
202 .AppendAction( SCH_ACTIONS::annotate )
203 .AppendAction( SCH_ACTIONS::runERC )
204 .AppendAction( SCH_ACTIONS::showSimulator )
205 .AppendAction( SCH_ACTIONS::assignFootprints )
206 .AppendAction( SCH_ACTIONS::editSymbolFields )
207 .AppendAction( SCH_ACTIONS::generateBOM );
208
209 config.AppendSeparator()
210 .AppendAction( SCH_ACTIONS::showPcbNew );
211
212 if( ADVANCED_CFG::GetCfg().m_EnableVariantsUI )
214
215 // Insert all the IPC plugins here on the toolbar
216 // TODO (ISM): Move this to individual actions for each script
218
219 break;
220 }
221
222 // clang-format on
223 return config;
224}
225
226
228{
230
231 if( ADVANCED_CFG::GetCfg().m_EnableVariantsUI )
232 {
233 // Variant selection drop down control on main tool bar.
234 auto variantSelectionCtrlFactory =
235 [this]( ACTION_TOOLBAR* aToolbar )
236 {
237 std::optional<wxString> currentVariantName = Schematic().GetCurrentVariant();
238 wxString tmp = currentVariantName ? *currentVariantName : GetDefaultVariantName();
239
240 m_currentVariantCtrl = new wxChoice( aToolbar, ID_TOOLBAR_SCH_SELECT_VARAIANT, wxDefaultPosition,
241 wxDefaultSize, Schematic().GetVariantNamesForUI(), 0,
242 wxDefaultValidator, tmp );
243
244 m_currentVariantCtrl->SetToolTip( _( "Select the current variant to display and edit." ) );
245 aToolbar->Add( m_currentVariantCtrl );
246 UpdateVariantSelectionCtrl( Schematic().GetVariantNamesForUI() );
247 };
248
250 }
251
252 // IPC/Scripting plugin control
253 // TODO (ISM): Clean this up to make IPC actions just normal tool actions to get rid of this entire
254 // control
255 auto pluginControlFactory =
256 [this]( ACTION_TOOLBAR* aToolbar )
257 {
258 // Add scripting console and API plugins
259 bool scriptingAvailable = SCRIPTING::IsWxAvailable();
260
261#ifdef KICAD_IPC_API
262 bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server
263 && !Pgm().GetPluginManager().GetActionsForScope( PluginActionScope() ).empty();
264#else
265 bool haveApiPlugins = false;
266#endif
267
268 if( scriptingAvailable || haveApiPlugins )
269 {
270 aToolbar->AddScaledSeparator( aToolbar->GetParent() );
271
272 if( haveApiPlugins )
273 AddApiPluginTools( aToolbar );
274 }
275 };
276
278}
279
280
282{
284
285 switch( aId )
286 {
288 }
289}
290
291
292void SCH_EDIT_FRAME::UpdateVariantSelectionCtrl( const wxArrayString& aVariantNames )
293{
295 return;
296
297 // Fall back to the default if nothing is currently selected.
298 wxString currentSelection = GetDefaultVariantName();
299 int selectionIndex = m_currentVariantCtrl->GetSelection();
300
301 if( selectionIndex != wxNOT_FOUND )
302 currentSelection = m_currentVariantCtrl->GetString( selectionIndex );
303
304 // Add all variant names, a separator, and "Add New Variant..." at the end
305 wxArrayString contents = aVariantNames;
306 contents.Add( wxS( "---" ) );
307 contents.Add( _( "Add New Variant..." ) );
308
309 m_currentVariantCtrl->Set( contents );
310
311 selectionIndex = m_currentVariantCtrl->FindString( currentSelection );
312
313 if( ( selectionIndex == wxNOT_FOUND ) && ( m_currentVariantCtrl->GetCount() != 0 ) )
314 selectionIndex = 0;
315
316 m_currentVariantCtrl->SetSelection( selectionIndex );
317}
318
319
320void SCH_EDIT_FRAME::onVariantSelected( wxCommandEvent& aEvent )
321{
322 if( aEvent.GetId() != ID_TOOLBAR_SCH_SELECT_VARAIANT )
323 return;
324
325 int selection = m_currentVariantCtrl->GetSelection();
326 int count = m_currentVariantCtrl->GetCount();
327
328 if( selection == wxNOT_FOUND || count == 0 )
329 return;
330
331 // "Add New Variant..." is always the last item, separator is second-to-last
332 if( selection == count - 1 )
333 {
334 // Restore previous selection before showing dialog
335 int previousSelection = m_currentVariantCtrl->FindString(
336 Schematic().GetCurrentVariant().IsEmpty() ? GetDefaultVariantName()
337 : Schematic().GetCurrentVariant() );
338
339 if( previousSelection != wxNOT_FOUND )
340 m_currentVariantCtrl->SetSelection( previousSelection );
341
343 return;
344 }
345
346 // Separator line - ignore selection
347 if( selection == count - 2 )
348 {
349 int previousSelection = m_currentVariantCtrl->FindString(
350 Schematic().GetCurrentVariant().IsEmpty() ? GetDefaultVariantName()
351 : Schematic().GetCurrentVariant() );
352
353 if( previousSelection != wxNOT_FOUND )
354 m_currentVariantCtrl->SetSelection( previousSelection );
355
356 return;
357 }
358
359 wxString selectedString = m_currentVariantCtrl->GetString( selection );
360 wxString selectedVariant;
361
362 if( selectedString != GetDefaultVariantName() )
363 selectedVariant = selectedString;
364
365 Schematic().SetCurrentVariant( selectedVariant );
367 HardRedraw();
368}
369
370
372{
373 // Create a dialog with both name and description fields
374 wxDialog dlg( this, wxID_ANY, _( "New Variant" ), wxDefaultPosition, wxDefaultSize,
375 wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER );
376
377 wxBoxSizer* mainSizer = new wxBoxSizer( wxVERTICAL );
378
379 // Name field
380 wxStaticText* nameLabel = new wxStaticText( &dlg, wxID_ANY, _( "Variant name:" ) );
381 mainSizer->Add( nameLabel, 0, wxALL | wxEXPAND, 5 );
382
383 wxTextCtrl* nameCtrl = new wxTextCtrl( &dlg, wxID_ANY );
384 mainSizer->Add( nameCtrl, 0, wxALL | wxEXPAND, 5 );
385
386 // Description field
387 wxStaticText* descLabel = new wxStaticText( &dlg, wxID_ANY, _( "Description (optional):" ) );
388 mainSizer->Add( descLabel, 0, wxALL | wxEXPAND, 5 );
389
390 wxTextCtrl* descCtrl = new wxTextCtrl( &dlg, wxID_ANY, wxEmptyString, wxDefaultPosition,
391 wxSize( 300, 60 ), wxTE_MULTILINE );
392 mainSizer->Add( descCtrl, 1, wxALL | wxEXPAND, 5 );
393
394 // Buttons
395 wxStdDialogButtonSizer* btnSizer = new wxStdDialogButtonSizer();
396 btnSizer->AddButton( new wxButton( &dlg, wxID_OK ) );
397 btnSizer->AddButton( new wxButton( &dlg, wxID_CANCEL ) );
398 btnSizer->Realize();
399 mainSizer->Add( btnSizer, 0, wxALL | wxALIGN_RIGHT, 5 );
400
401 dlg.SetSizer( mainSizer );
402 dlg.Fit();
403 dlg.Centre();
404
405 if( dlg.ShowModal() == wxID_CANCEL )
406 return false;
407
408 wxString variantName = nameCtrl->GetValue().Trim().Trim( false );
409 wxString variantDesc = descCtrl->GetValue().Trim().Trim( false );
410
411 // Empty strings, reserved names, and duplicate variant names are not allowed.
412 if( variantName.IsEmpty() )
413 {
414 GetInfoBar()->ShowMessageFor( _( "Variant name cannot be empty." ),
415 10000, wxICON_ERROR );
416 return false;
417 }
418
419 // Check for reserved name (case-insensitive)
420 if( variantName.CmpNoCase( GetDefaultVariantName() ) == 0 )
421 {
422 GetInfoBar()->ShowMessageFor( wxString::Format( _( "'%s' is a reserved variant name." ),
424 10000, wxICON_ERROR );
425 return false;
426 }
427
428 // Check for duplicate variant names (case-insensitive)
429 for( const wxString& existingName : Schematic().GetVariantNames() )
430 {
431 if( existingName.CmpNoCase( variantName ) == 0 )
432 {
433 GetInfoBar()->ShowMessageFor( wxString::Format( _( "Variant '%s' already exists." ),
434 existingName ),
435 10000, wxICON_ERROR );
436 return false;
437 }
438 }
439
440 // Add variant to the schematic
441 Schematic().AddVariant( variantName );
442
443 if( !variantDesc.IsEmpty() )
444 Schematic().SetVariantDescription( variantName, variantDesc );
445
446 // Update the variant selector and select the new variant
447 UpdateVariantSelectionCtrl( Schematic().GetVariantNamesForUI() );
448 SetCurrentVariant( variantName );
450 HardRedraw();
451 return true;
452}
453
454
455void SCH_EDIT_FRAME::SetCurrentVariant( const wxString& aVariantName )
456{
458 return;
459
460 wxString name = aVariantName.IsEmpty() ? GetDefaultVariantName() : aVariantName;
461
462 int newSelection = m_currentVariantCtrl->FindString( name );
463
464 if( newSelection == wxNOT_FOUND )
465 return;
466
467 int currentSelection = m_currentVariantCtrl->GetSelection();
468
469 wxString selectedString;
470
471 if( currentSelection != wxNOT_FOUND )
472 selectedString = m_currentVariantCtrl->GetString( currentSelection );
473
474 if( selectedString != name )
475 {
476 m_currentVariantCtrl->SetSelection( newSelection );
477 Schematic().SetCurrentVariant( aVariantName );
478 }
479}
const char * name
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static TOOL_ACTION gridProperties
Definition actions.h:200
static TOOL_ACTION toggleGrid
Definition actions.h:198
static TOOL_ACTION paste
Definition actions.h:80
static TOOL_ACTION zoomRedraw
Definition actions.h:132
static TOOL_ACTION millimetersUnits
Definition actions.h:206
static TOOL_ACTION cursorSmallCrosshairs
Definition actions.h:152
static TOOL_ACTION zoomOutCenter
Definition actions.h:136
static TOOL_ACTION selectSetLasso
Definition actions.h:221
static TOOL_ACTION selectSetRect
Set lasso selection mode.
Definition actions.h:220
static TOOL_ACTION group
Definition actions.h:239
static TOOL_ACTION showSymbolEditor
Definition actions.h:260
static TOOL_ACTION showSymbolBrowser
Definition actions.h:259
static TOOL_ACTION findAndReplace
Definition actions.h:118
static TOOL_ACTION milsUnits
Definition actions.h:205
static TOOL_ACTION ungroup
Definition actions.h:240
static TOOL_ACTION toggleBoundingBoxes
Definition actions.h:157
static TOOL_ACTION plot
Definition actions.h:65
static TOOL_ACTION open
Definition actions.h:57
static TOOL_ACTION pageSettings
Definition actions.h:63
static TOOL_ACTION undo
Definition actions.h:75
static TOOL_ACTION inchesUnits
Definition actions.h:204
static TOOL_ACTION save
Definition actions.h:58
static TOOL_ACTION zoomFitScreen
Definition actions.h:142
static TOOL_ACTION redo
Definition actions.h:76
static TOOL_ACTION deleteTool
Definition actions.h:86
static TOOL_ACTION zoomTool
Definition actions.h:146
static TOOL_ACTION cursor45Crosshairs
Definition actions.h:154
static TOOL_ACTION showFootprintEditor
Definition actions.h:262
static TOOL_ACTION print
Definition actions.h:64
static TOOL_ACTION showProperties
Definition actions.h:266
static TOOL_ACTION doNew
Definition actions.h:54
static TOOL_ACTION zoomFitObjects
Definition actions.h:143
static TOOL_ACTION zoomInCenter
Definition actions.h:135
static TOOL_ACTION toggleGridOverrides
Definition actions.h:199
static TOOL_ACTION cursorFullCrosshairs
Definition actions.h:153
static TOOL_ACTION find
Definition actions.h:117
static ACTION_TOOLBAR_CONTROL ipcScripting
Class to hold basic information about controls that can be added to the toolbars.
Define the structure of a toolbar with buttons that invoke ACTIONs.
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
virtual void ClearToolbarControl(int aId)
void RegisterCustomToolbarControlFactory(const ACTION_TOOLBAR_CONTROL &aControlDesc, const ACTION_TOOLBAR_CONTROL_FACTORY &aControlFactory)
Register a creation factory for toolbar controls that are present in this frame.
virtual void configureToolbars()
WX_INFOBAR * GetInfoBar()
virtual void AddApiPluginTools(ACTION_TOOLBAR *aToolbar)
Append actions from API plugins to the given toolbar.
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition pgm_base.cpp:547
void SetCurrentVariant(const wxString &aVariantName)
void AddVariant(const wxString &aVariantName)
wxString GetCurrentVariant() const
Return the current variant being edited.
void SetVariantDescription(const wxString &aVariantName, const wxString &aDescription)
Set the description for a variant.
static TOOL_ACTION showPcbNew
static TOOL_ACTION rotateCCW
static TOOL_ACTION placeClassLabel
Definition sch_actions.h:79
static TOOL_ACTION placeSheetPin
Definition sch_actions.h:85
static TOOL_ACTION assignFootprints
static TOOL_ACTION mirrorV
static TOOL_ACTION placeGlobalLabel
Definition sch_actions.h:80
static TOOL_ACTION editSymbolFields
static TOOL_ACTION drawTextBox
Definition sch_actions.h:93
static TOOL_ACTION toggleAnnotateAuto
static TOOL_ACTION syncAllSheetsPins
Definition sch_actions.h:91
static TOOL_ACTION drawArc
Definition sch_actions.h:97
static TOOL_ACTION drawSheet
Definition sch_actions.h:82
static TOOL_ACTION navigateBack
static TOOL_ACTION schematicSetup
static TOOL_ACTION highlightNetTool
static TOOL_ACTION drawRectangle
Definition sch_actions.h:95
static TOOL_ACTION drawLines
Definition sch_actions.h:99
static TOOL_ACTION placeHierLabel
Definition sch_actions.h:81
static TOOL_ACTION placeLabel
Definition sch_actions.h:78
static TOOL_ACTION drawCircle
Definition sch_actions.h:96
static TOOL_ACTION placeBusWireEntry
Definition sch_actions.h:77
static TOOL_ACTION drawBezier
Definition sch_actions.h:98
static TOOL_ACTION drawWire
Definition sch_actions.h:72
static TOOL_ACTION lineMode45
static TOOL_ACTION rotateCW
static TOOL_ACTION generateBOM
static TOOL_ACTION showHierarchy
static TOOL_ACTION placeJunction
Definition sch_actions.h:76
static TOOL_ACTION drawRuleArea
static TOOL_ACTION placeSymbol
Definition sch_actions.h:66
static TOOL_ACTION placeImage
static TOOL_ACTION navigateForward
static TOOL_ACTION mirrorH
static TOOL_ACTION showSimulator
static TOOL_ACTION drawBus
Definition sch_actions.h:73
static TOOL_ACTION runERC
Inspection and Editing.
static TOOL_ACTION drawTable
Definition sch_actions.h:94
static TOOL_ACTION lineMode90
static TOOL_ACTION placeSchematicText
Definition sch_actions.h:92
static TOOL_ACTION lineModeFree
static TOOL_ACTION annotate
static TOOL_ACTION placeNoConnect
Definition sch_actions.h:75
static TOOL_ACTION toggleHiddenPins
static TOOL_ACTION placePower
Definition sch_actions.h:68
static TOOL_ACTION navigateUp
static ACTION_TOOLBAR_CONTROL currentVariant
wxChoice * m_currentVariantCtrl
void SetCurrentVariant(const wxString &aVariantName)
void UpdateVariantSelectionCtrl(const wxArrayString &aVariantNames)
Update the variant name control on the main toolbar.
bool ShowAddVariantDialog()
Show a dialog to create a new variant with name and description.
void configureToolbars() override
void HardRedraw() override
Rebuild the GAL and redraw the screen.
PLUGIN_ACTION_SCOPE PluginActionScope() const override
SCHEMATIC & Schematic() const
void onVariantSelected(wxCommandEvent &aEvent)
void ClearToolbarControl(int aId) override
std::optional< TOOLBAR_CONFIGURATION > DefaultToolbarConfig(TOOLBAR_LOC aToolbar) override
Get the default tools to show on the specified canvas toolbar.
Master controller class:
void ShowMessageFor(const wxString &aMessage, int aTime, int aFlags=wxICON_INFORMATION, MESSAGE_TYPE aType=WX_INFOBAR::MESSAGE_TYPE::GENERIC)
Show the infobar with the provided message and icon for a specific period of time.
#define _(s)
@ ID_TOOLBAR_SCH_SELECT_VARAIANT
@ FRAME_SCH
Definition frame_type.h:34
PGM_BASE & Pgm()
The global program "get" accessor.
see class PGM_BASE
wxString GetDefaultVariantName()
@ RIGHT
Toolbar on the right side of the canvas.
@ LEFT
Toolbar on the left side of the canvas.
@ TOP_AUX
Toolbar on the top of the canvas.
@ TOP_MAIN
Toolbar on the top of the canvas.