1 /****************************************************************************
2 ** $Id: qt/qmenubar.h   3.3.8   edited Jan 16 10:55 $
3 **
4 ** Definition of QMenuBar class
5 **
6 ** Created : 941209
7 **
8 ** Copyright (C) 1992-2007 Trolltech ASA.  All rights reserved.
9 **
10 ** This file is part of the widgets module of the Qt GUI Toolkit.
11 **
12 ** This file may be distributed under the terms of the Q Public License
13 ** as defined by Trolltech ASA of Norway and appearing in the file
14 ** LICENSE.QPL included in the packaging of this file.
15 **
16 ** This file may be distributed and/or modified under the terms of the
17 ** GNU General Public License version 2 as published by the Free Software
18 ** Foundation and appearing in the file LICENSE.GPL included in the
19 ** packaging of this file.
20 **
21 ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22 ** licenses may use this file in accordance with the Qt Commercial License
23 ** Agreement provided with the Software.
24 **
25 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27 **
28 ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29 **   information about Qt Commercial License Agreements.
30 ** See http://www.trolltech.com/qpl/ for QPL licensing information.
31 ** See http://www.trolltech.com/gpl/ for GPL licensing information.
32 **
33 ** Contact info@trolltech.com if any conditions of this licensing are
34 ** not clear to you.
35 **
36 **********************************************************************/
37 
38 #ifndef QMENUBAR_H
39 #define QMENUBAR_H
40 
41 #ifndef QT_H
42 #include "qpopupmenu.h" // ### remove or keep for users' convenience?
43 #include "qframe.h"
44 #include "qmenudata.h"
45 #endif // QT_H
46 
47 #ifndef QT_NO_MENUBAR
48 
49 class QPopupMenu;
50 
51 class Q_EXPORT QMenuBar : public QFrame, public QMenuData
52 {
53     Q_OBJECT
54     Q_ENUMS( Separator )
55     Q_PROPERTY( Separator separator READ separator WRITE setSeparator DESIGNABLE false )
56     Q_PROPERTY( bool defaultUp READ isDefaultUp WRITE setDefaultUp )
57 
58 public:
59     QMenuBar( QWidget* parent=0, const char* name=0 );
60     ~QMenuBar();
61 
62     void	updateItem( int id );
63 
64     void	show();				// reimplemented show
65     void	hide();				// reimplemented hide
66 
67     bool	eventFilter( QObject *, QEvent * );
68 
69     int		heightForWidth(int) const;
70 
71     enum	Separator { Never=0, InWindowsStyle=1 };
72     Separator 	separator() const;
73     virtual void	setSeparator( Separator when );
74 
75     void	setDefaultUp( bool );
76     bool	isDefaultUp() const;
77 
78     bool customWhatsThis() const;
79 
80     QSize sizeHint() const;
81     QSize minimumSize() const;
82     QSize minimumSizeHint() const;
83 
84     void activateItemAt( int index );
85 
86 #if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE)
87     static void initialize();
88     static void cleanup();
89 #endif
90 
91 signals:
92     void	activated( int itemId );
93     void	highlighted( int itemId );
94 
95 protected:
96     void	drawContents( QPainter * );
97     void	fontChange( const QFont & );
98     void	mousePressEvent( QMouseEvent * );
99     void	mouseReleaseEvent( QMouseEvent * );
100     void	mouseMoveEvent( QMouseEvent * );
101     void	keyPressEvent( QKeyEvent * );
102     void	focusInEvent( QFocusEvent * );
103     void	focusOutEvent( QFocusEvent * );
104     void	resizeEvent( QResizeEvent * );
105     void	leaveEvent( QEvent * );
106     void	menuContentsChanged();
107     void	menuStateChanged();
108     void 	styleChange( QStyle& );
109     int	itemAtPos( const QPoint & );
110     void	hidePopups();
111     QRect	itemRect( int item );
112 
113 private slots:
114     void	subActivated( int itemId );
115     void	subHighlighted( int itemId );
116 #ifndef QT_NO_ACCEL
117     void	accelActivated( int itemId );
118     void	accelDestroyed();
119 #endif
120     void	popupDestroyed( QObject* );
121     void 	performDelayedChanges();
122 
123     void	languageChange();
124 
125 private:
126     void 	performDelayedContentsChanged();
127     void 	performDelayedStateChanged();
128     void	menuInsPopup( QPopupMenu * );
129     void	menuDelPopup( QPopupMenu * );
130     void	frameChanged();
131 
132     bool	tryMouseEvent( QPopupMenu *, QMouseEvent * );
133     void	tryKeyEvent( QPopupMenu *, QKeyEvent * );
134     void	goodbye( bool cancelled = FALSE );
135     void	openActPopup();
136 
137     void setActiveItem( int index, bool show = TRUE, bool activate_first_item = TRUE );
138     void setAltMode( bool );
139 
140     int		calculateRects( int max_width = -1 );
141 
142 #ifndef QT_NO_ACCEL
143     void	setupAccelerators();
144     QAccel     *autoaccel;
145 #endif
146     QRect      *irects;
147     int		rightSide;
148 
149     uint	mseparator : 1;
150     uint	waitforalt : 1;
151     uint	popupvisible  : 1;
152     uint	hasmouse : 1;
153     uint 	defaultup : 1;
154     uint 	toggleclose : 1;
155     uint        pendingDelayedContentsChanges : 1;
156     uint        pendingDelayedStateChanges : 1;
157 
158     friend class QPopupMenu;
159 
160 #if defined(Q_WS_MAC) && !defined(QMAC_QMENUBAR_NO_NATIVE)
161     friend class QWidget;
162     friend class QApplication;
163     friend void qt_mac_set_modal_state(bool, QMenuBar *);
164 
165     void macCreateNativeMenubar();
166     void macRemoveNativeMenubar();
167     void macDirtyNativeMenubar();
168 
169 #if !defined(QMAC_QMENUBAR_NO_EVENT)
170     static void qt_mac_install_menubar_event(MenuRef);
171     static OSStatus qt_mac_menubar_event(EventHandlerCallRef, EventRef, void *);
172 #endif
173     virtual void macWidgetChangedWindow();
174     bool syncPopups(MenuRef ret, QPopupMenu *d);
175     MenuRef createMacPopup(QPopupMenu *d, int id, bool =FALSE);
176     bool updateMenuBar();
177 #if !defined(QMAC_QMENUBAR_NO_MERGE)
178     uint isCommand(QMenuItem *, bool just_check=FALSE);
179 #endif
180 
181     uint mac_eaten_menubar : 1;
182     class MacPrivate;
183     MacPrivate *mac_d;
184     static bool activate(MenuRef, short, bool highlight=FALSE, bool by_accel=FALSE);
185     static bool activateCommand(uint cmd);
186     static bool macUpdateMenuBar();
187     static bool macUpdatePopupVisible(MenuRef, bool);
188     static bool macUpdatePopup(MenuRef);
189 #endif
190 
191 private:	// Disabled copy constructor and operator=
192 
193 #if defined(Q_DISABLE_COPY)
194     QMenuBar( const QMenuBar & );
195     QMenuBar &operator=( const QMenuBar & );
196 #endif
197 };
198 
199 
200 #endif // QT_NO_MENUBAR
201 
202 #endif // QMENUBAR_H
203