1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/gtk/menu.h
3 // Purpose:
4 // Author:      Robert Roebling
5 // Copyright:   (c) 1998 Robert Roebling, Julian Smart
6 // Licence:     wxWindows licence
7 /////////////////////////////////////////////////////////////////////////////
8 
9 #ifndef _WX_GTKMENU_H_
10 #define _WX_GTKMENU_H_
11 
12 //-----------------------------------------------------------------------------
13 // wxMenuBar
14 //-----------------------------------------------------------------------------
15 
16 class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
17 {
18 public:
19     // ctors
20     wxMenuBar();
21     wxMenuBar(long style);
22     wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0);
23     ~wxMenuBar();
24 
25     // implement base class (pure) virtuals
26     virtual bool Append( wxMenu *menu, const wxString &title );
27     virtual bool Insert(size_t pos, wxMenu *menu, const wxString& title);
28     virtual wxMenu *Replace(size_t pos, wxMenu *menu, const wxString& title);
29     virtual wxMenu *Remove(size_t pos);
30 
31     virtual int FindMenuItem(const wxString& menuString,
32                              const wxString& itemString) const;
33     virtual wxMenuItem* FindItem( int id, wxMenu **menu = NULL ) const;
34 
35     virtual void EnableTop( size_t pos, bool flag );
36     virtual bool IsEnabledTop(size_t pos) const;
37     virtual void SetMenuLabel( size_t pos, const wxString& label );
38     virtual wxString GetMenuLabel( size_t pos ) const;
39 
40     void SetLayoutDirection(wxLayoutDirection dir);
41     wxLayoutDirection GetLayoutDirection() const;
42 
43     virtual void Attach(wxFrame *frame);
44     virtual void Detach();
45 
46 private:
47     // common part of Append and Insert
48     void GtkAppend(wxMenu* menu, const wxString& title, int pos = -1);
49 
50     void Init(size_t n, wxMenu *menus[], const wxString titles[], long style);
51 
52     // wxMenuBar is not a top level window but it still doesn't need a parent
53     // window
GTKNeedsParent()54     virtual bool GTKNeedsParent() const { return false; }
55 
56     GtkWidget* m_menubar;
57 
58     DECLARE_DYNAMIC_CLASS(wxMenuBar)
59 };
60 
61 //-----------------------------------------------------------------------------
62 // wxMenu
63 //-----------------------------------------------------------------------------
64 
65 class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
66 {
67 public:
68     // ctors & dtor
69     wxMenu(const wxString& title, long style = 0)
wxMenuBase(title,style)70         : wxMenuBase(title, style) { Init(); }
71 
wxMenuBase(style)72     wxMenu(long style = 0) : wxMenuBase(style) { Init(); }
73 
74     virtual ~wxMenu();
75 
76     void Attach(wxMenuBarBase *menubar);
77 
78     void SetLayoutDirection(const wxLayoutDirection dir);
79     wxLayoutDirection GetLayoutDirection() const;
80 
81     // Returns the title, with mnemonics translated to wx format
82     wxString GetTitle() const;
83 
84     // Sets the title, with mnemonics translated to gtk format
85     virtual void SetTitle(const wxString& title);
86 
87     // implementation GTK only
88     GtkWidget       *m_menu;  // GtkMenu
89     GtkWidget       *m_owner;
90     GtkAccelGroup   *m_accel;
91     bool m_popupShown;
92 
93 protected:
94     virtual wxMenuItem* DoAppend(wxMenuItem *item);
95     virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item);
96     virtual wxMenuItem* DoRemove(wxMenuItem *item);
97 
98 private:
99     // common code for all constructors:
100     void Init();
101 
102     // common part of Append (if pos == -1)  and Insert
103     void GtkAppend(wxMenuItem* item, int pos = -1);
104 
105 
106     DECLARE_DYNAMIC_CLASS(wxMenu)
107 };
108 
109 #endif
110     // _WX_GTKMENU_H_
111