]> git.saurik.com Git - wxWidgets.git/commitdiff
wxMenu Review, added Carbon Events and full OSX Support
authorStefan Csomor <csomor@advancedconcepts.ch>
Tue, 28 Jan 2003 06:54:36 +0000 (06:54 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Tue, 28 Jan 2003 06:54:36 +0000 (06:54 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18969 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/menu.h
include/wx/mac/menuitem.h
include/wx/mac/uma.h

index 6c39c96fc028f34c26a7c814c2e8af0e4cb3f380..a8e62e4967805660466d2a2df801d83b040f75bf 100644 (file)
 #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();
 
@@ -74,18 +68,6 @@ public:
     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
 
 private:
     // common part of all ctors
@@ -94,19 +76,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;
 
        static short            s_macNextMenuId ;
-#if wxUSE_ACCEL
-    // the accelerators for our menu items
-    wxAcceleratorArray m_accels;
-#endif // wxUSE_ACCEL
 
     DECLARE_DYNAMIC_CLASS(wxMenu)
 };
@@ -167,13 +151,6 @@ public:
 
                // set the invoking window for all menus and submenus
        void SetInvokingWindow( wxFrame* frame ) ;
-#if wxUSE_ACCEL
-    // get the accel table for all the menus
-    const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; }
-
-    // update the accel table (must be called after adding/deletign a menu)
-    void RebuildAccelTable();
-#endif // wxUSE_ACCEL
 
     // if the menubar is modified, the display is not updated automatically,
     // call this function to update it (m_menuBarFrame should be !NULL)
@@ -185,6 +162,7 @@ public:
 protected:
     // common part of all ctors
     void Init();
+    wxWindow        *m_invokingWindow;
 
 #if WXWIN_COMPATIBILITY
     wxEvtHandler *m_eventHandler;
@@ -192,11 +170,6 @@ protected:
 
     wxArrayString m_titles;
 
-#if wxUSE_ACCEL
-    // the accelerator table for all accelerators in all our menus
-    wxAcceleratorTable m_accelTable;
-#endif // wxUSE_ACCEL
-
 private:
   static wxMenuBar*                    s_macInstalledMenuBar ;
 
index 459452596103a0cb24b853fc15d9423457724cf1..92c5f8d5ec7c1b7956baaffc469046583b15284b 100644 (file)
 
 #include "wx/setup.h"
 
-// an exception to the general rule that a normal header doesn't include other
-// headers - only because ownerdrw.h is not always included and I don't want
-// to write #ifdef's everywhere...
-#if wxUSE_OWNER_DRAWN
-#include  "wx/ownerdrw.h"
-#endif
-
 // ----------------------------------------------------------------------------
 // wxMenuItem: an item in the menu, optionally implements owner-drawn behaviour
 // ----------------------------------------------------------------------------
 class WXDLLEXPORT wxMenuItem: public wxMenuItemBase
-#if wxUSE_OWNER_DRAWN
-                            , public wxOwnerDrawn
-#endif
 {
 public:
     // ctor & dtor
@@ -49,32 +39,39 @@ public:
 
     // override base class virtuals
     virtual void SetText(const wxString& strName);
-    virtual wxString GetLabel() const;
-    virtual void SetCheckable(bool checkable);
 
     virtual void Enable(bool bDoEnable = TRUE);
     virtual void Check(bool bDoCheck = TRUE);
-    virtual bool IsChecked() const;
 
-    virtual void SetBitmap(const wxBitmap& bitmap) { m_bitmap = bitmap; }
+    virtual void SetBitmap(const wxBitmap& bitmap) ;
     virtual const wxBitmap& GetBitmap() const { return m_bitmap; }
 
-#if wxUSE_ACCEL
-    virtual wxAcceleratorEntry *GetAccel() const;
-#endif // wxUSE_ACCEL
+       // update the os specific representation
+       void UpdateItemBitmap() ;
+       void UpdateItemText() ;
+       void UpdateItemStatus() ;
 
-    // unfortunately needed to resolve ambiguity between
-    // wxMenuItemBase::IsCheckable() and wxOwnerDrawn::IsCheckable()
-    bool IsCheckable() const { return wxMenuItemBase::IsCheckable(); }
-
-    // the id for a popup menu is really its menu handle (as required by
-    // ::AppendMenu() API), so this function will return either the id or the
-    // menu handle depending on what we're
-    int GetRealId() const;
-
-    static int MacBuildMenuString(unsigned char* outMacItemText, wxInt16 *outMacShortcutChar , wxUint8 *outMacModifiers , const char *inItemName , bool useShortcuts ) ;
+    // mark item as belonging to the given radio group
+    void SetAsRadioGroupStart();
+    void SetRadioGroupStart(int start);
+    void SetRadioGroupEnd(int end);
 
 private:
+    void UncheckRadio() ;
+    
+    // the positions of the first and last items of the radio group this item
+    // belongs to or -1: start is the radio group start and is valid for all
+    // but first radio group items (m_isRadioGroupStart == FALSE), end is valid
+    // only for the first one
+    union
+    {
+        int start;
+        int end;
+    } m_radioGroup;
+
+    // does this item start a radio group?
+    bool m_isRadioGroupStart;
+
     wxBitmap  m_bitmap; // Bitmap for menuitem, if any
     void* m_menu ; // the appropriate menu , may also be a system menu
 
index 9ddcec5636898feaa6c70dd996ad15d7271c9dc9..188853e6c53b92c71137e1f8de1465f0272fc3a0 100644 (file)
@@ -31,14 +31,18 @@ bool UMAGetProcessModeDoesActivateOnFGSwitch() ;
 
 // menu manager
 
-void                   UMASetMenuTitle( MenuRef menu , StringPtr title ) ;
+MenuRef                UMANewMenu( SInt16 id , const wxString& title ) ;
+void                   UMASetMenuTitle( MenuRef menu , const wxString& title ) ;
 UInt32                         UMAMenuEvent( EventRecord *inEvent ) ;
-void                   UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex item ) ;      
-void                   UMADisableMenuItem( MenuRef inMenu , MenuItemIndex item ) ;     
-void                   UMAAppendSubMenuItem( MenuRef menu , StringPtr label , SInt16 submenuid ) ;
-void                   UMAInsertSubMenuItem( MenuRef menu , StringPtr label , MenuItemIndex item , SInt16 submenuid  ) ;
-void                   UMAAppendMenuItem( MenuRef menu , StringPtr label , SInt16 key= 0, UInt8 modifiers = 0 ) ;
-void                   UMAInsertMenuItem( MenuRef menu , StringPtr label , MenuItemIndex item , SInt16 key = 0 , UInt8 modifiers = 0 ) ;
+void                   UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex item , bool enable ) ;        
+
+void                   UMAAppendSubMenuItem( MenuRef menu , const wxString& title , SInt16 submenuid ) ;
+void                   UMAInsertSubMenuItem( MenuRef menu , const wxString& title , MenuItemIndex item , SInt16 submenuid  ) ;
+void                   UMAAppendMenuItem( MenuRef menu , const wxString& title , wxAcceleratorEntry *entry = NULL  ) ;
+void                   UMAInsertMenuItem( MenuRef menu , const wxString& title , MenuItemIndex item , wxAcceleratorEntry *entry = NULL ) ;
+void                   UMASetMenuItemShortcut( MenuRef menu , MenuItemIndex item , wxAcceleratorEntry *entry ) ;
+
+void                   UMASetMenuItemText(  MenuRef menu,  MenuItemIndex item, const wxString& title ) ;
 
 // quickdraw