X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..32b8ec418aee4e38877d4cb79e2984c766dcc358:/include/wx/menu.h?ds=sidebyside diff --git a/include/wx/menu.h b/include/wx/menu.h index ca2e84ba20..ee33335e21 100644 --- a/include/wx/menu.h +++ b/include/wx/menu.h @@ -16,6 +16,8 @@ #pragma interface "menubase.h" #endif +#if wxUSE_MENUS + // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -28,6 +30,7 @@ #include "wx/menuitem.h" class WXDLLEXPORT wxMenu; +class WXDLLEXPORT wxMenuBarBase; class WXDLLEXPORT wxMenuBar; class WXDLLEXPORT wxMenuItem; @@ -181,7 +184,7 @@ public: wxMenuItemList& GetMenuItems() { return m_items; } // search - virtual int FindItem(const wxString& itemString) const; + virtual int FindItem(const wxString& item) const; wxMenuItem* FindItem(int id, wxMenu **menu = NULL) const; // get/set items attributes @@ -227,6 +230,14 @@ public: // menu or associated window will be used. void UpdateUI(wxEvtHandler* source = (wxEvtHandler*)NULL); + // get the menu bar this menu is attached to (may be NULL, always NULL for + // popup menus) + wxMenuBar *GetMenuBar() const { return m_menuBar; } + + // called when the menu is attached/detached to/from a menu bar + virtual void Attach(wxMenuBarBase *menubar); + virtual void Detach(); + // is the menu attached to a menu bar (or is it a popup one)? bool IsAttached() const { return m_menuBar != NULL; } @@ -258,6 +269,12 @@ public: // pos != NULL wxMenuItem *FindChildItem(int id, size_t *pos = NULL) const; + // called to generate a wxCommandEvent, return TRUE if it was processed, + // FALSE otherwise + // + // the checked parameter may have boolean value or -1 for uncheckable items + bool SendEvent(int id, int checked = -1); + protected: // virtuals to override in derived classes // --------------------------------------- @@ -275,7 +292,9 @@ protected: // common part of all ctors void Init(long style); -protected: + // associate the submenu with this menu + void AddSubMenu(wxMenu *submenu); + wxMenuBar *m_menuBar; // menubar we belong to or NULL wxMenu *m_menuParent; // parent menu or NULL @@ -333,6 +352,9 @@ public: // enable or disable a submenu virtual void EnableTop(size_t pos, bool enable) = 0; + // is the menu enabled? + virtual bool IsEnabledTop(size_t pos) const { return TRUE; } + // get or change the label of the menu at given position virtual void SetLabelTop(size_t pos, const wxString& label) = 0; virtual wxString GetLabelTop(size_t pos) const = 0; @@ -342,13 +364,12 @@ public: // by menu and item names, returns wxNOT_FOUND if not found or id of the // found item - virtual int FindMenuItem(const wxString& menuString, - const wxString& itemString) const = 0; + virtual int FindMenuItem(const wxString& menu, const wxString& item) const; // find item by id (in any menu), returns NULL if not found // // if menu is !NULL, it will be filled with wxMenu this item belongs to - virtual wxMenuItem* FindItem(int id, wxMenu **menu = NULL) const = 0; + virtual wxMenuItem* FindItem(int id, wxMenu **menu = NULL) const; // find menu by its caption, return wxNOT_FOUND on failure int FindMenu(const wxString& title) const; @@ -373,11 +394,28 @@ public: void SetHelpString(int id, const wxString& helpString); wxString GetHelpString(int id) const; + // implementation helpers + + // get the frame we are attached to (may return NULL) + wxFrame *GetFrame() const { return m_menuBarFrame; } + + // returns TRUE if we're attached to a frame + bool IsAttached() const { return GetFrame() != NULL; } + + // associate the menubar with the frame + virtual void Attach(wxFrame *frame); + + // called before deleting the menubar normally + virtual void Detach(); + // need to override these ones to avoid virtual function hiding virtual bool Enable(bool enable = TRUE) { return wxWindow::Enable(enable); } virtual void SetLabel(const wxString& s) { wxWindow::SetLabel(s); } virtual wxString GetLabel() const { return wxWindow::GetLabel(); } + // don't want menu bars to accept the focus by tabbing to them + virtual bool AcceptsFocusFromKeyboard() const { return FALSE; } + // compatibility only: these functions are deprecated, use the new ones // instead #if WXWIN_COMPATIBILITY @@ -393,6 +431,9 @@ public: protected: // the list of all our menus wxMenuList m_menus; + + // the frame we are attached to (may be NULL) + wxFrame *m_menuBarFrame; }; // ---------------------------------------------------------------------------- @@ -402,7 +443,9 @@ protected: #ifdef wxUSE_BASE_CLASSES_ONLY #define wxMenuItem wxMenuItemBase #else // !wxUSE_BASE_CLASSES_ONLY -#if defined(__WXMSW__) +#if defined(__WXUNIVERSAL__) + #include "wx/univ/menu.h" +#elif defined(__WXMSW__) #include "wx/msw/menu.h" #elif defined(__WXMOTIF__) #include "wx/motif/menu.h" @@ -419,5 +462,7 @@ protected: #endif #endif // wxUSE_BASE_CLASSES_ONLY/!wxUSE_BASE_CLASSES_ONLY +#endif // wxUSE_MENUS + #endif // _WX_MENU_H_BASE_