KiCad PCB EDA Suite
menubar_footprint_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) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5  * Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
6  * Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
7  * Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
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 "footprint_edit_frame.h"
28 #include "pcbnew_id.h"
29 #include <menus_helpers.h>
30 #include <tool/actions.h>
31 #include <tool/action_menu.h>
32 #include <tool/tool_manager.h>
33 #include <tools/pcb_actions.h>
34 #include <board.h>
36 #include <widgets/wx_menubar.h>
37 
38 
40 {
42  // wxWidgets handles the Mac Application menu behind the scenes, but that means
43  // we always have to start from scratch with a new wxMenuBar.
44  wxMenuBar* oldMenuBar = GetMenuBar();
45  WX_MENUBAR* menuBar = new WX_MENUBAR();
46 
47  //-- File menu ----------------------------------------------------------
48  //
49  ACTION_MENU* fileMenu = new ACTION_MENU( false, selTool );
50 
51  fileMenu->Add( ACTIONS::newLibrary );
52  fileMenu->Add( ACTIONS::addLibrary );
53  fileMenu->Add( PCB_ACTIONS::newFootprint );
54 
55 #ifdef KICAD_SCRIPTING
56  fileMenu->Add( PCB_ACTIONS::createFootprint );
57 #endif
58 
59  fileMenu->AppendSeparator();
60 
61  fileMenu->Add( ACTIONS::save );
62  fileMenu->Add( ACTIONS::saveAs );
63  fileMenu->Add( ACTIONS::revert );
64 
65  fileMenu->AppendSeparator();
66 
67  ACTION_MENU* submenuImport = new ACTION_MENU( false );
68  submenuImport->SetTool( selTool );
69  submenuImport->SetTitle( _( "Import" ) );
70  submenuImport->SetIcon( import_xpm );
71 
72  submenuImport->Add( PCB_ACTIONS::importFootprint );
73  submenuImport->Add( _( "&Import Graphics..." ),
74  _( "Import 2D Drawing file to Footprint Editor on Drawings layer" ),
77 
78  fileMenu->Add( submenuImport );
79 
80  ACTION_MENU* submenuExport = new ACTION_MENU( false, selTool );
81  submenuExport->SetTitle( _( "Export" ) );
82  submenuExport->SetIcon( export_xpm );
83 
84  submenuExport->Add( PCB_ACTIONS::exportFootprint );
85  submenuExport->Add( _( "Export View as &PNG..." ),
86  _( "Create a PNG file from the current view" ),
89 
90  fileMenu->Add( submenuExport );
91 
92  fileMenu->AppendSeparator();
93  fileMenu->Add( ACTIONS::print );
94 
95  fileMenu->AppendSeparator();
96  fileMenu->AddClose( _( "Footprint Editor" ) );
97 
98 
99  //-- Edit menu -------------------------------------------------------
100  //
101  ACTION_MENU* editMenu = new ACTION_MENU( false, selTool );
102 
103  editMenu->Add( ACTIONS::undo );
104  editMenu->Add( ACTIONS::redo );
105 
106  editMenu->AppendSeparator();
107  editMenu->Add( ACTIONS::cut );
108  editMenu->Add( ACTIONS::copy );
109  editMenu->Add( ACTIONS::paste );
110  editMenu->Add( ACTIONS::doDelete );
111  editMenu->Add( ACTIONS::duplicate );
112 
113  editMenu->AppendSeparator();
114  editMenu->Add( ACTIONS::selectAll );
115 
116  editMenu->AppendSeparator();
119 
120  editMenu->AppendSeparator();
121  editMenu->Add( PCB_ACTIONS::cleanupGraphics );
122 
123 
124  //-- View menu -------------------------------------------------------
125  //
126  ACTION_MENU* viewMenu = new ACTION_MENU( false, selTool );
127 
128  viewMenu->Add( ACTIONS::showFootprintBrowser );
129  viewMenu->Add( ACTIONS::show3DViewer );
130 
131  viewMenu->AppendSeparator();
132  viewMenu->Add( ACTIONS::zoomInCenter );
133  viewMenu->Add( ACTIONS::zoomOutCenter );
134  viewMenu->Add( ACTIONS::zoomFitScreen );
135  viewMenu->Add( ACTIONS::zoomTool );
136  viewMenu->Add( ACTIONS::zoomRedraw );
137 
138  viewMenu->AppendSeparator();
140  viewMenu->Add( ACTIONS::gridProperties );
142 
143  // Units submenu
144  ACTION_MENU* unitsSubMenu = new ACTION_MENU( false, selTool );
145  unitsSubMenu->SetTitle( _( "&Units" ) );
146  unitsSubMenu->SetIcon( unit_mm_xpm );
147  unitsSubMenu->Add( ACTIONS::inchesUnits, ACTION_MENU::CHECK );
148  unitsSubMenu->Add( ACTIONS::milsUnits, ACTION_MENU::CHECK );
150  viewMenu->Add( unitsSubMenu );
151 
153 
154  viewMenu->AppendSeparator();
155  // Drawing Mode Submenu
156  ACTION_MENU* drawingModeSubMenu = new ACTION_MENU( false, selTool );
157  drawingModeSubMenu->SetTitle( _( "&Drawing Mode" ) );
158  drawingModeSubMenu->SetIcon( add_zone_xpm );
159 
160  drawingModeSubMenu->Add( PCB_ACTIONS::padDisplayMode, ACTION_MENU::CHECK );
161  drawingModeSubMenu->Add( PCB_ACTIONS::graphicsOutlines, ACTION_MENU::CHECK );
162  drawingModeSubMenu->Add( PCB_ACTIONS::textOutlines, ACTION_MENU::CHECK );
163  viewMenu->Add( drawingModeSubMenu );
164 
165  // Contrast Mode Submenu
166  ACTION_MENU* contrastModeSubMenu = new ACTION_MENU( false, selTool );
167  contrastModeSubMenu->SetTitle( _( "&Contrast Mode" ) );
168  contrastModeSubMenu->SetIcon( contrast_mode_xpm );
169 
170  contrastModeSubMenu->Add( ACTIONS::highContrastMode, ACTION_MENU::CHECK );
171  contrastModeSubMenu->Add( PCB_ACTIONS::layerAlphaDec );
172  contrastModeSubMenu->Add( PCB_ACTIONS::layerAlphaInc );
173  viewMenu->Add( contrastModeSubMenu );
174 
176 
177  viewMenu->AppendSeparator();
179 
180 
181  //-- Place menu -------------------------------------------------------
182  //
183  ACTION_MENU* placeMenu = new ACTION_MENU( false, selTool );
184 
185  placeMenu->Add( PCB_ACTIONS::placePad );
186 
187  placeMenu->AppendSeparator();
188  placeMenu->Add( PCB_ACTIONS::placeText );
189  placeMenu->Add( PCB_ACTIONS::drawLine );
190  placeMenu->Add( PCB_ACTIONS::drawArc );
191  placeMenu->Add( PCB_ACTIONS::drawRectangle );
192  placeMenu->Add( PCB_ACTIONS::drawCircle );
193  placeMenu->Add( PCB_ACTIONS::drawPolygon );
194  placeMenu->Add( PCB_ACTIONS::drawRuleArea );
195 
196  placeMenu->AppendSeparator();
197  placeMenu->Add( PCB_ACTIONS::setAnchor );
198  placeMenu->Add( ACTIONS::gridSetOrigin );
199 
200 
201  //-- Inspect menu ------------------------------------------------------
202  //
203  ACTION_MENU* inspectMenu = new ACTION_MENU( false, selTool );
204 
205  inspectMenu->Add( ACTIONS::measureTool );
206 
207  inspectMenu->AppendSeparator();
208  inspectMenu->Add( PCB_ACTIONS::checkFootprint );
209 
210 
211  //-- Tools menu --------------------------------------------------------
212  //
213  ACTION_MENU* toolsMenu = new ACTION_MENU( false, selTool );
214 
215  toolsMenu->Add( _( "&Load Footprint from PCB..." ),
216  _( "Load a footprint from the current board into the editor" ),
219 
220  toolsMenu->Add( _( "&Insert Footprint on PCB" ),
221  _( "Insert footprint onto current board" ),
224 
225 
226  //-- Preferences menu -------------------------------------------------
227  //
228  ACTION_MENU* prefsMenu = new ACTION_MENU( false, selTool );
229 
230  prefsMenu->Add( ACTIONS::configurePaths );
231  prefsMenu->Add( ACTIONS::showFootprintLibTable );
232  prefsMenu->Add( _( "Preferences..." ) + "\tCtrl+,",
233  _( "Show preferences for all open tools" ),
234  wxID_PREFERENCES,
235  preference_xpm );
236 
237  prefsMenu->AppendSeparator();
238  AddMenuLanguageList( prefsMenu, selTool );
239 
240  //--MenuBar -----------------------------------------------------------
241  //
242  menuBar->Append( fileMenu, _( "&File" ) );
243  menuBar->Append( editMenu, _( "&Edit" ) );
244  menuBar->Append( viewMenu, _( "&View" ) );
245  menuBar->Append( placeMenu, _( "&Place" ) );
246  menuBar->Append( inspectMenu, _( "&Inspect" ) );
247  menuBar->Append( toolsMenu, _( "&Tools" ) );
248  menuBar->Append( prefsMenu, _( "P&references" ) );
249  AddStandardHelpMenu( menuBar );
250 
251  SetMenuBar( menuBar );
252  delete oldMenuBar;
253 }
static TOOL_ACTION drawLine
Definition: pcb_actions.h:146
static TOOL_ACTION show3DViewer
Definition: actions.h:161
wxMenuItem * Add(const wxString &aLabel, int aId, const BITMAP_OPAQUE *aIcon)
Add a wxWidgets-style entry to the menu.
static TOOL_ACTION footprintProperties
Definition: pcb_actions.h:372
static TOOL_ACTION zoomInCenter
Definition: actions.h:96
Defines the structure of a menu based on ACTIONs.
Definition: action_menu.h:45
static TOOL_ACTION doDelete
Definition: actions.h:75
static TOOL_ACTION checkFootprint
Definition: pcb_actions.h:375
static TOOL_ACTION drawArc
Definition: pcb_actions.h:150
static TOOL_ACTION cleanupGraphics
Definition: pcb_actions.h:321
static TOOL_ACTION layerAlphaDec
Definition: pcb_actions.h:290
static TOOL_ACTION zoomTool
Definition: actions.h:102
static TOOL_ACTION layerAlphaInc
Definition: pcb_actions.h:289
static TOOL_ACTION zoomFitScreen
Definition: actions.h:99
static TOOL_ACTION millimetersUnits
Definition: actions.h:149
static TOOL_ACTION drawPolygon
Definition: pcb_actions.h:147
static TOOL_ACTION placePad
Activation of the drawing tool (placing a PAD)
Definition: pcb_actions.h:378
const BITMAP_OPAQUE contrast_mode_xpm[1]
static TOOL_ACTION print
Definition: actions.h:60
Wrapper around a wxMenuBar object that prevents the accelerator table from being used.
Definition: wx_menubar.h:45
static TOOL_ACTION setAnchor
Definition: pcb_actions.h:164
static TOOL_ACTION placeText
Definition: pcb_actions.h:151
static TOOL_ACTION zoomOutCenter
Definition: actions.h:97
static TOOL_ACTION createFootprint
Definition: pcb_actions.h:357
void SetTool(TOOL_INTERACTIVE *aTool)
Set a tool that is the creator of the menu.
static TOOL_ACTION measureTool
Definition: actions.h:157
void ReCreateMenuBar() override
(Re)Create the menubar for the Footprint Editor frame
static TOOL_ACTION copy
Definition: actions.h:70
const BITMAP_OPAQUE load_module_board_xpm[1]
static TOOL_ACTION toggleFootprintTree
Definition: pcb_actions.h:350
static TOOL_ACTION showFootprintLibTable
Definition: actions.h:177
static TOOL_ACTION toggleGrid
Definition: actions.h:143
static TOOL_ACTION exportFootprint
Definition: pcb_actions.h:370
static TOOL_ACTION showFootprintBrowser
Definition: actions.h:164
static TOOL_ACTION inchesUnits
Definition: actions.h:147
static TOOL_ACTION save
Definition: actions.h:54
void SetIcon(const BITMAP_OPAQUE *aIcon)
Assign an icon for the entry.
Definition: action_menu.cpp:71
void AddStandardHelpMenu(wxMenuBar *aMenuBar)
Adds the standard KiCad help menu to the menubar.
const BITMAP_OPAQUE export_xpm[1]
Definition: export.cpp:40
const BITMAP_OPAQUE import_xpm[1]
Definition: import.cpp:42
static TOOL_ACTION togglePolarCoords
Definition: actions.h:152
static TOOL_ACTION cut
Definition: actions.h:69
static TOOL_ACTION drawRectangle
Definition: pcb_actions.h:148
static TOOL_ACTION addLibrary
Definition: actions.h:52
const BITMAP_OPAQUE insert_module_board_xpm[1]
void AddMenuLanguageList(ACTION_MENU *aMasterMenu, TOOL_INTERACTIVE *aControlTool)
Function AddMenuLanguageList creates a menu list for language choice, and add it as submenu to Master...
static TOOL_ACTION newLibrary
Definition: actions.h:51
static TOOL_ACTION milsUnits
Definition: actions.h:148
static TOOL_ACTION importFootprint
Definition: pcb_actions.h:369
const BITMAP_OPAQUE unit_mm_xpm[1]
Definition: unit_mm.cpp:32
static TOOL_ACTION padDisplayMode
Definition: pcb_actions.h:245
static TOOL_ACTION drawCircle
Definition: pcb_actions.h:149
static TOOL_ACTION graphicsOutlines
Display footprint graphics as outlines.
Definition: pcb_actions.h:390
static TOOL_ACTION redo
Definition: actions.h:68
static TOOL_ACTION defaultPadProperties
Definition: pcb_actions.h:373
static constexpr bool CHECK
Definition: action_menu.h:175
TOOL_MANAGER * m_toolManager
Definition: tools_holder.h:157
static TOOL_ACTION drawRuleArea
Definition: pcb_actions.h:158
void SetTitle(const wxString &aTitle) override
Set title for the menu.
Definition: action_menu.cpp:89
static TOOL_ACTION saveAs
Definition: actions.h:55
const BITMAP_OPAQUE import_vector_xpm[1]
#define _(s)
Definition: 3d_actions.cpp:33
static TOOL_ACTION zoomRedraw
Definition: actions.h:93
The selection tool: currently supports:
static TOOL_ACTION gridProperties
Definition: actions.h:144
const BITMAP_OPAQUE add_zone_xpm[1]
Definition: add_zone.cpp:25
static TOOL_ACTION undo
Definition: actions.h:67
const BITMAP_OPAQUE export_png_xpm[1]
Definition: export_png.cpp:63
static TOOL_ACTION toggleCursorStyle
Definition: actions.h:105
static TOOL_ACTION flipBoard
Definition: pcb_actions.h:295
static TOOL_ACTION gridSetOrigin
Definition: actions.h:140
const BITMAP_OPAQUE preference_xpm[1]
Definition: preference.cpp:48
static TOOL_ACTION configurePaths
Definition: actions.h:175
static TOOL_ACTION highContrastMode
Definition: actions.h:106
static TOOL_ACTION selectAll
Definition: actions.h:73
static TOOL_ACTION paste
Definition: actions.h:71
static TOOL_ACTION duplicate
Definition: actions.h:74
static TOOL_ACTION revert
Definition: actions.h:58
static TOOL_ACTION newFootprint
Definition: pcb_actions.h:354
void AddClose(wxString aAppname="")
Add a standard close item to the menu with the accelerator key CTRL-W.
static TOOL_ACTION textOutlines
Display texts as lines.
Definition: pcb_actions.h:393