]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/mac/menu.h
moved smart phone test to chkconf.h from features.h
[wxWidgets.git] / include / wx / mac / menu.h
index 98b840a56fd6e399c03be8b41b72c56be8cf89b4..c401f7f140850e7e0cf7e671b43a406fa8ad9cef 100644 (file)
@@ -1,28 +1,21 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        menu.h
 // Purpose:     wxMenu, wxMenuBar classes
-// Author:      AUTHOR
+// Author:      Stefan Csomor
 // Modified by:
-// Created:     ??/??/98
+// Created:     1998-01-01
 // RCS-ID:      $Id$
-// Copyright:   (c) AUTHOR
-// Licence:    wxWindows licence
+// Copyright:   (c) Stefan Csomor
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #ifndef _WX_MENU_H_
 #define _WX_MENU_H_
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(__APPLE__)
 #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;
 
 // ----------------------------------------------------------------------------
@@ -44,6 +37,7 @@ public:
     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();
 
@@ -52,21 +46,18 @@ public:
     // MSW-specific
     bool ProcessCommand(wxCommandEvent& event);
 
-#if WXWIN_COMPATIBILITY
-    wxMenu(const wxString& title, const wxFunction func)
-        : wxMenuBase(title)
-    {
-        Callback(func);
-    }
-#endif // WXWIN_COMPATIBILITY
-
     // 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
@@ -74,22 +65,7 @@ public:
         // get the menu handle
     WXHMENU GetHMenu() const { return m_hMenu; }
 
-    // attach/detach menu to/from wxMenuBar
-    void Attach(wxMenuBar *menubar);
-    void Detach();
-       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
@@ -98,19 +74,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);
 
+    // terminate the current radio group, if any
+    void EndRadioGroup();
+
     // 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;
 
-       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)
 };
@@ -166,25 +144,25 @@ public:
         // 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)
-    void Refresh();
+    void Refresh(bool eraseBackground = TRUE, const wxRect *rect = (const wxRect *) NULL);
 
   void MacInstallMenuBar() ;
-  void MacMenuSelect(wxEvtHandler* handler, long when , int macMenuId, int macMenuItemNum) ;
   static wxMenuBar* MacGetInstalledMenuBar() { return s_macInstalledMenuBar ; }
+  static void MacSetCommonMenuBar(wxMenuBar* menubar) { s_macCommonMenuBar=menubar; }
+  static wxMenuBar* MacGetCommonMenuBar() { return s_macCommonMenuBar; }
 
 protected:
     // common part of all ctors
     void Init();
+    wxWindow        *m_invokingWindow;
 
 #if WXWIN_COMPATIBILITY
     wxEvtHandler *m_eventHandler;
@@ -192,15 +170,9 @@ protected:
 
     wxArrayString m_titles;
 
-    wxFrame      *m_menuBarFrame;
-
-#if wxUSE_ACCEL
-    // the accelerator table for all accelerators in all our menus
-    wxAcceleratorTable m_accelTable;
-#endif // wxUSE_ACCEL
-
 private:
-  static wxMenuBar*                    s_macInstalledMenuBar ;
+  static wxMenuBar*            s_macInstalledMenuBar ;
+  static wxMenuBar*            s_macCommonMenuBar ;
 
     DECLARE_DYNAMIC_CLASS(wxMenuBar)
 };