| 1 | /****************************************************************************
|
|---|
| 2 | ** $Id: qmetaobject.h 2 2005-11-16 15:49:26Z dmik $
|
|---|
| 3 | **
|
|---|
| 4 | ** Definition of QMetaObject class
|
|---|
| 5 | **
|
|---|
| 6 | ** Created : 930419
|
|---|
| 7 | **
|
|---|
| 8 | ** Copyright (C) 1992-2003 Trolltech AS. All rights reserved.
|
|---|
| 9 | **
|
|---|
| 10 | ** This file is part of the kernel 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 AS 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 QMETAOBJECT_H
|
|---|
| 39 | #define QMETAOBJECT_H
|
|---|
| 40 |
|
|---|
| 41 | #ifndef QT_H
|
|---|
| 42 | #include "qconnection.h"
|
|---|
| 43 | #include "qstrlist.h"
|
|---|
| 44 | #endif // QT_H
|
|---|
| 45 |
|
|---|
| 46 | #ifndef Q_MOC_OUTPUT_REVISION
|
|---|
| 47 | #define Q_MOC_OUTPUT_REVISION 26
|
|---|
| 48 | #endif
|
|---|
| 49 |
|
|---|
| 50 | class QObject;
|
|---|
| 51 | struct QUMethod;
|
|---|
| 52 | class QMetaObjectPrivate;
|
|---|
| 53 |
|
|---|
| 54 | struct QMetaData // - member function meta data
|
|---|
| 55 | { // for signal and slots
|
|---|
| 56 | const char *name; // - member name
|
|---|
| 57 | const QUMethod* method; // - detailed method description
|
|---|
| 58 | enum Access { Private, Protected, Public };
|
|---|
| 59 | Access access; // - access permission
|
|---|
| 60 | };
|
|---|
| 61 |
|
|---|
| 62 | #ifndef QT_NO_PROPERTIES
|
|---|
| 63 | struct QMetaEnum // enumerator meta data
|
|---|
| 64 | { // for properties
|
|---|
| 65 | const char *name; // - enumerator name
|
|---|
| 66 | uint count; // - number of values
|
|---|
| 67 | struct Item // - a name/value pair
|
|---|
| 68 | {
|
|---|
| 69 | const char *key;
|
|---|
| 70 | int value;
|
|---|
| 71 | };
|
|---|
| 72 | const Item *items; // - the name/value pairs
|
|---|
| 73 | bool set; // whether enum has to be treated as a set
|
|---|
| 74 | };
|
|---|
| 75 | #endif
|
|---|
| 76 |
|
|---|
| 77 | #ifndef QT_NO_PROPERTIES
|
|---|
| 78 |
|
|---|
| 79 | class Q_EXPORT QMetaProperty // property meta data
|
|---|
| 80 | {
|
|---|
| 81 | public:
|
|---|
| 82 | const char* type() const { return t; } // type of the property
|
|---|
| 83 | const char* name() const { return n; } // name of the property
|
|---|
| 84 |
|
|---|
| 85 | bool writable() const;
|
|---|
| 86 | bool isValid() const;
|
|---|
| 87 |
|
|---|
| 88 | bool isSetType() const;
|
|---|
| 89 | bool isEnumType() const;
|
|---|
| 90 | QStrList enumKeys() const; // enumeration names
|
|---|
| 91 |
|
|---|
| 92 | int keyToValue( const char* key ) const; // enum and set conversion functions
|
|---|
| 93 | const char* valueToKey( int value ) const;
|
|---|
| 94 | int keysToValue( const QStrList& keys ) const;
|
|---|
| 95 | QStrList valueToKeys( int value ) const;
|
|---|
| 96 |
|
|---|
| 97 | bool designable( QObject* = 0 ) const;
|
|---|
| 98 | bool scriptable( QObject* = 0 ) const;
|
|---|
| 99 | bool stored( QObject* = 0 ) const;
|
|---|
| 100 |
|
|---|
| 101 | bool reset( QObject* ) const;
|
|---|
| 102 |
|
|---|
| 103 | const char* t; // internal
|
|---|
| 104 | const char* n; // internal
|
|---|
| 105 |
|
|---|
| 106 | enum Flags {
|
|---|
| 107 | Invalid = 0x00000000,
|
|---|
| 108 | Readable = 0x00000001,
|
|---|
| 109 | Writable = 0x00000002,
|
|---|
| 110 | EnumOrSet = 0x00000004,
|
|---|
| 111 | UnresolvedEnum = 0x00000008,
|
|---|
| 112 | StdSet = 0x00000100,
|
|---|
| 113 | Override = 0x00000200
|
|---|
| 114 | };
|
|---|
| 115 |
|
|---|
| 116 | uint flags; // internal
|
|---|
| 117 | bool testFlags( uint f ) const; // internal
|
|---|
| 118 | bool stdSet() const; // internal
|
|---|
| 119 | int id() const; // internal
|
|---|
| 120 |
|
|---|
| 121 | QMetaObject** meta; // internal
|
|---|
| 122 |
|
|---|
| 123 | const QMetaEnum* enumData; // internal
|
|---|
| 124 | int _id; // internal
|
|---|
| 125 | void clear(); // internal
|
|---|
| 126 | };
|
|---|
| 127 |
|
|---|
| 128 | inline bool QMetaProperty::testFlags( uint f ) const
|
|---|
| 129 | { return (flags & (uint)f) != (uint)0; }
|
|---|
| 130 |
|
|---|
| 131 | #endif // QT_NO_PROPERTIES
|
|---|
| 132 |
|
|---|
| 133 | struct QClassInfo // class info meta data
|
|---|
| 134 | {
|
|---|
| 135 | const char* name; // - name of the info
|
|---|
| 136 | const char* value; // - value of the info
|
|---|
| 137 | };
|
|---|
| 138 |
|
|---|
| 139 | class Q_EXPORT QMetaObject // meta object class
|
|---|
| 140 | {
|
|---|
| 141 | public:
|
|---|
| 142 | QMetaObject( const char * const class_name, QMetaObject *superclass,
|
|---|
| 143 | const QMetaData * const slot_data, int n_slots,
|
|---|
| 144 | const QMetaData * const signal_data, int n_signals,
|
|---|
| 145 | #ifndef QT_NO_PROPERTIES
|
|---|
| 146 | const QMetaProperty *const prop_data, int n_props,
|
|---|
| 147 | const QMetaEnum *const enum_data, int n_enums,
|
|---|
| 148 | #endif
|
|---|
| 149 | const QClassInfo *const class_info, int n_info );
|
|---|
| 150 |
|
|---|
| 151 | #ifndef QT_NO_PROPERTIES
|
|---|
| 152 | QMetaObject( const char * const class_name, QMetaObject *superclass,
|
|---|
| 153 | const QMetaData * const slot_data, int n_slots,
|
|---|
| 154 | const QMetaData * const signal_data, int n_signals,
|
|---|
| 155 | const QMetaProperty *const prop_data, int n_props,
|
|---|
| 156 | const QMetaEnum *const enum_data, int n_enums,
|
|---|
| 157 | bool (*qt_static_property)(QObject*, int, int, QVariant*),
|
|---|
| 158 | const QClassInfo *const class_info, int n_info );
|
|---|
| 159 | #endif
|
|---|
| 160 |
|
|---|
| 161 |
|
|---|
| 162 | virtual ~QMetaObject();
|
|---|
| 163 |
|
|---|
| 164 | const char *className() const { return classname; }
|
|---|
| 165 | const char *superClassName() const { return superclassname; }
|
|---|
| 166 |
|
|---|
| 167 | QMetaObject *superClass() const { return superclass; }
|
|---|
| 168 |
|
|---|
| 169 | bool inherits( const char* clname ) const;
|
|---|
| 170 |
|
|---|
| 171 | int numSlots( bool super = FALSE ) const;
|
|---|
| 172 | int numSignals( bool super = FALSE ) const;
|
|---|
| 173 |
|
|---|
| 174 | int findSlot( const char *, bool super = FALSE ) const;
|
|---|
| 175 | int findSignal( const char *, bool super = FALSE ) const;
|
|---|
| 176 |
|
|---|
| 177 | const QMetaData *slot( int index, bool super = FALSE ) const;
|
|---|
| 178 | const QMetaData *signal( int index, bool super = FALSE ) const;
|
|---|
| 179 |
|
|---|
| 180 | QStrList slotNames( bool super = FALSE ) const;
|
|---|
| 181 | QStrList signalNames( bool super = FALSE ) const;
|
|---|
| 182 |
|
|---|
| 183 | int slotOffset() const;
|
|---|
| 184 | int signalOffset() const;
|
|---|
| 185 | int propertyOffset() const;
|
|---|
| 186 |
|
|---|
| 187 | int numClassInfo( bool super = FALSE ) const;
|
|---|
| 188 | const QClassInfo *classInfo( int index, bool super = FALSE ) const;
|
|---|
| 189 | const char *classInfo( const char* name, bool super = FALSE ) const;
|
|---|
| 190 |
|
|---|
| 191 | #ifndef QT_NO_PROPERTIES
|
|---|
| 192 | const QMetaProperty *property( int index, bool super = FALSE ) const;
|
|---|
| 193 | int findProperty( const char *name, bool super = FALSE ) const;
|
|---|
| 194 | int indexOfProperty( const QMetaProperty*, bool super = FALSE ) const;
|
|---|
| 195 | const QMetaProperty* resolveProperty( const QMetaProperty* ) const;
|
|---|
| 196 | int resolveProperty( int ) const;
|
|---|
| 197 | QStrList propertyNames( bool super = FALSE ) const;
|
|---|
| 198 | int numProperties( bool super = FALSE ) const;
|
|---|
| 199 | #endif
|
|---|
| 200 |
|
|---|
| 201 | // static wrappers around constructors, necessary to work around a
|
|---|
| 202 | // Windows-DLL limitation: objects can only be deleted within a
|
|---|
| 203 | // DLL if they were actually created within that DLL.
|
|---|
| 204 | static QMetaObject *new_metaobject( const char *, QMetaObject *,
|
|---|
| 205 | const QMetaData *const, int,
|
|---|
| 206 | const QMetaData *const, int,
|
|---|
| 207 | #ifndef QT_NO_PROPERTIES
|
|---|
| 208 | const QMetaProperty *const prop_data, int n_props,
|
|---|
| 209 | const QMetaEnum *const enum_data, int n_enums,
|
|---|
| 210 | #endif
|
|---|
| 211 | const QClassInfo *const class_info, int n_info );
|
|---|
| 212 | #ifndef QT_NO_PROPERTIES
|
|---|
| 213 | static QMetaObject *new_metaobject( const char *, QMetaObject *,
|
|---|
| 214 | const QMetaData *const, int,
|
|---|
| 215 | const QMetaData *const, int,
|
|---|
| 216 | const QMetaProperty *const prop_data, int n_props,
|
|---|
| 217 | const QMetaEnum *const enum_data, int n_enums,
|
|---|
| 218 | bool (*qt_static_property)(QObject*, int, int, QVariant*),
|
|---|
| 219 | const QClassInfo *const class_info, int n_info );
|
|---|
| 220 | QStrList enumeratorNames( bool super = FALSE ) const;
|
|---|
| 221 | int numEnumerators( bool super = FALSE ) const;
|
|---|
| 222 | const QMetaEnum *enumerator( const char* name, bool super = FALSE ) const;
|
|---|
| 223 | #endif
|
|---|
| 224 |
|
|---|
| 225 | static QMetaObject *metaObject( const char *class_name );
|
|---|
| 226 | static bool hasMetaObject( const char *class_name );
|
|---|
| 227 |
|
|---|
| 228 | private:
|
|---|
| 229 | QMemberDict *init( const QMetaData *, int );
|
|---|
| 230 |
|
|---|
| 231 | const char *classname; // class name
|
|---|
| 232 | const char *superclassname; // super class name
|
|---|
| 233 | QMetaObject *superclass; // super class meta object
|
|---|
| 234 | QMetaObjectPrivate *d; // private data for...
|
|---|
| 235 | void *reserved; // ...binary compatibility
|
|---|
| 236 | const QMetaData *slotData; // slot meta data
|
|---|
| 237 | QMemberDict *slotDict; // slot dictionary
|
|---|
| 238 | const QMetaData *signalData; // signal meta data
|
|---|
| 239 | QMemberDict *signalDict; // signal dictionary
|
|---|
| 240 | int signaloffset;
|
|---|
| 241 | int slotoffset;
|
|---|
| 242 | #ifndef QT_NO_PROPERTIES
|
|---|
| 243 | int propertyoffset;
|
|---|
| 244 | public:
|
|---|
| 245 | bool qt_static_property( QObject* o, int id, int f, QVariant* v);
|
|---|
| 246 | private:
|
|---|
| 247 | friend class QMetaProperty;
|
|---|
| 248 | #endif
|
|---|
| 249 |
|
|---|
| 250 | private: // Disabled copy constructor and operator=
|
|---|
| 251 | #if defined(Q_DISABLE_COPY)
|
|---|
| 252 | QMetaObject( const QMetaObject & );
|
|---|
| 253 | QMetaObject &operator=( const QMetaObject & );
|
|---|
| 254 | #endif
|
|---|
| 255 | };
|
|---|
| 256 |
|
|---|
| 257 | inline int QMetaObject::slotOffset() const
|
|---|
| 258 | { return slotoffset; }
|
|---|
| 259 |
|
|---|
| 260 | inline int QMetaObject::signalOffset() const
|
|---|
| 261 | { return signaloffset; }
|
|---|
| 262 |
|
|---|
| 263 | #ifndef QT_NO_PROPERTIES
|
|---|
| 264 | inline int QMetaObject::propertyOffset() const
|
|---|
| 265 | { return propertyoffset; }
|
|---|
| 266 | #endif
|
|---|
| 267 |
|
|---|
| 268 | typedef QMetaObject *(*QtStaticMetaObjectFunction)();
|
|---|
| 269 |
|
|---|
| 270 | class Q_EXPORT QMetaObjectCleanUp
|
|---|
| 271 | {
|
|---|
| 272 | public:
|
|---|
| 273 | QMetaObjectCleanUp( const char *mo_name, QtStaticMetaObjectFunction );
|
|---|
| 274 | QMetaObjectCleanUp();
|
|---|
| 275 | ~QMetaObjectCleanUp();
|
|---|
| 276 |
|
|---|
| 277 | void setMetaObject( QMetaObject *&mo );
|
|---|
| 278 |
|
|---|
| 279 | private:
|
|---|
| 280 | QMetaObject **metaObject;
|
|---|
| 281 | };
|
|---|
| 282 |
|
|---|
| 283 | #endif // QMETAOBJECT_H
|
|---|