1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/gtk1/menu.h
3// Purpose:
4// Author:      Robert Roebling
5// Id:          $Id: menu.h 48053 2007-08-13 17:07:01Z JS $
6// Copyright:   (c) 1998 Robert Roebling, Julian Smart
7// Licence:     wxWindows licence
8/////////////////////////////////////////////////////////////////////////////
9
10#ifndef __GTKMENUH__
11#define __GTKMENUH__
12
13//-----------------------------------------------------------------------------
14// wxMenuBar
15//-----------------------------------------------------------------------------
16
17class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
18{
19public:
20    // ctors
21    wxMenuBar();
22    wxMenuBar(long style);
23    wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0);
24    virtual ~wxMenuBar();
25
26    // implement base class (pure) virtuals
27    virtual bool Append( wxMenu *menu, const wxString &title );
28    virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
29    virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
30    virtual wxMenu *Remove(size_t pos);
31
32    virtual int FindMenuItem(const wxString& menuString,
33                             const wxString& itemString) const;
34    virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const;
35
36    virtual void EnableTop( size_t pos, bool flag );
37    virtual void SetLabelTop( size_t pos, const wxString& label );
38    virtual wxString GetLabelTop( size_t pos ) const;
39
40    // implementation only from now on
41    void SetInvokingWindow( wxWindow *win );
42    void UnsetInvokingWindow( wxWindow *win );
43
44    // common part of Append and Insert
45    bool GtkAppend(wxMenu *menu, const wxString& title, int pos=-1);
46
47    GtkAccelGroup   *m_accel;
48    GtkWidget       *m_menubar;
49    long             m_style;
50    wxWindow        *m_invokingWindow;
51
52private:
53    void Init(size_t n, wxMenu *menus[], const wxString titles[], long style);
54
55    DECLARE_DYNAMIC_CLASS(wxMenuBar)
56
57public:
58
59#if wxABI_VERSION >= 20805
60    // Gets the original label at the top-level of the menubar
61    wxString GetMenuLabel(size_t pos) const;
62#endif
63};
64
65//-----------------------------------------------------------------------------
66// wxMenu
67//-----------------------------------------------------------------------------
68
69class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
70{
71public:
72    // ctors & dtor
73    wxMenu(const wxString& title, long style = 0)
74        : wxMenuBase(title, style) { Init(); }
75
76    wxMenu(long style = 0) : wxMenuBase(style) { Init(); }
77
78    virtual ~wxMenu();
79
80    // implement base class virtuals
81    virtual wxMenuItem* DoAppend(wxMenuItem *item);
82    virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item);
83    virtual wxMenuItem* DoRemove(wxMenuItem *item);
84
85    // TODO: virtual void SetTitle(const wxString& title);
86
87    // implementation
88    int FindMenuIdByMenuItem( GtkWidget *menuItem ) const;
89
90    // implementation GTK only
91    GtkWidget       *m_menu;  // GtkMenu
92    GtkWidget       *m_owner;
93    GtkAccelGroup   *m_accel;
94
95private:
96    // common code for all constructors:
97    void Init();
98
99    // common part of Append (if pos == -1)  and Insert
100    bool GtkAppend(wxMenuItem *item, int pos=-1);
101
102    GtkWidget *m_prevRadio;
103
104    DECLARE_DYNAMIC_CLASS(wxMenu)
105};
106
107#endif
108    // __GTKMENUH__
109