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