From: Stefan Csomor Date: Tue, 28 Jan 2003 06:54:36 +0000 (+0000) Subject: wxMenu Review, added Carbon Events and full OSX Support X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f3fb0a0719e73206384a75f01bf5f50a7188078a wxMenu Review, added Carbon Events and full OSX Support git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18969 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/mac/menu.h b/include/wx/mac/menu.h index 6c39c96fc0..a8e62e4967 100644 --- a/include/wx/mac/menu.h +++ b/include/wx/mac/menu.h @@ -16,13 +16,6 @@ #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 ; diff --git a/include/wx/mac/menuitem.h b/include/wx/mac/menuitem.h index 4594525961..92c5f8d5ec 100644 --- a/include/wx/mac/menuitem.h +++ b/include/wx/mac/menuitem.h @@ -22,20 +22,10 @@ #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 diff --git a/include/wx/mac/uma.h b/include/wx/mac/uma.h index 9ddcec5636..188853e6c5 100644 --- a/include/wx/mac/uma.h +++ b/include/wx/mac/uma.h @@ -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