1 #ifndef GUI_WIDGETS_WX___COMMAND_REGISTRY__HPP
2 #define GUI_WIDGETS_WX___COMMAND_REGISTRY__HPP
36 #include <unordered_map>
46 #include <wx/menuitem.h>
56 class wxAcceleratorEntry;
57 class wxAcceleratorTable;
92 wxItemKind kind = wxITEM_NORMAL
101 void SetCmdID(
TCmdID cmd_id);
103 void AddAccelerator(
int flags,
int key_code);
105 int GetCmdID()
const;
106 const string& GetMenuLabel()
const;
109 const TAccelerators* GetAccelerators()
const;
111 wxMenuItem* AppendMenuItem( wxMenu& menu )
const;
112 wxMenuItem* AppendMenuItem( wxMenu& menu, wxItemKind kind )
const;
159 int RegisterCommand(
TCmdID cmd_id,
166 wxItemKind kind = wxITEM_NORMAL);
171 const CUICommand* FindCommandByName(
string name )
const;
176 void AddAccelerator(
const wxAcceleratorEntry& entry);
179 void ApplyAccelerators(wxWindow* frame);
184 wxMenuItem* AppendMenuItem( wxMenu& menu,
TCmdID cmd_id )
const;
185 wxMenuItem* AppendMenuItem( wxMenu& menu,
TCmdID cmd_id, wxItemKind kind )
const;
186 void AppendMenuItems(wxMenu& menu,
const TCmdID* cmd_ids,
int count)
const;
187 void AppendMenuItems(wxMenu& menu,
const vector<TCmdID> cmd_ids)
const;
192 void AppendTool(wxToolBar& tool_bar,
TCmdID cmd_id);
193 void AppendTool(wxAuiToolBar& tool_bar,
TCmdID cmd_id);
236 return m_Type == eSubmenu && m_CommandID ==
eCmdNone;
240 return m_Type == eSubmenu && m_CommandID ==
eCmdInvalid;
244 return m_Type == eSubmenu && m_CommandID ==
eCmdMenuEnd;
249 return m_InternalOrExternal == eInternal;
254 return m_InternalOrExternal == eExternal;
259 return m_InternalOrExternal ==
eBoth;
266 #define WX_DEFINE_MENU(name) \
267 const SwxMenuItemRec name[] = { \
270 #define WX_MENU_ITEM(cmd) \
271 { SwxMenuItemRec::eDefaultItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
273 #define WX_MENU_NORMAL_ITEM(cmd) \
274 { SwxMenuItemRec::eNormalItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
276 #define WX_MENU_CHECK_ITEM(cmd) \
277 { SwxMenuItemRec::eCheckItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
279 #define WX_MENU_RADIO_ITEM(cmd) \
280 { SwxMenuItemRec::eRadioItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
282 #define WX_MENU_SEPARATOR() \
283 { SwxMenuItemRec::eSeparator, "", eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
285 #define WX_MENU_SEPARATOR_L(label) \
286 { SwxMenuItemRec::eSeparator, label, eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
288 #define WX_SUBMENU(label) \
289 { SwxMenuItemRec::eSubmenu, label, eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
291 #define WX_END_SUBMENU() \
292 { SwxMenuItemRec::eSubmenu, "", eCmdInvalid, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth },
294 #define WX_END_MENU() \
295 { SwxMenuItemRec::eSubmenu, "", eCmdMenuEnd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eBoth }, \
299 #define WX_SUBMENU_INT(label) \
300 { SwxMenuItemRec::eSubmenu, label, eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eInternal },
302 #define WX_MENU_ITEM_INT(cmd) \
303 { SwxMenuItemRec::eDefaultItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eInternal },
305 #define WX_MENU_NORMAL_ITEM_INT(cmd) \
306 { SwxMenuItemRec::eNormalItem, "", cmd, SwxMenuItemRec::eDefaultItem. SwxMenuItemRec::eInternal },
308 #define WX_MENU_CHECK_ITEM_INT(cmd) \
309 { SwxMenuItemRec::eCheckItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eInternal },
311 #define WX_MENU_RADIO_ITEM_INT(cmd) \
312 { SwxMenuItemRec::eRadioItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eInternal },
314 #define WX_MENU_SEPARATOR_INT() \
315 { SwxMenuItemRec::eSeparator, "", eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eInternal },
317 #define WX_MENU_SEPARATOR_L_INT(label) \
318 { SwxMenuItemRec::eSeparator, label, eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eInternal },
321 #define WX_SUBMENU_EXT(label) \
322 { SwxMenuItemRec::eSubmenu, label, eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eExternal },
324 #define WX_MENU_ITEM_EXT(cmd) \
325 { SwxMenuItemRec::eDefaultItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eExternal },
327 #define WX_MENU_NORMAL_ITEM_EXT(cmd) \
328 { SwxMenuItemRec::eNormalItem, "", cmd, SwxMenuItemRec::eDefaultItem. SwxMenuItemRec::eExternal },
330 #define WX_MENU_CHECK_ITEM_EXT(cmd) \
331 { SwxMenuItemRec::eCheckItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eExternal },
333 #define WX_MENU_RADIO_ITEM_EXT(cmd) \
334 { SwxMenuItemRec::eRadioItem, "", cmd, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eExternal },
336 #define WX_MENU_SEPARATOR_EXT() \
337 { SwxMenuItemRec::eSeparator, "", eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eExternal },
339 #define WX_MENU_SEPARATOR_L_EXT(label) \
340 { SwxMenuItemRec::eSeparator, label, eCmdNone, SwxMenuItemRec::eDefaultItem, SwxMenuItemRec::eExternal },
401 virtual wxAuiToolBar*
CreateToolBar(
const string& name, wxWindow* parent ) = 0;
@ eBoth
Both preliminary and traceback stages.
CUICommandRegistry is a centralized registry where all application commands should be registered.
static CUICommandRegistry & GetInstance()
the main instance associated with the application
wxMenu * CreateMenu(const SwxMenuItemRec *items)
create a menu from a static definition (see WX_*_MENU macros)
std::unordered_map< int, CUICommand * > TIDToCommand
CUICommandRegistry & operator=(const CUICommandRegistry &)
TIDToCommand m_IDToCommand
static CUICommandRegistry sm_TheRegistry
CUICommandRegistry.
vector< wxAcceleratorEntry > m_AccelEntries
CUICommandRegistry(const CUICommandRegistry &)
unique_ptr< TAccelerators > m_Accelerators
const string & GetName() const
vector< wxAcceleratorEntry > TAccelerators
a collection of wxWidget-style accelerator definitions
CUICommand(const SwxCommandRec *rec)
CUIObject - default mix-in implementation of IUIObject.
IUICommandContributor - contributes commands to the common command space.
virtual wxEvtHandler * GetEventHandler()
returns a handler which processes commands from the set above not needed for views
virtual ~IUICommandContributor()
virtual vector< CUICommand * > GetCommands()=0
returns a vector of commands (takes ownership over CUICommand pointers)
GUI command routing and handling framework.
Include a standard set of the NCBI C++ Toolkit most basic headers.
Workaround for wxWidgets header errors in certain configurations; MUST be included (at least indirect...
static const struct name_t names[]
virtual const string & GetLabel() const
@ eCmdInvalid
marks menu end in array initializers
@ eCmdNone
not a valid command
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define NCBI_GUIWIDGETS_WX_EXPORT
static const char label[]
Defines to provide correct exporting from DLLs in Windows.
wxMenu * CreateMenu(const CMenuItem *item)
Creates a wxMenu object replicating the structure of CMenuItem.