X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0fe536e3f6784c350fd8bf3793d8300499bf4ff4..b5a49757713da52a3840211988b48df1966792a5:/include/wx/os2/menu.h diff --git a/include/wx/os2/menu.h b/include/wx/os2/menu.h index 1dd6a5cef8..b871f900e4 100644 --- a/include/wx/os2/menu.h +++ b/include/wx/os2/menu.h @@ -14,13 +14,16 @@ #if wxUSE_ACCEL #include "wx/accel.h" + #include "wx/list.h" // for "template" list classes #include "wx/dynarray.h" - WX_DEFINE_EXPORTED_ARRAY(wxAcceleratorEntry *, wxAcceleratorArray); + WX_DEFINE_EXPORTED_ARRAY_PTR(wxAcceleratorEntry *, wxAcceleratorArray); #endif // wxUSE_ACCEL class WXDLLEXPORT wxFrame; +void wxSetShortCutKey(wxChar* zText); + // ---------------------------------------------------------------------------- // Menu // ---------------------------------------------------------------------------- @@ -28,82 +31,142 @@ class WXDLLEXPORT wxFrame; class WXDLLEXPORT wxMenu : public wxMenuBase { public: - // ctors & dtor - wxMenu(const wxString& title, long style = 0) - : wxMenuBase(title, style) { Init(); } + // + // Ctors & dtor + // + wxMenu( const wxString& rTitle + ,long lStyle = 0 + ) + : wxMenuBase( rTitle + ,lStyle + ) + { + Init(); + } - wxMenu(long style = 0) : wxMenuBase(style) { Init(); } + wxMenu(long lStyle = 0) + : wxMenuBase(lStyle) + { + Init(); + } virtual ~wxMenu(); - // implement base class virtuals - virtual bool DoAppend(wxMenuItem *item); - virtual bool DoInsert(size_t pos, wxMenuItem *item); - virtual wxMenuItem *DoRemove(wxMenuItem *item); - - virtual void Break(); - - virtual void SetTitle(const wxString& title); - - // OS2-specific - bool ProcessCommand(wxCommandEvent& event); + // + // Implement base class virtuals + // + virtual wxMenuItem* DoAppend(wxMenuItem* pItem); + virtual wxMenuItem* DoInsert( size_t nPos + ,wxMenuItem* pItem + ); + virtual wxMenuItem* DoRemove(wxMenuItem* pItem); + virtual void Break(void); + virtual void SetTitle(const wxString& rTitle); + + // + // Implementation only from now on + // ------------------------------- + // + virtual void Attach(wxMenuBarBase* pMenubar); -#if WXWIN_COMPATIBILITY - wxMenu(const wxString& title, const wxFunction func) - : wxMenuBase(title) - { - Callback(func); - } -#endif // WXWIN_COMPATIBILITY + bool OS2Command( WXUINT uParam + ,WXWORD wId + ); - // implementation only from now on - // ------------------------------- + // + // Semi-private accessors + // - bool OS2Command(WXUINT param, WXWORD id); + // + // Get the window which contains this menu + // + wxWindow* GetWindow(void) const; - // semi-private accessors - // get the window which contains this menu - wxWindow *GetWindow() const; - // get the menu handle + // + // Get the menu handle + // WXHMENU GetHMenu() const { return m_hMenu; } - // attach/detach menu to/from wxMenuBar - void Attach(wxMenuBar *menubar); - void Detach(); - #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(); } - size_t CopyAccels(wxAcceleratorEntry *accels) const; - - // called by wxMenuItem when its accels changes - void UpdateAccel(wxMenuItem *item); - - // helper used by wxMenu itself (returns the index in m_accels) - int FindAccel(int id) const; + // + // Called by wxMenuBar to build its accel table from the accels of all menus + // + bool HasAccels(void) const { return m_vAccels.IsEmpty(); } + size_t GetAccelCount(void) const { return m_vAccels.GetCount(); } + size_t CopyAccels(wxAcceleratorEntry* pAccels) const; + + // + // Called by wxMenuItem when its accels changes + // + void UpdateAccel(wxMenuItem* pItem); + + // + // Helper used by wxMenu itself (returns the index in m_accels) + // + int FindAccel(int nId) const; #endif // wxUSE_ACCEL + // + // OS/2 specific Find + // + wxMenuItem* FindItem(int id, ULONG hItem, wxMenu **menu = NULL) const; + //virtual function hiding suppression + int FindItem(const wxString& rsString) const + { return wxMenuBase::FindItem(rsString); } + wxMenuItem* FindItem(int id, wxMenu **menu = NULL) const + { return wxMenuBase::FindItem(id, menu); } + + // + // All OS/2PM Menu's have one of these + // + MENUITEM m_vMenuData; private: - // common part of all ctors + // + // Common part of all ctors + // void Init(); - // common part of Append/Insert (behaves as Append is pos == (size_t)-1) - bool DoInsertOrAppend(wxMenuItem *item, size_t pos = (size_t)-1); + // + // Common part of Append/Insert (behaves as Append is pos == (size_t)-1) + // + bool DoInsertOrAppend( wxMenuItem* pItem + ,size_t nPos = (size_t)-1 + ); + + // + // Terminate the current radio group, if any + // + void EndRadioGroup(void); + + // + // If true, insert a breal before appending the next item + // + bool m_bDoBreak; + + // + // The menu handle of this menu + // + WXHMENU m_hMenu; - // if TRUE, insert a breal before appending the next item - bool m_doBreak; + // + // The helper variable for creating unique IDs. + // + static USHORT m_nextMenuId; - // the menu handle of this menu - WXHMENU m_hMenu; + // + // The position of the first item in the current radio group or -1 + // + int m_nStartRadioGroup; #if wxUSE_ACCEL - // the accelerators for our menu items - wxAcceleratorArray m_accels; + // + // The accelerators for our menu items + // + wxAcceleratorArray m_vAccels; #endif // wxUSE_ACCEL DECLARE_DYNAMIC_CLASS(wxMenu) -}; +}; // end of wxMenu // ---------------------------------------------------------------------------- // Menu Bar (a la Windows) @@ -112,88 +175,117 @@ private: class WXDLLEXPORT wxMenuBar : public wxMenuBarBase { public: - // ctors & dtor - // default constructor + // + // Ctors & dtor + // + + // + // Default constructor + // wxMenuBar(); - // unused under OS2 - wxMenuBar(long style); - // menubar takes ownership of the menus arrays but copies the titles - wxMenuBar(int n, wxMenu *menus[], const wxString titles[]); + + // + // Unused under OS2 + wxMenuBar(long lStyle); + + // + // Menubar takes ownership of the menus arrays but copies the titles + // + wxMenuBar( int n + ,wxMenu* vMenus[] + ,const wxString sTitles[] + ,long lStyle = 0 + ); virtual ~wxMenuBar(); - // menubar construction - 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 int FindMenuItem(const wxString& menuString, - const wxString& itemString) const; - virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const; - - virtual void EnableTop( size_t pos, bool flag ); - virtual void SetLabelTop( size_t pos, const wxString& label ); - virtual wxString GetLabelTop( size_t pos ) const; - - // compatibility: these functions are deprecated -#if WXWIN_COMPATIBILITY - void SetEventHandler(wxEvtHandler *handler) { m_eventHandler = handler; } - wxEvtHandler *GetEventHandler() { return m_eventHandler; } - - bool Enabled(int id) const { return IsEnabled(id); } - bool Checked(int id) const { return IsChecked(id); } -#endif // WXWIN_COMPATIBILITY - - // implementation from now on - WXHMENU Create(); - int FindMenu(const wxString& title); - void Detach(); - - // 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); + // + // Menubar construction + // + virtual bool Append( wxMenu* pMenu + ,const wxString& rTitle + ); + virtual bool Insert( size_t nPos + ,wxMenu* pMenu + ,const wxString& rTitle + ); + virtual wxMenu* Replace( size_t nPos + ,wxMenu* pMenu + ,const wxString& rTitle + ); + virtual wxMenu* Remove(size_t nPos); + virtual int FindMenuItem( const wxString& rMenuString + ,const wxString& rItemString + ) const; + virtual wxMenuItem* FindItem( int nId + ,wxMenu** ppMenu = NULL + ) const; + virtual wxMenuItem* FindItem( int nId + ,ULONG hItem + ,wxMenu** ppMenu = NULL + ) const; + virtual void EnableTop( size_t nPos + ,bool bFlag + ); + virtual void SetLabelTop( size_t nPos + ,const wxString& rLabel + ); + virtual wxString GetLabelTop(size_t nPos) const; + + // + // Implementation from now on + // + WXHMENU Create(void); + virtual void Detach(void); + virtual void Attach(wxFrame* pFrame); #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/deletign a menu) - void RebuildAccelTable(); + // + // Get the accel table for all the menus + // + const wxAcceleratorTable& GetAccelTable(void) const { return m_vAccelTable; } + + // + // Update the accel table (must be called after adding/deleting a menu) + // + void RebuildAccelTable(void); #endif // wxUSE_ACCEL - // get the menu handle - WXHMENU GetHMenu() const { return m_hMenu; } - unsigned long GetMenubarId() const { return m_ulMenubarId; } + // + // Get the menu handle + WXHMENU GetHMenu(void) const { return m_hMenu; } - // if the menubar is modified, the display is not updated automatically, + // + // If the menubar is modified, the display is not updated automatically, // call this function to update it (m_menuBarFrame should be !NULL) - void Refresh( bool eraseBackground = TRUE - ,const wxRect *rect = (const wxRect *) NULL - ); + // + void Refresh(void); protected: - // common part of all ctors - void Init(); - -#if WXWIN_COMPATIBILITY - wxEvtHandler *m_eventHandler; -#endif // WXWIN_COMPATIBILITY + // + // Common part of all ctors + // + void Init(void); wxArrayString m_titles; - wxFrame* m_menuBarFrame; WXHMENU m_hMenu; - unsigned long m_ulMenubarId; #if wxUSE_ACCEL - // the accelerator table for all accelerators in all our menus - wxAcceleratorTable m_accelTable; + // + // The accelerator table for all accelerators in all our menus + // + wxAcceleratorTable m_vAccelTable; #endif // wxUSE_ACCEL private: + // + // Virtual function hiding suppression + // + void Refresh( bool bErase + ,const wxRect* pRect + ) + { wxWindow::Refresh(bErase, pRect); } + DECLARE_DYNAMIC_CLASS(wxMenuBar) };