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 
17 class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
18 {
19 public:
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 
52 private:
53     void Init(size_t n, wxMenu *menus[], const wxString titles[], long style);
54 
55     DECLARE_DYNAMIC_CLASS(wxMenuBar)
56 
57 public:
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 
69 class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
70 {
71 public:
72     // ctors & dtor
73     wxMenu(const wxString& title, long style = 0)
wxMenuBase(title,style)74         : wxMenuBase(title, style) { Init(); }
75 
wxMenuBase(style)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 
95 private:
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