1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxMenu, wxMenuBar classes 
   4 // Author:      Julian Smart 
   5 // Modified by: Vadim Zeitlin (wxMenuItem is now in separate file) 
   8 // Copyright:   (c) Julian Smart 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  16     #pragma interface "menu.h" 
  21     #include "wx/dynarray.h" 
  23     WX_DEFINE_EXPORTED_ARRAY_NO_PTR(wxAcceleratorEntry 
*, wxAcceleratorArray
); 
  26 class WXDLLEXPORT wxFrame
; 
  28 #if defined(__WXWINCE__) && wxUSE_TOOLBAR 
  29 class WXDLLEXPORT wxToolBar
; 
  32 #include "wx/arrstr.h" 
  34 // ---------------------------------------------------------------------------- 
  36 // ---------------------------------------------------------------------------- 
  38 class WXDLLEXPORT wxMenu 
: public wxMenuBase
 
  42     wxMenu(const wxString
& title
, long style 
= 0) 
  43         : wxMenuBase(title
, style
) { Init(); } 
  45     wxMenu(long style 
= 0) : wxMenuBase(style
) { Init(); } 
  49     // implement base class virtuals 
  50     virtual bool DoAppend(wxMenuItem 
*item
); 
  51     virtual bool DoInsert(size_t pos
, wxMenuItem 
*item
); 
  52     virtual wxMenuItem 
*DoRemove(wxMenuItem 
*item
); 
  56     virtual void SetTitle(const wxString
& title
); 
  58     // deprecated functions 
  59 #if wxUSE_MENU_CALLBACK 
  60     wxMenu(const wxString
& title
, const wxFunction func
) 
  67 #endif // wxUSE_MENU_CALLBACK 
  69     // implementation only from now on 
  70     // ------------------------------- 
  72     virtual void Attach(wxMenuBarBase 
*menubar
); 
  74     bool MSWCommand(WXUINT param
, WXWORD id
); 
  76     // semi-private accessors 
  77         // get the window which contains this menu 
  78     wxWindow 
*GetWindow() const; 
  79         // get the menu handle 
  80     WXHMENU 
GetHMenu() const { return m_hMenu
; } 
  83     // called by wxMenuBar to build its accel table from the accels of all menus 
  84     bool HasAccels() const { return !m_accels
.IsEmpty(); } 
  85     size_t GetAccelCount() const { return m_accels
.GetCount(); } 
  86     size_t CopyAccels(wxAcceleratorEntry 
*accels
) const; 
  88     // called by wxMenuItem when its accels changes 
  89     void UpdateAccel(wxMenuItem 
*item
); 
  91     // helper used by wxMenu itself (returns the index in m_accels) 
  92     int FindAccel(int id
) const; 
  96     // common part of all ctors 
  99     // common part of Append/Insert (behaves as Append is pos == (size_t)-1) 
 100     bool DoInsertOrAppend(wxMenuItem 
*item
, size_t pos 
= (size_t)-1); 
 102     // terminate the current radio group, if any 
 103     void EndRadioGroup(); 
 105     // if TRUE, insert a breal before appending the next item 
 108     // the position of the first item in the current radio group or -1 
 109     int m_startRadioGroup
; 
 111     // the menu handle of this menu 
 115     // the accelerators for our menu items 
 116     wxAcceleratorArray m_accels
; 
 117 #endif // wxUSE_ACCEL 
 119     DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenu
) 
 122 // ---------------------------------------------------------------------------- 
 123 // Menu Bar (a la Windows) 
 124 // ---------------------------------------------------------------------------- 
 126 class WXDLLEXPORT wxMenuBar 
: public wxMenuBarBase
 
 130         // default constructor 
 133     wxMenuBar(long style
); 
 134         // menubar takes ownership of the menus arrays but copies the titles 
 135     wxMenuBar(int n
, wxMenu 
*menus
[], const wxString titles
[]); 
 136     virtual ~wxMenuBar(); 
 138     // menubar construction 
 139     virtual bool Append( wxMenu 
*menu
, const wxString 
&title 
); 
 140     virtual bool Insert(size_t pos
, wxMenu 
*menu
, const wxString
& title
); 
 141     virtual wxMenu 
*Replace(size_t pos
, wxMenu 
*menu
, const wxString
& title
); 
 142     virtual wxMenu 
*Remove(size_t pos
); 
 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     virtual void Detach(); 
 160     virtual void Attach(wxFrame 
*frame
); 
 162 #if defined(__WXWINCE__) && wxUSE_TOOLBAR 
 163     // Under WinCE, a menubar is owned by the frame's toolbar 
 164     void SetToolBar(wxToolBar
* toolBar
) { m_toolBar 
= toolBar
; } 
 165     wxToolBar
* GetToolBar() const { return m_toolBar
; } 
 169     // get the accel table for all the menus 
 170     const wxAcceleratorTable
& GetAccelTable() const { return m_accelTable
; } 
 172     // update the accel table (must be called after adding/deletign a menu) 
 173     void RebuildAccelTable(); 
 174 #endif // wxUSE_ACCEL 
 176         // get the menu handle 
 177     WXHMENU 
GetHMenu() const { return m_hMenu
; } 
 179     // if the menubar is modified, the display is not updated automatically, 
 180     // call this function to update it (m_menuBarFrame should be !NULL) 
 183     // To avoid compile warning 
 184     void Refresh( bool eraseBackground
, 
 185                           const wxRect 
*rect 
= (const wxRect 
*) NULL 
) { wxWindow::Refresh(eraseBackground
, rect
); } 
 188     // common part of all ctors 
 191 #if WXWIN_COMPATIBILITY 
 192     wxEvtHandler 
*m_eventHandler
; 
 193 #endif // WXWIN_COMPATIBILITY 
 195     wxArrayString m_titles
; 
 200     // the accelerator table for all accelerators in all our menus 
 201     wxAcceleratorTable m_accelTable
; 
 202 #endif // wxUSE_ACCEL 
 204 #if defined(__WXWINCE__) && wxUSE_TOOLBAR 
 205     wxToolBar
*  m_toolBar
; 
 209     DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenuBar
) 
 212 #endif // _WX_MENU_H_