]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/menu.h
applied wxNativeFontInfo patch #103089
[wxWidgets.git] / include / wx / menu.h
index 8b9bccd5b80f169f7678f58fc0e6f5b8f8238c16..ca2e84ba20e79bc375b0a2e8a2223cce4bdb539c 100644 (file)
@@ -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
@@ -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
@@ -177,10 +245,13 @@ public:
     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 // 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
     // -----------