X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c626a8b797d2819e1e14110d77c04a530fd3b6b4..7b8bd8182ca5ec9ed42d531b80fda479c2a2d7a1:/include/wx/msw/menu.h diff --git a/include/wx/msw/menu.h b/include/wx/msw/menu.h index 65479f5b20..c36a5fced2 100644 --- a/include/wx/msw/menu.h +++ b/include/wx/msw/menu.h @@ -18,13 +18,14 @@ #include "wx/defs.h" #include "wx/event.h" +#include "wx/dynarray.h" class WXDLLEXPORT wxMenuItem; class WXDLLEXPORT wxMenuBar; class WXDLLEXPORT wxMenu; class WXDLLEXPORT wxFrame; -WXDLLEXPORT_DATA(extern const char*) wxEmptyString; +WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString; // ---------------------------------------------------------------------------- // Menu @@ -103,20 +104,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); @@ -129,17 +122,35 @@ public: // get the menu handle WXHMENU GetHMenu() const; + // only for wxMenuBar + 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 + +#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); } + private: - bool m_doBreak ; + wxFunction m_callback; +#endif // WXWIN_COMPATIBILITY + +private: + bool m_doBreak; -public: // This is used when m_hMenu is NULL because we don't want to // delete it in ~wxMenu (it's been added to a parent menu). // But we'll still need the handle for other purposes. // 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; @@ -150,6 +161,11 @@ public: 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 }; // ---------------------------------------------------------------------------- @@ -162,12 +178,16 @@ class WXDLLEXPORT wxMenuBar : public wxEvtHandler public: // ctors & dtor + // default constructor wxMenuBar(); + // unused under MSW wxMenuBar(long style); + // menubar takes ownership of the menus arrays but copies the titles wxMenuBar(int n, wxMenu *menus[], const wxString titles[]); virtual ~wxMenuBar(); // menubar construction + WXHMENU Create(); void Append(wxMenu *menu, const wxString& title); virtual void Delete(wxMenu *menu, int index = 0); /* Menu not destroyed */ @@ -195,8 +215,9 @@ public: void SetLabelTop(int pos, const wxString& label) ; wxString GetLabelTop(int pos) const ; - // notifications - virtual bool OnAppend(wxMenu *menu, const char *title); + // notifications: return FALSE to prevent the menu from being + // appended/deleted + virtual bool OnAppend(wxMenu *menu, const wxChar *title); virtual bool OnDelete(wxMenu *menu, int index); // item search @@ -221,13 +242,41 @@ public: bool Checked(int id) const { return IsChecked(id); } #endif // WXWIN_COMPATIBILITY -public: - wxEvtHandler * m_eventHandler; - int m_menuCount; - wxMenu ** m_menus; - wxString * m_titles; - wxFrame * m_menuBarFrame; - WXHMENU m_hMenu; + // IMPLEMENTATION + // returns TRUE if we're attached to a frame + bool IsAttached() const { return m_menuBarFrame != NULL; } + // get the frame we live in + wxFrame *GetFrame() const { return m_menuBarFrame; } + // attach to a frame + void Attach(wxFrame *frame); + +#if wxUSE_ACCEL + // get the accel table for the menus + const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; } +#endif // wxUSE_ACCEL + + // 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(); + + 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_