1 /****************************************************************************
2 ** $Id: qt/qmenudata.h   3.3.8   edited Jan 11 14:38 $
3 **
4 ** Definition of QMenuData class
5 **
6 ** Created : 941128
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 QMENUDATA_H
39 #define QMENUDATA_H
40 
41 #ifndef QT_H
42 #include "qglobal.h"
43 #include "qiconset.h" // conversion QPixmap->QIconset
44 #include "qkeysequence.h"
45 #include "qstring.h"
46 #include "qsignal.h"
47 #include "qfont.h"
48 #endif // QT_H
49 
50 #ifndef QT_NO_MENUDATA
51 
52 class QPopupMenu;
53 class QMenuDataData;
54 class QObject;
55 
56 class QCustomMenuItem;
57 class QMenuItemData;
58 
59 class Q_EXPORT QMenuItem			// internal menu item class
60 {
61 friend class QMenuData;
62 public:
63     QMenuItem();
64    ~QMenuItem();
65 
id()66     int		id()		const	{ return ident; }
iconSet()67     QIconSet   *iconSet()	const	{ return iconset_data; }
text()68     QString	text()		const	{ return text_data; }
whatsThis()69     QString	whatsThis()	const	{ return whatsthis_data; }
pixmap()70     QPixmap    *pixmap()	const	{ return pixmap_data; }
popup()71     QPopupMenu *popup()		const	{ return popup_menu; }
widget()72     QWidget *widget()		const	{ return widget_item; }
73     QCustomMenuItem *custom()	const;
74 #ifndef QT_NO_ACCEL
key()75     QKeySequence key()		const	{ return accel_key; }
76 #endif
signal()77     QSignal    *signal()	const	{ return signal_data; }
isSeparator()78     bool	isSeparator()	const	{ return is_separator; }
isEnabled()79     bool	isEnabled()	const	{ return is_enabled; }
isChecked()80     bool	isChecked()	const	{ return is_checked; }
isDirty()81     bool	isDirty()	const	{ return is_dirty; }
isVisible()82     bool	isVisible()	const	{ return is_visible; }
isEnabledAndVisible()83     bool	isEnabledAndVisible() const { return is_enabled && is_visible; }
84 
setText(const QString & text)85     void	setText( const QString &text ) { text_data = text; }
setDirty(bool dirty)86     void	setDirty( bool dirty )	       { is_dirty = dirty; }
setVisible(bool visible)87     void	setVisible( bool visible )	       { is_visible = visible; }
setWhatsThis(const QString & text)88     void	setWhatsThis( const QString &text ) { whatsthis_data = text; }
89 
90 private:
91     int		ident;				// item identifier
92     QIconSet   *iconset_data;			// icons
93     QString	text_data;			// item text
94     QString	whatsthis_data;			// item Whats This help text
95     QPixmap    *pixmap_data;			// item pixmap
96     QPopupMenu *popup_menu;			// item popup menu
97     QWidget    *widget_item;			// widget menu item
98 #ifndef QT_NO_ACCEL
99     QKeySequence	accel_key;		// accelerator key (state|ascii)
100 #endif
101     QSignal    *signal_data;			// connection
102     uint	is_separator : 1;		// separator flag
103     uint	is_enabled   : 1;		// disabled flag
104     uint	is_checked   : 1;		// checked flag
105     uint	is_dirty     : 1;		// dirty (update) flag
106     uint	is_visible     : 1;		// visibility flag
107     QMenuItemData* d;
108 
109     QMenuItemData* extra();
110 
111 private:	// Disabled copy constructor and operator=
112 #if defined(Q_DISABLE_COPY)
113     QMenuItem( const QMenuItem & );
114     QMenuItem &operator=( const QMenuItem & );
115 #endif
116 };
117 
118 #include "qptrlist.h"
119 typedef QPtrList<QMenuItem>	 QMenuItemList;
120 typedef QPtrListIterator<QMenuItem> QMenuItemListIt;
121 
122 
123 class Q_EXPORT QCustomMenuItem : public Qt
124 {
125 public:
126     QCustomMenuItem();
127     virtual ~QCustomMenuItem();
128     virtual bool fullSpan() const;
129     virtual bool isSeparator() const;
130     virtual void setFont( const QFont& font );
131     virtual void paint( QPainter* p, const QColorGroup& cg, bool act,
132 			bool enabled, int x, int y, int w, int h ) = 0;
133     virtual QSize sizeHint() = 0;
134 };
135 
136 
137 class Q_EXPORT QMenuData			// menu data class
138 {
139 friend class QMenuBar;
140 friend class QPopupMenu;
141 public:
142     QMenuData();
143     virtual ~QMenuData();
144 
145     uint	count() const;
146 
147 
148     int		insertItem( const QString &text,
149 			    const QObject *receiver, const char* member,
150 			    const QKeySequence& accel = 0, int id = -1, int index = -1 );
151     int		insertItem( const QIconSet& icon,
152 			    const QString &text,
153 			    const QObject *receiver, const char* member,
154 			    const QKeySequence& accel = 0, int id = -1, int index = -1 );
155     int		insertItem( const QPixmap &pixmap,
156 			    const QObject *receiver, const char* member,
157 			    const QKeySequence& accel = 0, int id = -1, int index = -1 );
158     int		insertItem( const QIconSet& icon,
159 			    const QPixmap &pixmap,
160 			    const QObject *receiver, const char* member,
161 			    const QKeySequence& accel = 0, int id = -1, int index = -1 );
162 
163     int		insertItem( const QString &text, int id=-1, int index=-1 );
164     int		insertItem( const QIconSet& icon,
165 			    const QString &text, int id=-1, int index=-1 );
166 
167     int		insertItem( const QString &text, QPopupMenu *popup,
168 			    int id=-1, int index=-1 );
169     int		insertItem( const QIconSet& icon,
170 			    const QString &text, QPopupMenu *popup,
171 			    int id=-1, int index=-1 );
172 
173 
174     int		insertItem( const QPixmap &pixmap, int id=-1, int index=-1 );
175     int		insertItem( const QIconSet& icon,
176 			    const QPixmap &pixmap, int id=-1, int index=-1 );
177     int		insertItem( const QPixmap &pixmap, QPopupMenu *popup,
178 			    int id=-1, int index=-1 );
179     int		insertItem( const QIconSet& icon,
180 			    const QPixmap &pixmap, QPopupMenu *popup,
181 			    int id=-1, int index=-1 );
182 
183     int		insertItem( QWidget* widget, int id=-1, int index=-1 );
184 
185     int		insertItem( const QIconSet& icon, QCustomMenuItem* custom, int id=-1, int index=-1 );
186     int		insertItem( QCustomMenuItem* custom, int id=-1, int index=-1 );
187 
188 
189     int		insertSeparator( int index=-1 );
190 
191     void	removeItem( int id );
192     void	removeItemAt( int index );
193     void	clear();
194 
195 #ifndef QT_NO_ACCEL
196     QKeySequence accel( int id )	const;
197     void	setAccel( const QKeySequence& key, int id );
198 #endif
199 
200     QIconSet    *iconSet( int id )	const;
201     QString text( int id )		const;
202     QPixmap    *pixmap( int id )	const;
203 
204     void setWhatsThis( int id, const QString& );
205     QString whatsThis( int id ) const;
206 
207 
208     void	changeItem( int id, const QString &text );
209     void	changeItem( int id, const QPixmap &pixmap );
210     void	changeItem( int id, const QIconSet &icon, const QString &text );
211     void	changeItem( int id, const QIconSet &icon, const QPixmap &pixmap );
212 
changeItem(const QString & text,int id)213     void	changeItem( const QString &text, int id ) { changeItem( id, text); } // obsolete
changeItem(const QPixmap & pixmap,int id)214     void	changeItem( const QPixmap &pixmap, int id ) { changeItem( id, pixmap ); } // obsolete
changeItem(const QIconSet & icon,const QString & text,int id)215     void	changeItem( const QIconSet &icon, const QString &text, int id ) {	// obsolete
216 	changeItem( id, icon, text );
217     }
218 
219     bool	isItemActive( int id ) const;
220 
221     bool	isItemEnabled( int id ) const;
222     void	setItemEnabled( int id, bool enable );
223 
224     bool	isItemChecked( int id ) const;
225     void	setItemChecked( int id, bool check );
226 
227     bool	isItemVisible( int id ) const;
228     void	setItemVisible( int id, bool visible );
229 
230     virtual void updateItem( int id );
231 
232     int		indexOf( int id )	const;
233     int		idAt( int index )	const;
234     virtual void	setId( int index, int id );
235 
236     bool	connectItem( int id,
237 			     const QObject *receiver, const char* member );
238     bool	disconnectItem( int id,
239 				const QObject *receiver, const char* member );
240 
241     bool	setItemParameter( int id, int param );
242     int	itemParameter( int id ) const;
243 
244     QMenuItem  *findItem( int id )	const;
245     QMenuItem  *findItem( int id, QMenuData ** parent )	const;
246     QMenuItem * findPopup( QPopupMenu *, int *index = 0 );
247 
248     virtual void activateItemAt( int index );
249 
250 protected:
251     int		   actItem;
252     QMenuItemList *mitems;
253     QMenuData	  *parentMenu;
254     uint	   isPopupMenu	: 1;
255     uint	   isMenuBar	: 1;
256     uint	   badSize	: 1;
257     uint	   mouseBtDn	: 1;
258     uint	avoid_circularity : 1;
259     uint	actItemDown : 1;
260     virtual void   menuContentsChanged();
261     virtual void   menuStateChanged();
262     virtual void   menuInsPopup( QPopupMenu * );
263     virtual void   menuDelPopup( QPopupMenu * );
264 
265 private:
266     int		insertAny( const QString *, const QPixmap *, QPopupMenu *,
267 			   const QIconSet*, int, int, QWidget* = 0, QCustomMenuItem* = 0);
268     void	removePopup( QPopupMenu * );
269     void	changeItemIconSet( int id, const QIconSet &icon );
270 
271     QMenuDataData *d;
272 
273 private:	// Disabled copy constructor and operator=
274 #if defined(Q_DISABLE_COPY)
275     QMenuData( const QMenuData & );
276     QMenuData &operator=( const QMenuData & );
277 #endif
278 };
279 
280 
281 #endif // QT_NO_MENUDATA
282 
283 #endif // QMENUDATA_H
284