⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commandmanager.h

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 H
字号:
/**********************************************************************  Audacity: A Digital Audio Editor  CommandManager.h  Brian Gunlogson  Dominic Mazzoni  This class implements a system for organizing all user-callable  commands, by creating and managing a menu bar with a command  associated with each item, and managing other commands callable  by keyboard shortcuts.  Commands are implemented by overriding an abstract functor class.  See Menus.cpp for an example use.  Menus or submenus containing lists of items can be added at once,  with a single function (functor) to be called when any of the  items is selected, with the index number of the selection as the  parameter.  This is useful for dynamic menus (effects) and  submenus containing a list of choices (selection formats).  Menu items can be enabled or disabled individually, groups of  "multi-items" can be enabled or disabled all at once, or entire  sets of commands can be enabled or disabled all at once using  flags.  The flags should be a bitfield stored in a 32-bit  integer but can be whatever you want.  You specify both the  desired values of the flags, and the set of flags relevant to  a particular command, by using a combination of a flags parameter  and a mask parameter.  Any flag set to 0 in the mask parameter is  the same as "don't care".  Any command whose mask is set to zero  will not be affected by enabling/disabling by flags.**********************************************************************/#ifndef __AUDACITY_COMMAND_MANAGER__#define __AUDACITY_COMMAND_MANAGER__#include <wx/string.h>#include <wx/dynarray.h>#include <wx/menu.h>#include <wx/hashmap.h>#include "../xml/XMLTagHandler.h"class CommandFunctor{public:   CommandFunctor(){};   virtual ~CommandFunctor(){};   virtual void operator()(int index = 0) = 0;};struct MenuBarListEntry{   wxString name;   wxMenuBar *menubar;};struct SubMenuListEntry{   wxString name;   wxMenu *menu;};struct CommandListEntry{   int id;   wxString name;   wxString key;   wxString defaultKey;   wxString label;   wxMenu *menu;   CommandFunctor *callback;   bool multi;   int index;   int count;   bool enabled;   wxUint32 flags;   wxUint32 mask;};WX_DEFINE_ARRAY(MenuBarListEntry *, MenuBarList);WX_DEFINE_ARRAY(SubMenuListEntry *, SubMenuList);WX_DEFINE_ARRAY(CommandListEntry *, CommandList);WX_DECLARE_STRING_HASH_MAP(CommandListEntry *, CommandNameHash);WX_DECLARE_HASH_MAP(int, CommandListEntry *, wxIntegerHash, wxIntegerEqual, CommandIDHash);class CommandManager: public XMLTagHandler{ public:   //   // Constructor / Destructor   //   CommandManager();   virtual ~CommandManager();   void PurgeData();   //   // Creating menus and adding commands   //   wxMenuBar *AddMenuBar(wxString sMenu);   void BeginMenu(wxString tName);   void EndMenu();   wxMenu* BeginSubMenu(wxString tName);   void EndSubMenu();   void AddItem(wxString name, wxString label, CommandFunctor *callback);   void AddItemList(wxString name, wxArrayString labels,                    CommandFunctor *callback, bool plugins = false);   void AddSeparator();   // A command doesn't actually appear in a menu but might have a   // keyboard shortcut.   void AddCommand(wxString name, wxString label, CommandFunctor *callback);   //   // Command masks   //   // For new items/commands   void SetDefaultFlags(wxUint32 flags, wxUint32 mask);   void SetCommandFlags(wxString name, wxUint32 flags, wxUint32 mask);   void SetCommandFlags(const wxChar **names,                        wxUint32 flags, wxUint32 mask);   // Pass multiple command names as const wxChar *, terminated by NULL   void SetCommandFlags(wxUint32 flags, wxUint32 mask, ...);   //   // Modifying menus   //   void EnableUsingFlags(wxUint32 flags, wxUint32 mask);   void Enable(wxString name, bool enabled);   void Modify(wxString name, wxString newLabel);   //   // Executing commands   //   bool HandleCommandEntry(CommandListEntry * entry, wxUint32 flags, wxUint32 mask);   bool HandleMenuID(int id, wxUint32 flags, wxUint32 mask);   bool HandleKey(wxKeyEvent &evt, wxUint32 flags, wxUint32 mask);   bool HandleTextualCommand(wxString & Str, wxUint32 flags, wxUint32 mask);   //   // Accessing   //   void GetAllCommandNames(wxArrayString &names, bool includeMultis);   wxString GetLabelFromName(wxString name);   wxString GetKeyFromName(wxString name);   wxString GetDefaultKeyFromName(wxString name);   //   // Loading/Saving   //   virtual bool HandleXMLTag(const wxChar *tag, const wxChar **attrs);   virtual void HandleXMLEndTag(const wxChar *tag);   virtual XMLTagHandler *HandleXMLChild(const wxChar *tag);   virtual void WriteXML(int depth, FILE *fp); protected:   wxMenuBar * CurrentMenuBar();   wxMenuBar * GetMenuBar(wxString sMenu);   wxMenu * CurrentSubMenu();   wxMenu * CurrentMenu();   int NextIdentifier(int ID);   int NewIdentifier(wxString name, wxString label, wxMenu *menu,                     CommandFunctor *callback,                     bool multi, int index, int count);   void Enable(CommandListEntry *entry, bool enabled);   wxString GetKey(wxString label);private:   MenuBarList  mMenuBarList;   SubMenuList  mSubMenuList;   CommandList  mCommandList;   CommandNameHash  mCommandNameHash;   CommandNameHash  mCommandKeyHash;   CommandIDHash  mCommandIDHash;   int mCurrentID;   int mHiddenID;   int mXMLKeysRead;   wxMenu * mCurrentMenu;   wxUint32 mDefaultFlags;   wxUint32 mDefaultMask;};#endif// Indentation settings for Vim and Emacs and unique identifier for Arch, a// version control system. Please do not modify past this point.//// Local Variables:// c-basic-offset: 3// indent-tabs-mode: nil// End://// vim: et sts=3 sw=3// arch-tag: 6f086a60-916f-41d6-bd0c-b4d39c6bcde3

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -