]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/mac/menu.h
Add GetDrawable convenience function that returns m_bitmap
[wxWidgets.git] / include / wx / mac / menu.h
index 39b0f0a918806ac0bbbf89e2332d6bb03bfa0bba..e71cf268098e79223a47b7f2827359cb030d2190 100644 (file)
@@ -1,28 +1,21 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        menu.h
 // Purpose:     wxMenu, wxMenuBar classes
 /////////////////////////////////////////////////////////////////////////////
 // Name:        menu.h
 // Purpose:     wxMenu, wxMenuBar classes
-// Author:      AUTHOR
+// Author:      Stefan Csomor
 // Modified by:
 // Modified by:
-// Created:     ??/??/98
+// Created:     1998-01-01
 // RCS-ID:      $Id$
 // RCS-ID:      $Id$
-// Copyright:   (c) AUTHOR
-// Licence:    wxWindows licence
+// Copyright:   (c) Stefan Csomor
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_MENU_H_
 #define _WX_MENU_H_
 
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_MENU_H_
 #define _WX_MENU_H_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
 #pragma interface "menu.h"
 #endif
 
 #pragma interface "menu.h"
 #endif
 
-#if wxUSE_ACCEL
-    #include "wx/accel.h"
-    #include "wx/dynarray.h"
-
-    WX_DEFINE_EXPORTED_ARRAY(wxAcceleratorEntry *, wxAcceleratorArray);
-#endif // wxUSE_ACCEL
-
 class WXDLLEXPORT wxFrame;
 
 // ----------------------------------------------------------------------------
 class WXDLLEXPORT wxFrame;
 
 // ----------------------------------------------------------------------------
@@ -44,6 +37,7 @@ public:
     virtual bool DoAppend(wxMenuItem *item);
     virtual bool DoInsert(size_t pos, wxMenuItem *item);
     virtual wxMenuItem *DoRemove(wxMenuItem *item);
     virtual bool DoAppend(wxMenuItem *item);
     virtual bool DoInsert(size_t pos, wxMenuItem *item);
     virtual wxMenuItem *DoRemove(wxMenuItem *item);
+    virtual void Attach(wxMenuBarBase *menubar) ;
 
     virtual void Break();
 
 
     virtual void Break();
 
@@ -63,10 +57,15 @@ public:
     // implementation only from now on
     // -------------------------------
 
     // implementation only from now on
     // -------------------------------
 
-       bool MacMenuSelect(wxEvtHandler* handler, long when , int macMenuId, int macMenuItemNum) ;
-       int     MacGetIndexFromId( int id ) ; 
-       int     MacGetIndexFromItem( wxMenuItem *pItem ) ; 
-       void MacEnableMenu( bool bDoEnable ) ;
+      int    MacGetIndexFromId( int id ) ; 
+      int    MacGetIndexFromItem( wxMenuItem *pItem ) ;
+      void MacEnableMenu( bool bDoEnable ) ;
+      // MacOS needs to know about submenus somewhere within this menu
+      // before it can be displayed , also hide special menu items like preferences
+      // that are handled by the OS
+      void  MacBeforeDisplay( bool isSubMenu ) ;
+      // undo all changes from the MacBeforeDisplay call
+      void  MacAfterDisplay( bool isSubMenu ) ;
 
     // semi-private accessors
         // get the window which contains this menu
 
     // semi-private accessors
         // get the window which contains this menu
@@ -74,19 +73,7 @@ public:
         // get the menu handle
     WXHMENU GetHMenu() const { return m_hMenu; }
 
         // get the menu handle
     WXHMENU GetHMenu() const { return m_hMenu; }
 
-       short MacGetMenuId() { return m_macMenuId ; }
-#if wxUSE_ACCEL
-    // called by wxMenuBar to build its accel table from the accels of all menus
-    bool HasAccels() const { return !m_accels.IsEmpty(); }
-    size_t GetAccelCount() const { return m_accels.GetCount(); }
-    size_t CopyAccels(wxAcceleratorEntry *accels) const;
-
-    // called by wxMenuItem when its accels changes
-    void UpdateAccel(wxMenuItem *item);
-
-    // helper used by wxMenu itself (returns the index in m_accels)
-    int FindAccel(int id) const;
-#endif // wxUSE_ACCEL
+    short MacGetMenuId() { return m_macMenuId ; }
 
 private:
     // common part of all ctors
 
 private:
     // common part of all ctors
@@ -95,19 +82,21 @@ private:
     // common part of Append/Insert (behaves as Append is pos == (size_t)-1)
     bool DoInsertOrAppend(wxMenuItem *item, size_t pos = (size_t)-1);
 
     // common part of Append/Insert (behaves as Append is pos == (size_t)-1)
     bool DoInsertOrAppend(wxMenuItem *item, size_t pos = (size_t)-1);
 
+    // terminate the current radio group, if any
+    void EndRadioGroup();
+
     // if TRUE, insert a breal before appending the next item
     bool m_doBreak;
 
     // if TRUE, insert a breal before appending the next item
     bool m_doBreak;
 
+    // the position of the first item in the current radio group or -1
+    int m_startRadioGroup;
+
     // the menu handle of this menu
     WXHMENU m_hMenu;
 
     // the menu handle of this menu
     WXHMENU m_hMenu;
 
-       short                           m_macMenuId;
+      short                m_macMenuId;
 
 
-       static short            s_macNextMenuId ;
-#if wxUSE_ACCEL
-    // the accelerators for our menu items
-    wxAcceleratorArray m_accels;
-#endif // wxUSE_ACCEL
+      static short        s_macNextMenuId ;
 
     DECLARE_DYNAMIC_CLASS(wxMenu)
 };
 
     DECLARE_DYNAMIC_CLASS(wxMenu)
 };
@@ -163,25 +152,23 @@ public:
         // attach to a frame
     void Attach(wxFrame *frame);
 
         // attach to a frame
     void Attach(wxFrame *frame);
 
-#if wxUSE_ACCEL
-    // get the accel table for all the menus
-    const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; }
+        // clear the invoking window for all menus and submenus
+    void UnsetInvokingWindow() ;
 
 
-    // update the accel table (must be called after adding/deletign a menu)
-    void RebuildAccelTable();
-#endif // wxUSE_ACCEL
+        // set the invoking window for all menus and submenus
+    void SetInvokingWindow( wxFrame* frame ) ;
 
     // if the menubar is modified, the display is not updated automatically,
     // call this function to update it (m_menuBarFrame should be !NULL)
 
     // if the menubar is modified, the display is not updated automatically,
     // call this function to update it (m_menuBarFrame should be !NULL)
-    void Refresh();
+    void Refresh(bool eraseBackground = TRUE, const wxRect *rect = (const wxRect *) NULL);
 
   void MacInstallMenuBar() ;
 
   void MacInstallMenuBar() ;
-  void MacMenuSelect(wxEvtHandler* handler, long when , int macMenuId, int macMenuItemNum) ;
   static wxMenuBar* MacGetInstalledMenuBar() { return s_macInstalledMenuBar ; }
 
 protected:
     // common part of all ctors
     void Init();
   static wxMenuBar* MacGetInstalledMenuBar() { return s_macInstalledMenuBar ; }
 
 protected:
     // common part of all ctors
     void Init();
+    wxWindow        *m_invokingWindow;
 
 #if WXWIN_COMPATIBILITY
     wxEvtHandler *m_eventHandler;
 
 #if WXWIN_COMPATIBILITY
     wxEvtHandler *m_eventHandler;
@@ -189,13 +176,8 @@ protected:
 
     wxArrayString m_titles;
 
 
     wxArrayString m_titles;
 
-#if wxUSE_ACCEL
-    // the accelerator table for all accelerators in all our menus
-    wxAcceleratorTable m_accelTable;
-#endif // wxUSE_ACCEL
-
 private:
 private:
-  static wxMenuBar*                    s_macInstalledMenuBar ;
+  static wxMenuBar*            s_macInstalledMenuBar ;
 
     DECLARE_DYNAMIC_CLASS(wxMenuBar)
 };
 
     DECLARE_DYNAMIC_CLASS(wxMenuBar)
 };