1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxMenu, wxMenuBar classes 
   8 // Copyright:   (c) AUTHOR 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  16 #pragma interface "menu.h" 
  21     #include "wx/dynarray.h" 
  23     WX_DEFINE_EXPORTED_ARRAY(wxAcceleratorEntry 
*, wxAcceleratorArray
); 
  26 class WXDLLEXPORT wxFrame
; 
  28 // ---------------------------------------------------------------------------- 
  30 // ---------------------------------------------------------------------------- 
  32 class WXDLLEXPORT wxMenu 
: public wxMenuBase
 
  36     wxMenu(const wxString
& title
, long style 
= 0) 
  37         : wxMenuBase(title
, style
) { Init(); } 
  39     wxMenu(long style 
= 0) : wxMenuBase(style
) { Init(); } 
  43     // implement base class virtuals 
  44     virtual bool DoAppend(wxMenuItem 
*item
); 
  45     virtual bool DoInsert(size_t pos
, wxMenuItem 
*item
); 
  46     virtual wxMenuItem 
*DoRemove(wxMenuItem 
*item
); 
  50     virtual void SetTitle(const wxString
& title
); 
  53     bool ProcessCommand(wxCommandEvent
& event
); 
  55 #if WXWIN_COMPATIBILITY 
  56     wxMenu(const wxString
& title
, const wxFunction func
) 
  61 #endif // WXWIN_COMPATIBILITY 
  63     // implementation only from now on 
  64     // ------------------------------- 
  66         bool MacMenuSelect(wxEvtHandler
* handler
, long when 
, int macMenuId
, int macMenuItemNum
) ; 
  67         int     MacGetIndexFromId( int id 
) ;  
  68         int     MacGetIndexFromItem( wxMenuItem 
*pItem 
) ;  
  69         void MacEnableMenu( bool bDoEnable 
) ; 
  71     // semi-private accessors 
  72         // get the window which contains this menu 
  73     wxWindow 
*GetWindow() const; 
  74         // get the menu handle 
  75     WXHMENU 
GetHMenu() const { return m_hMenu
; } 
  77     // attach/detach menu to/from wxMenuBar 
  78     void Attach(wxMenuBar 
*menubar
); 
  80         short MacGetMenuId() { return m_macMenuId 
; } 
  82     // called by wxMenuBar to build its accel table from the accels of all menus 
  83     bool HasAccels() const { return !m_accels
.IsEmpty(); } 
  84     size_t GetAccelCount() const { return m_accels
.GetCount(); } 
  85     size_t CopyAccels(wxAcceleratorEntry 
*accels
) const; 
  87     // called by wxMenuItem when its accels changes 
  88     void UpdateAccel(wxMenuItem 
*item
); 
  90     // helper used by wxMenu itself (returns the index in m_accels) 
  91     int FindAccel(int id
) const; 
  95     // common part of all ctors 
  98     // common part of Append/Insert (behaves as Append is pos == (size_t)-1) 
  99     bool DoInsertOrAppend(wxMenuItem 
*item
, size_t pos 
= (size_t)-1); 
 101     // if TRUE, insert a breal before appending the next item 
 104     // the menu handle of this menu 
 109         static short            s_macNextMenuId 
; 
 111     // the accelerators for our menu items 
 112     wxAcceleratorArray m_accels
; 
 113 #endif // wxUSE_ACCEL 
 115     DECLARE_DYNAMIC_CLASS(wxMenu
) 
 118 // ---------------------------------------------------------------------------- 
 119 // Menu Bar (a la Windows) 
 120 // ---------------------------------------------------------------------------- 
 122 class WXDLLEXPORT wxMenuBar 
: public wxMenuBarBase
 
 126         // default constructor 
 129     wxMenuBar(long style
); 
 130         // menubar takes ownership of the menus arrays but copies the titles 
 131     wxMenuBar(int n
, wxMenu 
*menus
[], const wxString titles
[]); 
 132     virtual ~wxMenuBar(); 
 134     // menubar construction 
 135     virtual bool Append( wxMenu 
*menu
, const wxString 
&title 
); 
 136     virtual bool Insert(size_t pos
, wxMenu 
*menu
, const wxString
& title
); 
 137     virtual wxMenu 
*Replace(size_t pos
, wxMenu 
*menu
, const wxString
& title
); 
 138     virtual wxMenu 
*Remove(size_t pos
); 
 140     virtual int FindMenuItem(const wxString
& menuString
, 
 141                              const wxString
& itemString
) const; 
 142     virtual wxMenuItem
* FindItem( int id
, wxMenu 
**menu 
= NULL 
) const; 
 144     virtual void EnableTop( size_t pos
, bool flag 
); 
 145     virtual void SetLabelTop( size_t pos
, const wxString
& label 
); 
 146     virtual wxString 
GetLabelTop( size_t pos 
) const; 
 148     // compatibility: these functions are deprecated 
 149 #if WXWIN_COMPATIBILITY 
 150     void SetEventHandler(wxEvtHandler 
*handler
) { m_eventHandler 
= handler
; } 
 151     wxEvtHandler 
*GetEventHandler() { return m_eventHandler
; } 
 153     bool Enabled(int id
) const { return IsEnabled(id
); } 
 154     bool Checked(int id
) const { return IsChecked(id
); } 
 155 #endif // WXWIN_COMPATIBILITY 
 157     // implementation from now on 
 159     int  FindMenu(const wxString
& title
); 
 162         // returns TRUE if we're attached to a frame 
 163     bool IsAttached() const { return m_menuBarFrame 
!= NULL
; } 
 164         // get the frame we live in 
 165     wxFrame 
*GetFrame() const { return m_menuBarFrame
; } 
 167     void Attach(wxFrame 
*frame
); 
 170     // get the accel table for all the menus 
 171     const wxAcceleratorTable
& GetAccelTable() const { return m_accelTable
; } 
 173     // update the accel table (must be called after adding/deletign a menu) 
 174     void RebuildAccelTable(); 
 175 #endif // wxUSE_ACCEL 
 177     // if the menubar is modified, the display is not updated automatically, 
 178     // call this function to update it (m_menuBarFrame should be !NULL) 
 181   void MacInstallMenuBar() ; 
 182   void MacMenuSelect(wxEvtHandler
* handler
, long when 
, int macMenuId
, int macMenuItemNum
) ; 
 183   static wxMenuBar
* MacGetInstalledMenuBar() { return s_macInstalledMenuBar 
; } 
 186     // common part of all ctors 
 189 #if WXWIN_COMPATIBILITY 
 190     wxEvtHandler 
*m_eventHandler
; 
 191 #endif // WXWIN_COMPATIBILITY 
 193     wxArrayString m_titles
; 
 195     wxFrame      
*m_menuBarFrame
; 
 198     // the accelerator table for all accelerators in all our menus 
 199     wxAcceleratorTable m_accelTable
; 
 200 #endif // wxUSE_ACCEL 
 203   static wxMenuBar
*                     s_macInstalledMenuBar 
; 
 205     DECLARE_DYNAMIC_CLASS(wxMenuBar
) 
 208 #endif // _WX_MENU_H_