26 #ifndef OBJECTGENERATOR_H
27 #define OBJECTGENERATOR_H
30 #include <QWeakPointer>
32 namespace qutim_sdk_0_3
34 class ObjectGeneratorPrivate;
37 class ObjectGenerator;
83 typedef QExplicitlySharedDataPointer<ObjectGeneratorHolderData>
Ptr;
101 ObjectGenerator *addProperty(
const QByteArray &name,
const QVariant &value);
106 {
return generateHelper2(); }
119 QObject *
object = generateHelper2();
120 T *t = qobject_cast<T *>(object);
121 if (!t)
delete object;
147 virtual const QMetaObject *metaObject()
const = 0;
154 bool hasInterface(
const char *
id)
const;
156 virtual QList<QByteArray> interfaces()
const;
166 bool extends(
const QMetaObject *super)
const;
173 inline bool extends(
const char *
id)
const
174 {
return id && hasInterface(
id); }
181 inline bool extends()
const
182 {
return extends_helper<T>(
reinterpret_cast<T *
>(0)); }
187 static bool isInited();
199 {
return module_helper<T>(
reinterpret_cast<T *
>(0)); }
203 template<
typename T>
static inline GeneratorList module_helper(
const QObject *)
205 template<
typename T>
static inline GeneratorList module_helper(
const void *)
208 inline bool extends_helper(
const QObject *)
const
209 {
return extends(&T::staticMetaObject); }
211 inline bool extends_helper(
const void *)
const
212 {
return extends(qobject_interface_iid<T *>()); }
213 QObject *generateHelper2()
const;
223 virtual QObject *generateHelper()
const = 0;
224 virtual void virtual_hook(
int id,
void *data);
225 QScopedPointer<ObjectGeneratorPrivate> d_ptr;
228 typedef ObjectGeneratorPrivate Data;
229 inline Data *data() {
return d_ptr.data(); }
233 template<
typename T,
typename I0 = void,
234 typename I1 = void,
typename I2 = void,
typename I3 = void,
235 typename I4 = void,
typename I5 = void,
typename I6 = void,
236 typename I7 = void,
typename I8 = void,
typename I9 =
void>
261 return &T::staticMetaObject;
271 QList<QByteArray> result;
272 addInterface<I0>(result);
273 addInterface<I1>(result);
274 addInterface<I2>(result);
275 addInterface<I3>(result);
276 addInterface<I4>(result);
277 addInterface<I5>(result);
278 addInterface<I6>(result);
279 addInterface<I7>(result);
280 addInterface<I8>(result);
281 addInterface<I9>(result);
285 template<
typename Interface>
286 Q_INLINE_TEMPLATE
void addInterface(QList<QByteArray> &result, T *pointer = 0)
const
288 register Interface *i = pointer;
290 if (qobject_interface_iid<Interface*>())
291 result << qobject_interface_iid<Interface*>();
296 template<
typename T,
typename I0 = void,
297 typename I1 = void,
typename I2 = void,
typename I3 = void,
298 typename I4 = void,
typename I5 = void,
typename I6 = void,
299 typename I7 = void,
typename I8 = void,
typename I9 =
void>
300 class SingletonGenerator :
public GeneralGenerator<T, I0, I1, I2, I3, I4, I5, I6, I7, I8, I9>
330 #endif // OBJECTGENERATOR_H