X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/39ca6d790b4629bdacd5ea15e0169aa17fb1d53f..a0250ba3e5f1b176fa69eb5aa7301069ad3bfcf3:/include/wx/msw/menu.h diff --git a/include/wx/msw/menu.h b/include/wx/msw/menu.h index c0e08f9d78..4157007090 100644 --- a/include/wx/msw/menu.h +++ b/include/wx/msw/menu.h @@ -18,6 +18,12 @@ #include "wx/defs.h" #include "wx/event.h" +#include "wx/dynarray.h" +#include "wx/string.h" + +#if wxUSE_ACCEL +#include "wx/accel.h" +#endif // wxUSE_ACCEL class WXDLLEXPORT wxMenuItem; class WXDLLEXPORT wxMenuBar; @@ -35,8 +41,23 @@ class WXDLLEXPORT wxMenu : public wxEvtHandler DECLARE_DYNAMIC_CLASS(wxMenu) public: - // ctor & dtor - wxMenu(const wxString& title = wxEmptyString, const wxFunction func = NULL); + // ctors & dtor + wxMenu(const wxString& title, + const wxFunction func) + { + Init(title, func); + } + + wxMenu( long WXUNUSED(style) ) + { + Init( wxEmptyString ); + } + + wxMenu(const wxString& title = wxEmptyString, long WXUNUSED(style) = 0) + { + Init(title); + } + virtual ~wxMenu(); // construct menu @@ -103,20 +124,12 @@ public: // menu or associated window will be used. void UpdateUI(wxEvtHandler* source = (wxEvtHandler*)NULL); - void ProcessCommand(wxCommandEvent& event); + bool ProcessCommand(wxCommandEvent& event); virtual void SetParent(wxEvtHandler *parent) { m_parent = parent; } void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; } wxEvtHandler *GetEventHandler() const { return m_eventHandler; } -#ifdef WXWIN_COMPATIBILITY - void Callback(const wxFunction func) { m_callback = func; } - - // compatibility: these functions are deprecated - bool Enabled(int id) const { return IsEnabled(id); } - bool Checked(int id) const { return IsChecked(id); } -#endif // WXWIN_COMPATIBILITY - // IMPLEMENTATION bool MSWCommand(WXUINT param, WXWORD id); @@ -133,7 +146,26 @@ public: void Attach(wxMenuBar *menubar); void Detach(); +#if wxUSE_ACCEL + size_t GetAccelCount() const { return m_accelKeyCodes.GetCount(); } + size_t CopyAccels(wxAcceleratorEntry *accels) const; +#endif // wxUSE_ACCEL + + wxFunction GetCallback() const { return m_callback; } + void Callback(const wxFunction func) { m_callback = func; } + wxFunction m_callback; + +#ifdef WXWIN_COMPATIBILITY + // compatibility: these functions are deprecated + bool Enabled(int id) const { return IsEnabled(id); } + bool Checked(int id) const { return IsChecked(id); } + +#endif // WXWIN_COMPATIBILITY + private: + // common part of all ctors + void Init(const wxString& title, const wxFunction func = NULL ); + bool m_doBreak; // This is used when m_hMenu is NULL because we don't want to @@ -142,7 +174,6 @@ private: // Might be better to have a flag saying whether it's deleteable or not. WXHMENU m_savehMenu ; // Used for Enable() on popup WXHMENU m_hMenu; - wxFunction m_callback; int m_noItems; wxString m_title; @@ -153,6 +184,11 @@ private: wxEvtHandler * m_eventHandler; wxWindow *m_pInvokingWindow; void* m_clientData; + +#if wxUSE_ACCEL + // the accelerators data + wxArrayInt m_accelKeyCodes, m_accelFlags, m_accelIds; +#endif // wxUSE_ACCEL }; // ---------------------------------------------------------------------------- @@ -204,7 +240,7 @@ public: // notifications: return FALSE to prevent the menu from being // appended/deleted - virtual bool OnAppend(wxMenu *menu, const char *title); + virtual bool OnAppend(wxMenu *menu, const wxChar *title); virtual bool OnDelete(wxMenu *menu, int index); // item search @@ -235,29 +271,35 @@ public: // get the frame we live in wxFrame *GetFrame() const { return m_menuBarFrame; } // attach to a frame - void Attach(wxFrame *frame) - { - wxASSERT_MSG( !m_menuBarFrame, _T("menubar already attached!") ); + void Attach(wxFrame *frame); + +#if wxUSE_ACCEL + // get the accel table for the menus + const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; } +#endif // wxUSE_ACCEL - m_menuBarFrame = frame; - } // get the menu handle WXHMENU GetHMenu() const { return m_hMenu; } -protected: - // common part of all ctors - void Init(); - // if the menubar is modified, the display is not updated automatically, // call this function to update it (m_menuBarFrame should be !NULL) void Refresh(); +protected: + // common part of all ctors + void Init(); + wxEvtHandler *m_eventHandler; int m_menuCount; wxMenu **m_menus; wxString *m_titles; wxFrame *m_menuBarFrame; WXHMENU m_hMenu; + +#if wxUSE_ACCEL + // the accelerator table for all accelerators in all our menus + wxAcceleratorTable m_accelTable; +#endif // wxUSE_ACCEL }; #endif // _WX_MENU_H_