File: menu.h

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (174 lines) | stat: -rw-r--r-- 5,937 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/////////////////////////////////////////////////////////////////////////////
// Name:        wx/motif/menu.h
// Purpose:     wxMenu, wxMenuBar classes
// Author:      Julian Smart
// Modified by:
// Created:     17/09/98
// Copyright:   (c) Julian Smart
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

#ifndef _WX_MOTIF_MENU_H_
#define _WX_MOTIF_MENU_H_

#include "wx/colour.h"
#include "wx/font.h"
#include "wx/arrstr.h"

class WXDLLIMPEXP_FWD_CORE wxFrame;

// ----------------------------------------------------------------------------
// Menu
// ----------------------------------------------------------------------------

class WXDLLIMPEXP_CORE wxMenu : public wxMenuBase
{
public:
    // ctors & dtor
    wxMenu(const wxString& title, long style = 0)
        : wxMenuBase(title, style) { Init(); }

    wxMenu(long style = 0) : wxMenuBase(style) { Init(); }

    virtual ~wxMenu();

    // implement base class virtuals
    virtual wxMenuItem* DoAppend(wxMenuItem *item);
    virtual wxMenuItem* DoInsert(size_t pos, wxMenuItem *item);
    virtual wxMenuItem* DoRemove(wxMenuItem *item);

    virtual void Break();

    virtual void SetTitle(const wxString& title);

    bool ProcessCommand(wxCommandEvent& event);

    //// Motif-specific
    WXWidget GetButtonWidget() const { return m_buttonWidget; }
    void SetButtonWidget(WXWidget buttonWidget) { m_buttonWidget = buttonWidget; }

    WXWidget GetMainWidget() const { return m_menuWidget; }

    int GetId() const { return m_menuId; }
    void SetId(int id) { m_menuId = id; }

    void SetMenuBar(wxMenuBar* menuBar) { m_menuBar = menuBar; }
    wxMenuBar* GetMenuBar() const { return m_menuBar; }

    void CreatePopup(WXWidget logicalParent, int x, int y);
    void DestroyPopup();
    void ShowPopup(int x, int y);
    void HidePopup();

    WXWidget CreateMenu(wxMenuBar *menuBar, WXWidget parent, wxMenu *topMenu,
        size_t index, const wxString& title = wxEmptyString,
        bool isPulldown = false);

    // For popups, need to destroy, then recreate menu for a different (or
    // possibly same) window, since the parent may change.
    void DestroyMenu(bool full);
    WXWidget FindMenuItem(int id, wxMenuItem **it = NULL) const;

    const wxColour& GetBackgroundColour() const { return m_backgroundColour; }
    const wxColour& GetForegroundColour() const { return m_foregroundColour; }
    const wxFont& GetFont() const { return m_font; }

    void SetBackgroundColour(const wxColour& colour);
    void SetForegroundColour(const wxColour& colour);
    void SetFont(const wxFont& colour);
    void ChangeFont(bool keepOriginalSize = false);

    WXWidget GetHandle() const { return m_menuWidget; }

    bool IsTearOff() const { return (m_style & wxMENU_TEAROFF) != 0; }

    void DestroyWidgetAndDetach();
public:
    // Motif-specific data
    int               m_numColumns;
    WXWidget          m_menuWidget;
    WXWidget          m_popupShell;   // For holding the popup shell widget
    WXWidget          m_buttonWidget; // The actual string, so we can grey it etc.
    int               m_menuId;
    wxMenu*           m_topLevelMenu ;
    bool              m_ownedByMenuBar;
    wxColour          m_foregroundColour;
    wxColour          m_backgroundColour;
    wxFont            m_font;

private:
    // common code for both constructors:
    void Init();

    DECLARE_DYNAMIC_CLASS(wxMenu)
};

// ----------------------------------------------------------------------------
// Menu Bar
// ----------------------------------------------------------------------------

class WXDLLIMPEXP_CORE wxMenuBar : public wxMenuBarBase
{
public:
    wxMenuBar() { Init(); }
    wxMenuBar(long WXUNUSED(style)) { Init(); }
    wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style = 0);
    wxMenuBar(size_t n, wxMenu *menus[], const wxArrayString& titles, long style = 0);
    virtual ~wxMenuBar();

    // implement base class (pure) virtuals
    // ------------------------------------

    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 SetMenuLabel( size_t pos, const wxString& label );
    virtual wxString GetMenuLabel( size_t pos ) const;

    // implementation only from now on
    // -------------------------------

    wxFrame* GetMenuBarFrame() const { return m_menuBarFrame; }
    void SetMenuBarFrame(wxFrame* frame) { m_menuBarFrame = frame; }
    WXWidget GetMainWidget() const { return m_mainWidget; }
    void SetMainWidget(WXWidget widget) { m_mainWidget = widget; }

    // Create menubar
    bool CreateMenuBar(wxFrame* frame);

    // Destroy menubar, but keep data structures intact so we can recreate it.
    bool DestroyMenuBar();

    const wxColour& GetBackgroundColour() const { return m_backgroundColour; }
    const wxColour& GetForegroundColour() const { return m_foregroundColour; }
    const wxFont& GetFont() const { return m_font; }

    virtual bool SetBackgroundColour(const wxColour& colour);
    virtual bool SetForegroundColour(const wxColour& colour);
    virtual bool SetFont(const wxFont& colour);
    void ChangeFont(bool keepOriginalSize = false);

public:
    // common part of all ctors
    void Init();

    wxArrayString m_titles;
    wxFrame      *m_menuBarFrame;

    WXWidget      m_mainWidget;

    wxColour      m_foregroundColour;
    wxColour      m_backgroundColour;
    wxFont        m_font;

    DECLARE_DYNAMIC_CLASS(wxMenuBar)
};

#endif // _WX_MOTIF_MENU_H_