KiCad PCB EDA Suite
Loading...
Searching...
No Matches
action_menu.h
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-2017 CERN
5 * Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * @author Tomasz Wlostowski <[email protected]>
8 * @author Maciej Suminski <[email protected]>
9 *
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, you may find one here:
22 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
23 * or you may search the http://www.gnu.org website for the version 2 license,
24 * or you may write to the Free Software Foundation, Inc.,
25 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
26 */
27
28#ifndef __CONTEXT_MENU_H
29#define __CONTEXT_MENU_H
30
31#include <map>
32#include <list>
33#include <functional>
34
35#include <wx/menu.h>
36#include <wx/textentry.h>
37#include <tool/tool_event.h>
38
39class KIFACE_BASE;
41class TOOL_MANAGER;
42
43enum class BITMAPS : unsigned int;
44
48class ACTION_MENU : public wxMenu
49{
50public:
52 ACTION_MENU( bool isContextMenu, TOOL_INTERACTIVE* aTool = nullptr );
53
54 ~ACTION_MENU() override;
55
56 ACTION_MENU( const ACTION_MENU& aMenu ) = delete;
57 ACTION_MENU& operator=( const ACTION_MENU& aMenu ) = delete;
58
65 void SetTitle( const wxString& aTitle ) override;
66
67 // Yes, it hides a non-virtual method in the parent class.
68 wxString GetTitle() const { return m_title; }
69
73 void DisplayTitle( bool aDisplay = true );
74
80 void SetIcon( BITMAPS aIcon );
81
87 wxMenuItem* Add( const wxString& aLabel, int aId, BITMAPS aIcon );
88 wxMenuItem* Add( const wxString& aLabel, const wxString& aToolTip, int aId,
89 BITMAPS aIcon, bool aIsCheckmarkEntry = false );
90
101 wxMenuItem* Add( const TOOL_ACTION& aAction, bool aIsCheckmarkEntry = false,
102 const wxString& aOverrideLabel = wxEmptyString );
103
113 wxMenuItem* Add( ACTION_MENU* aMenu );
114
122 void AddClose( const wxString& aAppname = "" );
123
132 void AddQuitOrClose( KIFACE_BASE* aKiface, wxString aAppname = "" );
133
141 void AddQuit( const wxString& aAppname = "" );
142
148 void Clear();
149
153 bool HasEnabledItems() const;
154
162 inline int GetSelected() const
163 {
164 return m_selected;
165 }
166
170 void UpdateAll();
171
175 virtual void UpdateTitle() {}
176
180 void ClearDirty();
181 void SetDirty();
182
188 void SetTool( TOOL_INTERACTIVE* aTool );
189
193 ACTION_MENU* Clone() const;
194
195 void OnMenuEvent( wxMenuEvent& aEvent );
196 void OnIdle( wxIdleEvent& event );
197
198 virtual bool PassHelpTextToHandler() { return false; }
199
200 static constexpr bool NORMAL = false;
201 static constexpr bool CHECK = true;
202
203protected:
205 virtual ACTION_MENU* create() const;
206
209
216 virtual void update()
217 {
218 }
219
226 virtual OPT_TOOL_EVENT eventHandler( const wxMenuEvent& )
227 {
228 return OPT_TOOL_EVENT();
229 }
230
236 void copyFrom( const ACTION_MENU& aMenu );
237
238protected:
242 wxMenuItem* appendCopy( const wxMenuItem* aSource );
243
245 void setupEvents();
246
248 void updateHotKeys();
249
252 void runEventHandlers( const wxMenuEvent& aMenuEvent, OPT_TOOL_EVENT& aToolEvent );
253
255 void runOnSubmenus( std::function<void(ACTION_MENU*)> aFunction );
256
259
262
263 bool m_dirty; // Menu requires update before display
264
267
269 wxString m_title;
270
273
276
279
281 std::map<int, const TOOL_ACTION*> m_toolActions;
282
284 std::list<ACTION_MENU*> m_submenus;
285
286 friend class TOOL_INTERACTIVE;
287};
288
289#endif
BITMAPS
A list of all bitmap identifiers.
Definition: bitmaps_list.h:33
Defines the structure of a menu based on ACTIONs.
Definition: action_menu.h:49
void updateHotKeys()
Traverse the submenus tree looking for a submenu capable of handling a particular menu event.
ACTION_MENU(const ACTION_MENU &aMenu)=delete
wxPoint m_forcedPosition
Definition: action_menu.h:261
void SetDirty()
TOOL_MANAGER * getToolManager() const
void setupEvents()
Update hot key settings for TOOL_ACTIONs in this menu.
Definition: action_menu.cpp:84
wxString m_title
Optional icon.
Definition: action_menu.h:269
virtual ACTION_MENU * create() const
< Return an instance of this class. It has to be overridden in inheriting classes.
virtual void update()
Update menu state stub.
Definition: action_menu.h:216
void AddQuitOrClose(KIFACE_BASE *aKiface, wxString aAppname="")
Add either a standard Quit or Close item to the menu.
void ClearDirty()
Clear the dirty flag on the menu and all descendants.
bool m_isForcedPosition
Definition: action_menu.h:260
wxMenuItem * appendCopy(const wxMenuItem *aSource)
Append a copy of wxMenuItem.
OPT_TOOL_EVENT findToolAction(int aId)
ACTION_MENU & operator=(const ACTION_MENU &aMenu)=delete
void runEventHandlers(const wxMenuEvent &aMenuEvent, OPT_TOOL_EVENT &aToolEvent)
Run a function on the menu and all its submenus.
std::map< int, const TOOL_ACTION * > m_toolActions
List of submenus.
Definition: action_menu.h:281
bool m_isContextMenu
Menu title.
Definition: action_menu.h:266
virtual OPT_TOOL_EVENT eventHandler(const wxMenuEvent &)
Event handler stub.
Definition: action_menu.h:226
static constexpr bool CHECK
Definition: action_menu.h:201
void OnMenuEvent(wxMenuEvent &aEvent)
void AddClose(const wxString &aAppname="")
Add a standard close item to the menu with the accelerator key CTRL-W.
void DisplayTitle(bool aDisplay=true)
Decide whether a title for a pop up menu should be displayed.
void AddQuit(const wxString &aAppname="")
Add a standard Quit item to the menu.
ACTION_MENU * Clone() const
Create a deep, recursive copy of this ACTION_MENU.
void Clear()
Remove all the entries from the menu (as well as its title).
void UpdateAll()
Run update handlers for the menu and its submenus.
void SetTitle(const wxString &aTitle) override
Set title for the menu.
Definition: action_menu.cpp:92
static constexpr bool NORMAL
Definition: action_menu.h:200
void SetTool(TOOL_INTERACTIVE *aTool)
Set a tool that is the creator of the menu.
void OnIdle(wxIdleEvent &event)
std::list< ACTION_MENU * > m_submenus
Definition: action_menu.h:284
void SetIcon(BITMAPS aIcon)
Assign an icon for the entry.
Definition: action_menu.cpp:78
~ACTION_MENU() override
Definition: action_menu.cpp:61
virtual void UpdateTitle()
Used by some menus to just-in-time translate their titles.
Definition: action_menu.h:175
wxString GetTitle() const
Definition: action_menu.h:68
wxMenuItem * Add(const wxString &aLabel, int aId, BITMAPS aIcon)
Add a wxWidgets-style entry to the menu.
bool m_titleDisplayed
Definition: action_menu.h:265
int GetSelected() const
Return the position of selected item.
Definition: action_menu.h:162
int m_selected
Creator of the menu.
Definition: action_menu.h:275
BITMAPS m_icon
Stores the id number of selected item.
Definition: action_menu.h:272
bool HasEnabledItems() const
Returns true if the menu has any enabled items.
TOOL_INTERACTIVE * m_tool
Associates tool actions with menu item IDs. Non-owning.
Definition: action_menu.h:278
void runOnSubmenus(std::function< void(ACTION_MENU *)> aFunction)
Check if any of submenus contains a TOOL_ACTION with a specific ID.
virtual bool PassHelpTextToHandler()
Definition: action_menu.h:198
void copyFrom(const ACTION_MENU &aMenu)
Copy another menus data to this instance.
A KIFACE implementation.
Definition: kiface_base.h:39
Represent a single user action.
Definition: tool_action.h:269
Master controller class:
Definition: tool_manager.h:62
std::optional< TOOL_EVENT > OPT_TOOL_EVENT
Definition: tool_event.h:629