1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxMenu, wxMenuBar classes
4 // Author: David Webster
8 // Copyright: (c) David Webster
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
17 #include "wx/dynarray.h"
19 WX_DEFINE_EXPORTED_ARRAY(wxAcceleratorEntry
*, wxAcceleratorArray
);
22 class WXDLLEXPORT wxFrame
;
24 void wxSetShortCutKey(wxChar
* zText
);
26 // ----------------------------------------------------------------------------
28 // ----------------------------------------------------------------------------
30 class WXDLLEXPORT wxMenu
: public wxMenuBase
36 wxMenu( const wxString
& rTitle
46 wxMenu(long lStyle
= 0)
55 // Implement base class virtuals
57 virtual bool DoAppend(wxMenuItem
* pItem
);
58 virtual bool DoInsert( size_t nPos
61 virtual wxMenuItem
* DoRemove(wxMenuItem
* pItem
);
62 virtual void Break(void);
63 virtual void SetTitle(const wxString
& rTitle
);
65 #if wxUSE_MENU_CALLBACK
66 wxMenu( const wxString
& rTitle
67 ,const wxFunction fnFunc
74 #endif // wxUSE_MENU_CALLBACK
79 bool ProcessCommand(wxCommandEvent
& rEvent
);
83 // Implementation only from now on
84 // -------------------------------
86 bool OS2Command( WXUINT uParam
91 // Semi-private accessors
95 // Get the window which contains this menu
97 wxWindow
* GetWindow(void) const;
100 // Get the menu handle
102 WXHMENU
GetHMenu() const { return m_hMenu
; }
105 // Attach/detach menu to/from wxMenuBar
107 void Attach(wxMenuBar
* pMenubar
);
112 // Called by wxMenuBar to build its accel table from the accels of all menus
114 bool HasAccels(void) const { return !m_vAccels
.IsEmpty(); }
115 size_t GetAccelCount(void) const { return m_vAccels
.GetCount(); }
116 size_t CopyAccels(wxAcceleratorEntry
* pAccels
) const;
119 // Called by wxMenuItem when its accels changes
121 void UpdateAccel(wxMenuItem
* pItem
);
124 // Helper used by wxMenu itself (returns the index in m_accels)
126 int FindAccel(int nId
) const;
127 #endif // wxUSE_ACCEL
130 // All OS/2PM Menu's have one of these
132 MENUITEM m_vMenuData
;
136 // Common part of all ctors
141 // Common part of Append/Insert (behaves as Append is pos == (size_t)-1)
143 bool DoInsertOrAppend( wxMenuItem
* pItem
144 ,size_t nPos
= (size_t)-1
148 // If TRUE, insert a breal before appending the next item
153 // The menu handle of this menu
158 // The helper variable for creating unique IDs.
160 static USHORT m_nextMenuId
;
164 // The accelerators for our menu items
166 wxAcceleratorArray m_vAccels
;
167 #endif // wxUSE_ACCEL
169 DECLARE_DYNAMIC_CLASS(wxMenu
)
172 // ----------------------------------------------------------------------------
173 // Menu Bar (a la Windows)
174 // ----------------------------------------------------------------------------
176 class WXDLLEXPORT wxMenuBar
: public wxMenuBarBase
184 // Default constructor
190 wxMenuBar(long lStyle
);
193 // Menubar takes ownership of the menus arrays but copies the titles
197 ,const wxString sTitles
[]
199 virtual ~wxMenuBar();
202 // Menubar construction
204 virtual bool Append( wxMenu
* pMenu
205 ,const wxString
& rTitle
207 virtual bool Insert( size_t nPos
209 ,const wxString
& rTitle
211 virtual wxMenu
* Replace( size_t nPos
213 ,const wxString
& rTitle
215 virtual wxMenu
* Remove(size_t nPos
);
216 virtual int FindMenuItem( const wxString
& rMenuString
217 ,const wxString
& rItemString
219 virtual wxMenuItem
* FindItem( int nId
220 ,wxMenu
** ppMenu
= NULL
223 virtual void EnableTop( size_t nPos
226 virtual void SetLabelTop( size_t nPos
227 ,const wxString
& rLabel
229 virtual wxString
GetLabelTop(size_t nPos
) const;
232 // Compatibility: these functions are deprecated
234 #if WXWIN_COMPATIBILITY
235 void SetEventHandler(wxEvtHandler
* pHandler
) { m_pEventHandler
= pHandler
; }
236 wxEvtHandler
* GetEventHandler(void) { return m_pEventHandler
; }
237 bool Enabled(int nId
) const { return IsEnabled(nId
); }
238 bool Checked(int nId
) const { return IsChecked(nId
); }
239 #endif // WXWIN_COMPATIBILITY
242 // Implementation from now on
244 WXHMENU
Create(void);
248 // Returns TRUE if we're attached to a frame
250 bool IsAttached(void) const { return m_pMenuBarFrame
!= NULL
; }
253 // Get the frame we live in
255 wxFrame
* GetFrame(void) const { return m_pMenuBarFrame
; }
260 void Attach(wxFrame
* pFrame
);
264 // Get the accel table for all the menus
266 const wxAcceleratorTable
& GetAccelTable(void) const { return m_vAccelTable
; }
269 // Update the accel table (must be called after adding/deletign a menu)
271 void RebuildAccelTable(void);
272 #endif // wxUSE_ACCEL
275 // Get the menu handle
276 WXHMENU
GetHMenu(void) const { return m_hMenu
; }
279 // If the menubar is modified, the display is not updated automatically,
280 // call this function to update it (m_menuBarFrame should be !NULL)
286 // Common part of all ctors
290 #if WXWIN_COMPATIBILITY
291 wxEvtHandler
* m_pEventHandler
;
292 #endif // WXWIN_COMPATIBILITY
294 wxArrayString m_titles
;
296 wxFrame
* m_pMenuBarFrame
;
301 // The accelerator table for all accelerators in all our menus
303 wxAcceleratorTable m_vAccelTable
;
304 #endif // wxUSE_ACCEL
308 // Virtual function hiding suppression
310 void Refresh( bool bErase
313 { wxWindow::Refresh(bErase
, pRect
); }
315 DECLARE_DYNAMIC_CLASS(wxMenuBar
)
318 #endif // _WX_MENU_H_