| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/os2/menu.h
- // Purpose: wxMenu, wxMenuBar classes
- // Author: David Webster
- // Modified by:
- // Created: 10/10/99
- // Copyright: (c) David Webster
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_MENU_H_
- #define _WX_MENU_H_
- #if wxUSE_ACCEL
- #include "wx/accel.h"
- #include "wx/list.h" // for "template" list classes
- #include "wx/dynarray.h"
- WX_DEFINE_EXPORTED_ARRAY_PTR(wxAcceleratorEntry *, wxAcceleratorArray);
- #endif // wxUSE_ACCEL
- class WXDLLIMPEXP_FWD_CORE wxFrame;
- void wxSetShortCutKey(wxChar* zText);
- // ----------------------------------------------------------------------------
- // Menu
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
- {
- public:
- //
- // Ctors & dtor
- //
- wxMenu( const wxString& rTitle
- ,long lStyle = 0
- )
- : wxMenuBase( rTitle
- ,lStyle
- )
- {
- Init();
- }
- wxMenu(long lStyle = 0)
- : wxMenuBase(lStyle)
- {
- Init();
- }
- virtual ~wxMenu();
- //
- // 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);
- bool OS2Command( WXUINT uParam
- ,WXWORD wId
- );
- //
- // Semi-private accessors
- //
- //
- // Get the window which contains this menu
- //
- wxWindow* GetWindow(void) const;
- //
- // Get the 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(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
- //
- void Init();
- //
- // 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;
- //
- // The helper variable for creating unique IDs.
- //
- static USHORT m_nextMenuId;
- //
- // 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_vAccels;
- #endif // wxUSE_ACCEL
- DECLARE_DYNAMIC_CLASS(wxMenu)
- }; // end of wxMenu
- // ----------------------------------------------------------------------------
- // Menu Bar (a la Windows)
- // ----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
- {
- public:
- //
- // Ctors & dtor
- //
- //
- // Default constructor
- //
- wxMenuBar();
- //
- // 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* 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 SetMenuLabel( size_t nPos
- ,const wxString& rLabel
- );
- virtual wxString GetMenuLabel(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(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(void) const { return m_hMenu; }
- //
- // If the menubar is modified, the display is not updated automatically,
- // call this function to update it (m_menuBarFrame should be !NULL)
- //
- void Refresh(void);
- protected:
- //
- // Common part of all ctors
- //
- void Init(void);
- wxArrayString m_titles;
- WXHMENU m_hMenu;
- #if wxUSE_ACCEL
- //
- // 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)
- };
- #endif // _WX_MENU_H_
|