X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b5dbe15d0bacde245539f54c4d97af6b4696f01f..8d43e8c68fd5d508a1628909c696fff938c9eb1e:/include/wx/msw/menu.h diff --git a/include/wx/msw/menu.h b/include/wx/msw/menu.h index fde7364053..d80e85cca1 100644 --- a/include/wx/msw/menu.h +++ b/include/wx/msw/menu.h @@ -45,7 +45,7 @@ class WXDLLIMPEXP_FWD_CORE wxToolBar; // Menu // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxMenu : public wxMenuBase +class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase { public: // ctors & dtor @@ -67,16 +67,13 @@ public: bool MSWCommand(WXUINT param, WXWORD id); - // semi-private accessors - // get the window which contains this menu - wxWindow *GetWindow() const; - // get the menu handle + // get the native menu handle WXHMENU GetHMenu() const { return m_hMenu; } #if wxUSE_ACCEL // called by wxMenuBar to build its accel table from the accels of all menus - bool HasAccels() const { return !m_accels.IsEmpty(); } - size_t GetAccelCount() const { return m_accels.GetCount(); } + bool HasAccels() const { return !m_accels.empty(); } + size_t GetAccelCount() const { return m_accels.size(); } size_t CopyAccels(wxAcceleratorEntry *accels) const; // called by wxMenuItem when its accels changes @@ -84,8 +81,35 @@ public: // helper used by wxMenu itself (returns the index in m_accels) int FindAccel(int id) const; + + // used only by wxMDIParentFrame currently but could be useful elsewhere: + // returns a new accelerator table with accelerators for just this menu + // (shouldn't be called if we don't have any accelerators) + wxAcceleratorTable *CreateAccelTable() const; #endif // wxUSE_ACCEL +#if wxUSE_OWNER_DRAWN + + int GetMaxAccelWidth() + { + if (m_maxAccelWidth == -1) + CalculateMaxAccelWidth(); + return m_maxAccelWidth; + } + + void ResetMaxAccelWidth() + { + m_maxAccelWidth = -1; + } + + // get the menu with given handle (recursively) + wxMenu* MSWGetMenu(WXHMENU hMenu); + +private: + void CalculateMaxAccelWidth(); + +#endif // wxUSE_OWNER_DRAWN + protected: virtual wxMenuItem* DoAppend(wxMenuItem *item); virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item); @@ -115,6 +139,17 @@ private: wxAcceleratorArray m_accels; #endif // wxUSE_ACCEL +#if wxUSE_OWNER_DRAWN + // true if the menu has any ownerdrawn items + bool m_ownerDrawn; + + // the max width of menu items bitmaps + int m_maxBitmapWidth; + + // the max width of menu items accels + int m_maxAccelWidth; +#endif // wxUSE_OWNER_DRAWN + DECLARE_DYNAMIC_CLASS_NO_COPY(wxMenu) }; @@ -122,26 +157,7 @@ private: // Menu Bar (a la Windows) // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxMenuInfo : public wxObject -{ -public : - wxMenuInfo() { m_menu = NULL; } - virtual ~wxMenuInfo() { } - - void Create( wxMenu *menu , const wxString &title ) - { m_menu = menu; m_title = title; } - wxMenu* GetMenu() const { return m_menu; } - wxString GetTitle() const { return m_title; } -private : - wxMenu *m_menu; - wxString m_title; - - DECLARE_DYNAMIC_CLASS(wxMenuInfo) -}; - -WX_DECLARE_EXPORTED_LIST(wxMenuInfo, wxMenuInfoList ); - -class WXDLLEXPORT wxMenuBar : public wxMenuBarBase +class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase { public: // ctors & dtor @@ -154,17 +170,14 @@ public: virtual ~wxMenuBar(); // menubar construction - bool Append( wxMenuInfo *info ) { return Append( info->GetMenu() , info->GetTitle() ); } - const wxMenuInfoList& GetMenuInfos() const; - virtual bool Append( wxMenu *menu, const wxString &title ); virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title); virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title); virtual wxMenu *Remove(size_t pos); virtual void EnableTop( size_t pos, bool flag ); - virtual void SetLabelTop( size_t pos, const wxString& label ); - virtual wxString GetLabelTop( size_t pos ) const; + virtual void SetMenuLabel( size_t pos, const wxString& label ); + virtual wxString GetMenuLabel( size_t pos ) const; // implementation from now on WXHMENU Create(); @@ -183,9 +196,6 @@ public: #endif #if wxUSE_ACCEL - // get the accel table for all the menus - const wxAcceleratorTable& GetAccelTable() const { return m_accelTable; } - // update the accel table (must be called after adding/deleting a menu) void RebuildAccelTable(); #endif // wxUSE_ACCEL @@ -201,22 +211,18 @@ public: void Refresh( bool eraseBackground, const wxRect *rect = (const wxRect *) NULL ) { wxWindow::Refresh(eraseBackground, rect); } + // get the menu with given handle (recursively) + wxMenu* MSWGetMenu(WXHMENU hMenu); + protected: // common part of all ctors void Init(); - wxArrayString m_titles; - wxMenuInfoList m_menuInfos; - WXHMENU m_hMenu; // Return the MSW position for a wxMenu which is sometimes different from // the wxWidgets position. int MSWPositionForWxMenu(wxMenu *menu, int wxpos); -#if wxUSE_ACCEL - // the accelerator table for all accelerators in all our menus - wxAcceleratorTable m_accelTable; -#endif // wxUSE_ACCEL #if defined(__WXWINCE__) && wxUSE_TOOLBAR wxToolBar* m_toolBar;