KiCad PCB EDA Suite
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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 <stambaughw@gmail.com>
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/tool_manager.h>
37#include <tool/action_toolbar.h>
38#include <tools/sch_actions.h>
45#include <toolbars_sch_editor.h>
46
47
48std::optional<TOOLBAR_CONFIGURATION> SCH_EDIT_TOOLBAR_SETTINGS::DefaultToolbarConfig( TOOLBAR_LOC aToolbar )
49{
51
52 // clang-format off
53 switch( aToolbar )
54 {
55 case TOOLBAR_LOC::TOP_AUX:
56 return std::nullopt;
57
58 case TOOLBAR_LOC::LEFT:
59 config.AppendAction( ACTIONS::toggleGrid )
60 .AppendAction( ACTIONS::toggleGridOverrides )
61 .AppendAction( ACTIONS::inchesUnits )
62 .AppendAction( ACTIONS::milsUnits )
63 .AppendAction( ACTIONS::millimetersUnits )
64 .AppendAction( ACTIONS::toggleCursorStyle );
65
66 config.AppendSeparator()
67 .AppendAction( SCH_ACTIONS::toggleHiddenPins );
68
69 config.AppendSeparator()
70 .AppendAction( SCH_ACTIONS::lineModeFree )
71 .AppendAction( SCH_ACTIONS::lineMode90 )
72 .AppendAction( SCH_ACTIONS::lineMode45 );
73
74 config.AppendSeparator()
75 .AppendAction( SCH_ACTIONS::toggleAnnotateAuto );
76
77 config.AppendSeparator()
78 .AppendAction( SCH_ACTIONS::showHierarchy )
79 .AppendAction( ACTIONS::showProperties );
80
81 if( ADVANCED_CFG::GetCfg().m_DrawBoundingBoxes )
83
84 /* TODO (ISM): Handle context menus
85 EE_SELECTION_TOOL* selTool = m_toolManager->GetTool<EE_SELECTION_TOOL>();
86 std::unique_ptr<ACTION_MENU> gridMenu = std::make_unique<ACTION_MENU>( false, selTool );
87 gridMenu->Add( ACTIONS::gridProperties );
88 m_tbLeft->AddToolContextMenu( ACTIONS::toggleGrid, std::move( gridMenu ) );
89 */
90 break;
91
92 case TOOLBAR_LOC::RIGHT:
93 config.AppendAction( ACTIONS::selectionTool )
94 .AppendAction( SCH_ACTIONS::highlightNetTool );
95
96 config.AppendSeparator()
97 .AppendAction( SCH_ACTIONS::placeSymbol )
98 .AppendAction( SCH_ACTIONS::placePower )
99 .AppendAction( SCH_ACTIONS::drawWire )
100 .AppendAction( SCH_ACTIONS::drawBus )
101 .AppendAction( SCH_ACTIONS::placeBusWireEntry )
102 .AppendAction( SCH_ACTIONS::placeNoConnect )
103 .AppendAction( SCH_ACTIONS::placeJunction )
104 .AppendAction( SCH_ACTIONS::placeLabel )
105 .AppendAction( SCH_ACTIONS::placeClassLabel )
106 .AppendAction( SCH_ACTIONS::drawRuleArea )
107 .AppendAction( SCH_ACTIONS::placeGlobalLabel )
108 .AppendAction( SCH_ACTIONS::placeHierLabel )
109 .AppendAction( SCH_ACTIONS::drawSheet )
110 .AppendAction( SCH_ACTIONS::placeSheetPin )
111 .AppendAction( SCH_ACTIONS::syncAllSheetsPins );
112
113 config.AppendSeparator()
114 .AppendAction( SCH_ACTIONS::placeSchematicText )
115 .AppendAction( SCH_ACTIONS::drawTextBox )
116 .AppendAction( SCH_ACTIONS::drawTable )
117 .AppendAction( SCH_ACTIONS::drawRectangle )
118 .AppendAction( SCH_ACTIONS::drawCircle )
119 .AppendAction( SCH_ACTIONS::drawArc )
120 .AppendAction( SCH_ACTIONS::drawBezier )
121 .AppendAction( SCH_ACTIONS::drawLines )
122 .AppendAction( SCH_ACTIONS::placeImage )
123 .AppendAction( ACTIONS::deleteTool );
124
125 break;
126
127 case TOOLBAR_LOC::TOP_MAIN:
128 if( Kiface().IsSingle() ) // not when under a project mgr
129 {
130 config.AppendAction( ACTIONS::doNew );
131 config.AppendAction( ACTIONS::open );
132 }
133
134 config.AppendAction( ACTIONS::save );
135
136 config.AppendSeparator()
137 .AppendAction( SCH_ACTIONS::schematicSetup );
138
139 config.AppendSeparator()
140 .AppendAction( ACTIONS::pageSettings )
141 .AppendAction( ACTIONS::print )
142 .AppendAction( ACTIONS::plot );
143
144 config.AppendSeparator()
145 .AppendAction( ACTIONS::paste );
146
147 config.AppendSeparator()
148 .AppendAction( ACTIONS::undo )
149 .AppendAction( ACTIONS::redo );
150
151 config.AppendSeparator()
152 .AppendAction( ACTIONS::find )
153 .AppendAction( ACTIONS::findAndReplace );
154
155 config.AppendSeparator()
156 .AppendAction( ACTIONS::zoomRedraw )
157 .AppendAction( ACTIONS::zoomInCenter )
158 .AppendAction( ACTIONS::zoomOutCenter )
159 .AppendAction( ACTIONS::zoomFitScreen )
160 .AppendAction( ACTIONS::zoomFitObjects )
161 .AppendAction( ACTIONS::zoomTool );
162
163 config.AppendSeparator()
164 .AppendAction( SCH_ACTIONS::navigateBack )
165 .AppendAction( SCH_ACTIONS::navigateUp )
166 .AppendAction( SCH_ACTIONS::navigateForward );
167
168 config.AppendSeparator()
169 .AppendAction( SCH_ACTIONS::rotateCCW )
170 .AppendAction( SCH_ACTIONS::rotateCW )
171 .AppendAction( SCH_ACTIONS::mirrorV )
172 .AppendAction( SCH_ACTIONS::mirrorH );
173
174 config.AppendSeparator()
175 .AppendAction( ACTIONS::showSymbolEditor )
176 .AppendAction( ACTIONS::showSymbolBrowser )
177 .AppendAction( ACTIONS::showFootprintEditor );
178
179 config.AppendSeparator()
180 .AppendAction( SCH_ACTIONS::annotate )
181 .AppendAction( SCH_ACTIONS::runERC )
182 .AppendAction( SCH_ACTIONS::showSimulator )
183 .AppendAction( SCH_ACTIONS::assignFootprints )
184 .AppendAction( SCH_ACTIONS::editSymbolFields )
185 .AppendAction( SCH_ACTIONS::generateBOM );
186
187 config.AppendSeparator()
188 .AppendAction( SCH_ACTIONS::showPcbNew );
189
190 // Insert all the IPC plugins here on the toolbar
191 // TODO (ISM): Move this to individual actions for each script
193
194 break;
195 }
196
197 // clang-format on
198 return config;
199}
200
201
203{
205
206 // IPC/Scripting plugin control
207 // TODO (ISM): Clean this up to make IPC actions just normal tool actions to get rid of this entire
208 // control
209 auto pluginControlFactory =
210 [this]( ACTION_TOOLBAR* aToolbar )
211 {
212 // Add scripting console and API plugins
213 bool scriptingAvailable = SCRIPTING::IsWxAvailable();
214
215 #ifdef KICAD_IPC_API
216 bool haveApiPlugins = Pgm().GetCommonSettings()->m_Api.enable_server &&
217 !Pgm().GetPluginManager().GetActionsForScope( PluginActionScope() ).empty();
218 #else
219 bool haveApiPlugins = false;
220 #endif
221
222 if( scriptingAvailable || haveApiPlugins )
223 {
224 aToolbar->AddScaledSeparator( aToolbar->GetParent() );
225
226 if( haveApiPlugins )
227 AddApiPluginTools( aToolbar );
228 }
229 };
230
232}
KIFACE_BASE & Kiface()
Global KIFACE_BASE "get" accessor.
static TOOL_ACTION toggleGrid
Definition: actions.h:198
static TOOL_ACTION paste
Definition: actions.h:80
static TOOL_ACTION zoomRedraw
Definition: actions.h:131
static TOOL_ACTION millimetersUnits
Definition: actions.h:206
static TOOL_ACTION zoomOutCenter
Definition: actions.h:135
static TOOL_ACTION showSymbolEditor
Definition: actions.h:255
static TOOL_ACTION showSymbolBrowser
Definition: actions.h:254
static TOOL_ACTION findAndReplace
Definition: actions.h:117
static TOOL_ACTION milsUnits
Definition: actions.h:205
static TOOL_ACTION toggleBoundingBoxes
Definition: actions.h:154
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 toggleCursorStyle
Definition: actions.h:151
static TOOL_ACTION selectionTool
Definition: actions.h:246
static TOOL_ACTION save
Definition: actions.h:58
static TOOL_ACTION zoomFitScreen
Definition: actions.h:141
static TOOL_ACTION redo
Definition: actions.h:76
static TOOL_ACTION deleteTool
Definition: actions.h:86
static TOOL_ACTION zoomTool
Definition: actions.h:145
static TOOL_ACTION showFootprintEditor
Definition: actions.h:257
static TOOL_ACTION print
Definition: actions.h:64
static TOOL_ACTION showProperties
Definition: actions.h:260
static TOOL_ACTION doNew
Definition: actions.h:54
static TOOL_ACTION zoomFitObjects
Definition: actions.h:142
static TOOL_ACTION zoomInCenter
Definition: actions.h:134
static TOOL_ACTION toggleGridOverrides
Definition: actions.h:199
static TOOL_ACTION find
Definition: actions.h:116
static ACTION_TOOLBAR_CONTROL ipcScripting
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.
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()
virtual void AddApiPluginTools(ACTION_TOOLBAR *aToolbar)
Append actions from API plugins to the given toolbar.
virtual COMMON_SETTINGS * GetCommonSettings() const
Definition: pgm_base.cpp:687
static TOOL_ACTION showPcbNew
Definition: sch_actions.h:172
static TOOL_ACTION rotateCCW
Definition: sch_actions.h:119
static TOOL_ACTION placeClassLabel
Definition: sch_actions.h:77
static TOOL_ACTION placeSheetPin
Definition: sch_actions.h:83
static TOOL_ACTION assignFootprints
Definition: sch_actions.h:155
static TOOL_ACTION mirrorV
Definition: sch_actions.h:120
static TOOL_ACTION placeGlobalLabel
Definition: sch_actions.h:78
static TOOL_ACTION editSymbolFields
Definition: sch_actions.h:147
static TOOL_ACTION drawTextBox
Definition: sch_actions.h:91
static TOOL_ACTION toggleAnnotateAuto
Definition: sch_actions.h:269
static TOOL_ACTION syncAllSheetsPins
Definition: sch_actions.h:89
static TOOL_ACTION drawArc
Definition: sch_actions.h:95
static TOOL_ACTION drawSheet
Definition: sch_actions.h:80
static TOOL_ACTION navigateBack
Definition: sch_actions.h:221
static TOOL_ACTION schematicSetup
Definition: sch_actions.h:157
static TOOL_ACTION highlightNetTool
Definition: sch_actions.h:296
static TOOL_ACTION drawRectangle
Definition: sch_actions.h:93
static TOOL_ACTION drawLines
Definition: sch_actions.h:97
static TOOL_ACTION placeHierLabel
Definition: sch_actions.h:79
static TOOL_ACTION placeLabel
Definition: sch_actions.h:76
static TOOL_ACTION drawCircle
Definition: sch_actions.h:94
static TOOL_ACTION placeBusWireEntry
Definition: sch_actions.h:75
static TOOL_ACTION drawBezier
Definition: sch_actions.h:96
static TOOL_ACTION drawWire
Definition: sch_actions.h:70
static TOOL_ACTION lineMode45
Definition: sch_actions.h:265
static TOOL_ACTION rotateCW
Definition: sch_actions.h:118
static TOOL_ACTION generateBOM
Definition: sch_actions.h:175
static TOOL_ACTION showHierarchy
Definition: sch_actions.h:224
static TOOL_ACTION placeJunction
Definition: sch_actions.h:74
static TOOL_ACTION drawRuleArea
Definition: sch_actions.h:101
static TOOL_ACTION placeSymbol
Definition: sch_actions.h:66
static TOOL_ACTION placeImage
Definition: sch_actions.h:98
static TOOL_ACTION navigateForward
Definition: sch_actions.h:220
static TOOL_ACTION mirrorH
Definition: sch_actions.h:121
static TOOL_ACTION showSimulator
Definition: sch_actions.h:280
static TOOL_ACTION drawBus
Definition: sch_actions.h:71
static TOOL_ACTION runERC
Inspection and Editing.
Definition: sch_actions.h:144
static TOOL_ACTION drawTable
Definition: sch_actions.h:92
static TOOL_ACTION lineMode90
Definition: sch_actions.h:264
static TOOL_ACTION placeSchematicText
Definition: sch_actions.h:90
static TOOL_ACTION lineModeFree
Definition: sch_actions.h:263
static TOOL_ACTION annotate
Definition: sch_actions.h:145
static TOOL_ACTION placeNoConnect
Definition: sch_actions.h:73
static TOOL_ACTION toggleHiddenPins
Definition: sch_actions.h:232
static TOOL_ACTION placePower
Definition: sch_actions.h:68
static TOOL_ACTION navigateUp
Definition: sch_actions.h:219
void configureToolbars() override
PLUGIN_ACTION_SCOPE PluginActionScope() const override
std::optional< TOOLBAR_CONFIGURATION > DefaultToolbarConfig(TOOLBAR_LOC aToolbar) override
Get the default tools to show on the specified canvas toolbar.
PGM_BASE & Pgm()
The global program "get" accessor.
Definition: pgm_base.cpp:1071
see class PGM_BASE