1/////////////////////////////////////////////////////////////////////////////
2// Name:        wx/gtk/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    void SetLayoutDirection(wxLayoutDirection dir);
41    wxLayoutDirection GetLayoutDirection() const;
42
43    void Attach(wxFrame *frame);
44
45    // implementation only from now on
46    void SetInvokingWindow( wxWindow *win );
47    void UnsetInvokingWindow( wxWindow *win );
48
49    // common part of Append and Insert
50    bool GtkAppend(wxMenu *menu, const wxString& title, int pos=-1);
51
52    GtkWidget       *m_menubar;
53    long             m_style;
54    wxWindow        *m_invokingWindow;
55
56private:
57    void Init(size_t n, wxMenu *menus[], const wxString titles[], long style);
58
59    DECLARE_DYNAMIC_CLASS(wxMenuBar)
60
61public:
62
63#if wxABI_VERSION >= 20805
64    // Gets the original label at the top-level of the menubar
65    wxString GetMenuLabel(size_t pos) const;
66#endif
67};
68
69//-----------------------------------------------------------------------------
70// wxMenu
71//-----------------------------------------------------------------------------
72
73class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
74{
75public:
76    // ctors & dtor
77    wxMenu(const wxString& title, long style = 0)
78        : wxMenuBase(title, style) { Init(); }
79
80    wxMenu(long style = 0) : wxMenuBase(style) { Init(); }
81
82    virtual ~wxMenu();
83
84    void Attach(wxMenuBarBase *menubar);
85
86    void SetLayoutDirection(const wxLayoutDirection dir);
87    wxLayoutDirection GetLayoutDirection() const;
88
89    // TODO: virtual void SetTitle(const wxString& title);
90
91    // implementation
92    int FindMenuIdByMenuItem( GtkWidget *menuItem ) const;
93
94    // implementation GTK only
95    GtkWidget       *m_menu;  // GtkMenu
96    GtkWidget       *m_owner;
97    GtkAccelGroup   *m_accel;
98
99protected:
100    virtual wxMenuItem* DoAppend(wxMenuItem *item);
101    virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item);
102    virtual wxMenuItem* DoRemove(wxMenuItem *item);
103
104private:
105    // common code for all constructors:
106    void Init();
107
108    // common part of Append (if pos == -1)  and Insert
109    bool GtkAppend(wxMenuItem *item, int pos=-1);
110
111    GtkWidget *m_prevRadio;
112
113    DECLARE_DYNAMIC_CLASS(wxMenu)
114};
115
116#endif
117    // __GTKMENUH__
118