/////////////////////////////////////////////////////////////////////////////
-// Name: menu.h
+// Name: wx/os2/menu.h
// Purpose: wxMenu, wxMenuBar classes
// Author: David Webster
// Modified by:
// Created: 10/10/99
-// RCS-ID: $Id$
// Copyright: (c) David Webster
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#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;
+class WXDLLIMPEXP_FWD_CORE wxFrame;
+
+void wxSetShortCutKey(wxChar* zText);
// ----------------------------------------------------------------------------
// Menu
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxMenu : public wxMenuBase
+class WXDLLIMPEXP_CORE 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);
-
- // if TRUE, insert a breal before appending the next item
- bool m_doBreak;
-
- // the menu handle of this menu
- WXHMENU m_hMenu;
+ //
+ // 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_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)
// ----------------------------------------------------------------------------
-class WXDLLEXPORT wxMenuBar : public wxMenuBarBase
+class WXDLLIMPEXP_CORE 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 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() 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; }
+ //
+ // 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;
+ WXHMENU m_hMenu;
#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)
};