source: trunk/include/qmetaobject.h@ 138

Last change on this file since 138 was 2, checked in by dmik, 20 years ago

Imported xplatform parts of the official release 3.3.1 from Trolltech

  • Property svn:keywords set to Id
File size: 9.2 KB
Line 
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
50class QObject;
51struct QUMethod;
52class QMetaObjectPrivate;
53
54struct 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
63struct 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
79class Q_EXPORT QMetaProperty // property meta data
80{
81public:
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
128inline bool QMetaProperty::testFlags( uint f ) const
129{ return (flags & (uint)f) != (uint)0; }
130
131#endif // QT_NO_PROPERTIES
132
133struct QClassInfo // class info meta data
134{
135 const char* name; // - name of the info
136 const char* value; // - value of the info
137};
138
139class Q_EXPORT QMetaObject // meta object class
140{
141public:
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
228private:
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;
244public:
245 bool qt_static_property( QObject* o, int id, int f, QVariant* v);
246private:
247 friend class QMetaProperty;
248#endif
249
250private: // Disabled copy constructor and operator=
251#if defined(Q_DISABLE_COPY)
252 QMetaObject( const QMetaObject & );
253 QMetaObject &operator=( const QMetaObject & );
254#endif
255};
256
257inline int QMetaObject::slotOffset() const
258{ return slotoffset; }
259
260inline int QMetaObject::signalOffset() const
261{ return signaloffset; }
262
263#ifndef QT_NO_PROPERTIES
264inline int QMetaObject::propertyOffset() const
265{ return propertyoffset; }
266#endif
267
268typedef QMetaObject *(*QtStaticMetaObjectFunction)();
269
270class Q_EXPORT QMetaObjectCleanUp
271{
272public:
273 QMetaObjectCleanUp( const char *mo_name, QtStaticMetaObjectFunction );
274 QMetaObjectCleanUp();
275 ~QMetaObjectCleanUp();
276
277 void setMetaObject( QMetaObject *&mo );
278
279private:
280 QMetaObject **metaObject;
281};
282
283#endif // QMETAOBJECT_H
Note: See TracBrowser for help on using the repository browser.