X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c626a8b797d2819e1e14110d77c04a530fd3b6b4..062c4861718a681a27384d6a2313fc26cda3b3e4:/include/wx/msw/menu.h diff --git a/include/wx/msw/menu.h b/include/wx/msw/menu.h index 65479f5b20..f01dafd080 100644 --- a/include/wx/msw/menu.h +++ b/include/wx/msw/menu.h @@ -24,7 +24,7 @@ class WXDLLEXPORT wxMenuBar; class WXDLLEXPORT wxMenu; class WXDLLEXPORT wxFrame; -WXDLLEXPORT_DATA(extern const char*) wxEmptyString; +WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString; // ---------------------------------------------------------------------------- // Menu @@ -103,20 +103,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 +121,33 @@ public: // get the menu handle WXHMENU GetHMenu() const; + // only for wxMenuBar + void Attach(wxMenuBar *menubar); + void Detach(); + + size_t GetAccelCount() const { return m_accelKeyCodes.GetCount(); } + size_t CopyAccels(wxAcceleratorEntry *accels) const; + +#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 +158,9 @@ public: wxEvtHandler * m_eventHandler; wxWindow *m_pInvokingWindow; void* m_clientData; + + // the accelerators data + wxArrayInt m_accelKeyCodes, m_accelFlags, m_accelIds; }; // ---------------------------------------------------------------------------- @@ -162,12 +173,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,7 +210,8 @@ public: void SetLabelTop(int pos, const wxString& label) ; wxString GetLabelTop(int pos) const ; - // notifications + // notifications: return FALSE to prevent the menu from being + // appended/deleted virtual bool OnAppend(wxMenu *menu, const char *title); virtual bool OnDelete(wxMenu *menu, int index); @@ -221,13 +237,36 @@ 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); + + // get the accel table for the menus + const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; } + // 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; + + // the accelerator table for all accelerators in all our menus + wxAcceleratorTable m_accelTable; }; #endif // _WX_MENU_H_