X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1987af7e9f5685198b0c19e2326eebf7e56b7834..83a136ac4a84bf355622265ae3058546985ccc91:/include/wx/menu.h diff --git a/include/wx/menu.h b/include/wx/menu.h index 599326cb18..ca2e84ba20 100644 --- a/include/wx/menu.h +++ b/include/wx/menu.h @@ -32,8 +32,23 @@ class WXDLLEXPORT wxMenuBar; class WXDLLEXPORT wxMenuItem; // pseudo template list classes -WX_DECLARE_LIST(wxMenu, wxMenuList); -WX_DECLARE_LIST(wxMenuItem, wxMenuItemList); +WX_DECLARE_EXPORTED_LIST(wxMenu, wxMenuList); +WX_DECLARE_EXPORTED_LIST(wxMenuItem, wxMenuItemList); + +// ---------------------------------------------------------------------------- +// conditional compilation +// ---------------------------------------------------------------------------- + +// having callbacks in menus is a wxWin 1.6x feature which should be replaced +// with event tables in wxWin 2.xx code - however provide it because many +// people like it a lot by default +#ifndef wxUSE_MENU_CALLBACK + #if WXWIN_COMPATIBILITY_2 + #define wxUSE_MENU_CALLBACK 1 + #else + #define wxUSE_MENU_CALLBACK 0 + #endif // WXWIN_COMPATIBILITY_2 +#endif // !defined(wxUSE_MENU_CALLBACK) // ---------------------------------------------------------------------------- // wxMenu @@ -57,9 +72,6 @@ public: // menu construction // ----------------- - // append a separator to the menu - void AppendSeparator() { Append(wxID_SEPARATOR, wxEmptyString); } - // append a normal item to the menu void Append(int id, const wxString& text, @@ -69,6 +81,9 @@ public: DoAppend(wxMenuItem::New((wxMenu *)this, id, text, help, isCheckable)); } + // append a separator to the menu + void AppendSeparator() { Append(wxID_SEPARATOR, wxEmptyString); } + // append a submenu void Append(int id, const wxString& text, @@ -87,6 +102,59 @@ public: // insert an item before given position bool Insert(size_t pos, wxMenuItem *item); + void Insert(size_t pos, + int id, + const wxString& text, + const wxString& help = wxEmptyString, + bool isCheckable = FALSE) + { + Insert(pos, wxMenuItem::New((wxMenu *)this, id, text, help, isCheckable)); + } + + // insert a separator + void InsertSeparator(size_t pos) + { + Insert(pos, wxMenuItem::New((wxMenu *)this)); + } + + // insert a submenu + void Insert(size_t pos, + int id, + const wxString& text, + wxMenu *submenu, + const wxString& help = wxEmptyString) + { + Insert(pos, wxMenuItem::New((wxMenu *)this, id, text, help, FALSE, submenu)); + } + + // prepend an item to the menu + void Prepend(wxMenuItem *item) + { + Insert(0u, item); + } + + void Prepend(int id, + const wxString& text, + const wxString& help = wxEmptyString, + bool isCheckable = FALSE) + { + Insert(0u, id, text, help, isCheckable); + } + + // insert a separator + void PrependSeparator() + { + InsertSeparator(0u); + } + + // insert a submenu + void Prepend(int id, + const wxString& text, + wxMenu *submenu, + const wxString& help = wxEmptyString) + { + Insert(0u, id, text, submenu, help); + } // detach an item from the menu, but don't delete it so that it can be // added back later (but if it's not, the caller is responsible for @@ -175,12 +243,15 @@ public: { return FindItem(itemId, itemMenu); } wxList& GetItems() const { return (wxList &)m_items; } +#endif // WXWIN_COMPATIBILITY +#if wxUSE_MENU_CALLBACK // wxWin 1.6x compatible menu event handling wxFunction GetCallback() const { return m_callback; } void Callback(const wxFunction func) { m_callback = func; } + wxFunction m_callback; -#endif // WXWIN_COMPATIBILITY +#endif // wxUSE_MENU_CALLBACK // unlike FindItem(), this function doesn't recurse but only looks through // our direct children and also may return the index of the found child if @@ -279,6 +350,9 @@ public: // if menu is !NULL, it will be filled with wxMenu this item belongs to virtual wxMenuItem* FindItem(int id, wxMenu **menu = NULL) const = 0; + // find menu by its caption, return wxNOT_FOUND on failure + int FindMenu(const wxString& title) const; + // item access // -----------