1/////////////////////////////////////////////////////////////////////////////// 2// Name: wx/cocoa/menuitem.h 3// Purpose: wxMenuItem class 4// Author: David Elliott 5// Modified by: 6// Created: 2002/12/13 7// RCS-ID: $Id: 8// Copyright: (c) 2002 David Elliott 9// Licence: wxWindows licence 10/////////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_COCOA_MENUITEM_H_ 13#define _WX_COCOA_MENUITEM_H_ 14 15#include "wx/hashmap.h" 16#include "wx/bitmap.h" 17 18#include "wx/cocoa/ObjcRef.h" 19 20// ======================================================================== 21// wxMenuItem 22// ======================================================================== 23 24#define wxMenuItemCocoa wxMenuItem 25class wxMenuItemCocoa; 26WX_DECLARE_HASH_MAP(WX_NSMenuItem,wxMenuItem*,wxPointerHash,wxPointerEqual,wxMenuItemCocoaHash); 27 28class WXDLLEXPORT wxMenuItemCocoa : public wxMenuItemBase 29{ 30public: 31// ------------------------------------------------------------------------ 32// initialization 33// ------------------------------------------------------------------------ 34 wxMenuItemCocoa(wxMenu *parentMenu = (wxMenu *)NULL, 35 int id = wxID_SEPARATOR, 36 const wxString& name = wxEmptyString, 37 const wxString& help = wxEmptyString, 38 wxItemKind kind = wxITEM_NORMAL, 39 wxMenu *subMenu = (wxMenu *)NULL); 40 virtual ~wxMenuItemCocoa(); 41 42// ------------------------------------------------------------------------ 43// Cocoa specifics 44// ------------------------------------------------------------------------ 45public: 46 inline WX_NSMenuItem GetNSMenuItem() { return m_cocoaNSMenuItem; } 47 static inline wxMenuItem* GetFromCocoa(WX_NSMenuItem cocoaNSMenuItem) 48 { 49 wxMenuItemCocoaHash::iterator iter=sm_cocoaHash.find(cocoaNSMenuItem); 50 if(iter!=sm_cocoaHash.end()) 51 return iter->second; 52 return NULL; 53 } 54 void CocoaItemSelected(); 55 bool Cocoa_validateMenuItem(); 56protected: 57 void CocoaSetKeyEquivalent(); 58 WX_NSMenuItem m_cocoaNSMenuItem; 59 static wxMenuItemCocoaHash sm_cocoaHash; 60 static wxObjcAutoRefFromAlloc<struct objc_object *> sm_cocoaTarget; 61// ------------------------------------------------------------------------ 62// Implementation 63// ------------------------------------------------------------------------ 64public: 65 // override base class virtuals to update the item appearance on screen 66 virtual void SetText(const wxString& text); 67 virtual void SetCheckable(bool checkable); 68 69 virtual void Enable(bool enable = TRUE); 70 virtual void Check(bool check = TRUE); 71 72 // we add some extra functions which are also available under MSW from 73 // wxOwnerDrawn class - they will be moved to wxMenuItemBase later 74 // hopefully 75 void SetBitmaps(const wxBitmap& bmpChecked, 76 const wxBitmap& bmpUnchecked = wxNullBitmap); 77 void SetBitmap(const wxBitmap& bmp) { SetBitmaps(bmp); } 78 const wxBitmap& GetBitmap(bool checked = TRUE) const 79 { return checked ? m_bmpChecked : m_bmpUnchecked; } 80 81protected: 82 // notify the menu about the change in this item 83 inline void NotifyMenu(); 84 85 // set the accel index and string from text 86 void UpdateAccelInfo(); 87 88 // the bitmaps (may be invalid, then they're not used) 89 wxBitmap m_bmpChecked, 90 m_bmpUnchecked; 91 92 // the accel string (i.e. "Ctrl-Q" or "Alt-F1") 93 wxString m_strAccel; 94 95private: 96 DECLARE_DYNAMIC_CLASS(wxMenuItem) 97 98public: 99 100#if wxABI_VERSION >= 20805 101 // return the item label including any mnemonics and accelerators. 102 // This used to be called GetText. 103 wxString GetItemLabel() const { return GetText(); } 104#endif 105}; 106 107#endif // _WX_COCOA_MENUITEM_H_ 108 109