123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 | // Copyright (C) 2016 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only#ifndef QMETAOBJECTBUILDER_P_H#define QMETAOBJECTBUILDER_P_H//// W A R N I N G// -------------//// This file is not part of the Qt API. It exists for the convenience// of moc. This header file may change from version to version without notice,// or even be removed.//// We mean it.//#include <QtCore/private/qglobal_p.h>#include <QtCore/qobject.h>#include <QtCore/qmetaobject.h>#include <QtCore/qdatastream.h>#include <QtCore/qhash.h>#include <QtCore/qmap.h>#include <private/qmetaobject_p.h> QT_BEGIN_NAMESPACE class QMetaObjectBuilderPrivate;class QMetaMethodBuilder;class QMetaMethodBuilderPrivate;class QMetaPropertyBuilder;class QMetaPropertyBuilderPrivate;class QMetaEnumBuilder;class QMetaEnumBuilderPrivate;class Q_CORE_EXPORT QMetaObjectBuilder {public:enum AddMember { ClassName =0x00000001, SuperClass =0x00000002, Methods =0x00000004, Signals =0x00000008, Slots =0x00000010, Constructors =0x00000020, Properties =0x00000040, Enumerators =0x00000080, ClassInfos =0x00000100, RelatedMetaObjects =0x00000200, StaticMetacall =0x00000400, PublicMethods =0x00000800, ProtectedMethods =0x00001000, PrivateMethods =0x00002000, AllMembers =0x7FFFFFFF, AllPrimaryMembers =0x7FFFFBFC};Q_DECLARE_FLAGS(AddMembers, AddMember)QMetaObjectBuilder();explicitQMetaObjectBuilder(const QMetaObject *prototype,QMetaObjectBuilder::AddMembers members = AllMembers);virtual~QMetaObjectBuilder(); QByteArray className()const;voidsetClassName(const QByteArray& name);const QMetaObject *superClass()const;voidsetSuperClass(const QMetaObject *meta); MetaObjectFlags flags()const;voidsetFlags(MetaObjectFlags);intmethodCount()const;intconstructorCount()const;intpropertyCount()const;intenumeratorCount()const;intclassInfoCount()const;intrelatedMetaObjectCount()const; QMetaMethodBuilder addMethod(const QByteArray& signature); QMetaMethodBuilder addMethod(const QByteArray& signature,const QByteArray& returnType); QMetaMethodBuilder addMethod(const QMetaMethod& prototype); QMetaMethodBuilder addSlot(const QByteArray& signature); QMetaMethodBuilder addSignal(const QByteArray& signature); QMetaMethodBuilder addConstructor(const QByteArray& signature); QMetaMethodBuilder addConstructor(const QMetaMethod& prototype); QMetaPropertyBuilder addProperty(const QByteArray& name,const QByteArray& type,int notifierId=-1); QMetaPropertyBuilder addProperty(const QByteArray& name,const QByteArray& type, QMetaType metaType,int notifierId=-1); QMetaPropertyBuilder addProperty(const QMetaProperty& prototype); QMetaEnumBuilder addEnumerator(const QByteArray& name); QMetaEnumBuilder addEnumerator(const QMetaEnum& prototype);intaddClassInfo(const QByteArray& name,const QByteArray& value);intaddRelatedMetaObject(const QMetaObject *meta);voidaddMetaObject(const QMetaObject *prototype,QMetaObjectBuilder::AddMembers members = AllMembers); QMetaMethodBuilder method(int index)const; QMetaMethodBuilder constructor(int index)const; QMetaPropertyBuilder property(int index)const; QMetaEnumBuilder enumerator(int index)const;const QMetaObject *relatedMetaObject(int index)const; QByteArray classInfoName(int index)const; QByteArray classInfoValue(int index)const;voidremoveMethod(int index);voidremoveConstructor(int index);voidremoveProperty(int index);voidremoveEnumerator(int index);voidremoveClassInfo(int index);voidremoveRelatedMetaObject(int index);intindexOfMethod(const QByteArray& signature);intindexOfSignal(const QByteArray& signature);intindexOfSlot(const QByteArray& signature);intindexOfConstructor(const QByteArray& signature);intindexOfProperty(const QByteArray& name);intindexOfEnumerator(const QByteArray& name);intindexOfClassInfo(const QByteArray& name);typedefvoid(*StaticMetacallFunction)(QObject *,QMetaObject::Call,int,void**);QMetaObjectBuilder::StaticMetacallFunction staticMetacallFunction()const;voidsetStaticMetacallFunction(QMetaObjectBuilder::StaticMetacallFunction value); QMetaObject *toMetaObject()const;private:Q_DISABLE_COPY_MOVE(QMetaObjectBuilder) QMetaObjectBuilderPrivate *d;friend class QMetaMethodBuilder;friend class QMetaPropertyBuilder;friend class QMetaEnumBuilder;};class Q_CORE_EXPORT QMetaMethodBuilder {public:QMetaMethodBuilder() :_mobj(nullptr),_index(0) {}intindex()const;QMetaMethod::MethodType methodType()const; QByteArray signature()const; QByteArray returnType()const;voidsetReturnType(const QByteArray& value); QList<QByteArray>parameterTypes()const; QList<QByteArray>parameterNames()const;voidsetParameterNames(const QList<QByteArray>& value); QByteArray tag()const;voidsetTag(const QByteArray& value);QMetaMethod::Access access()const;voidsetAccess(QMetaMethod::Access value);intattributes()const;voidsetAttributes(int value);boolisConst()const;voidsetConst(bool methodIsConst=true);intrevision()const;voidsetRevision(int revision);private:const QMetaObjectBuilder *_mobj;int _index;friend class QMetaObjectBuilder;friend class QMetaPropertyBuilder;QMetaMethodBuilder(const QMetaObjectBuilder *mobj,int index):_mobj(mobj),_index(index) {} QMetaMethodBuilderPrivate *d_func()const;};class Q_CORE_EXPORT QMetaPropertyBuilder {public:QMetaPropertyBuilder() :_mobj(nullptr),_index(0) {}intindex()const{return _index; } QByteArray name()const; QByteArray type()const;boolhasNotifySignal()const; QMetaMethodBuilder notifySignal()const;voidsetNotifySignal(const QMetaMethodBuilder& value);voidremoveNotifySignal();boolisReadable()const;boolisWritable()const;boolisResettable()const;boolisDesignable()const;boolisScriptable()const;boolisStored()const;boolisEditable()const;boolisUser()const;boolhasStdCppSet()const;boolisEnumOrFlag()const;boolisConstant()const;boolisFinal()const;boolisAlias()const;boolisBindable()const;voidsetReadable(bool value);voidsetWritable(bool value);voidsetResettable(bool value);voidsetDesignable(bool value);voidsetScriptable(bool value);voidsetStored(bool value);voidsetUser(bool value);voidsetStdCppSet(bool value);voidsetEnumOrFlag(bool value);voidsetConstant(bool value);voidsetFinal(bool value);voidsetAlias(bool value);voidsetBindable(bool value);intrevision()const;voidsetRevision(int revision);private:const QMetaObjectBuilder *_mobj;int _index;friend class QMetaObjectBuilder;QMetaPropertyBuilder(const QMetaObjectBuilder *mobj,int index):_mobj(mobj),_index(index) {} QMetaPropertyBuilderPrivate *d_func()const;};class Q_CORE_EXPORT QMetaEnumBuilder {public:QMetaEnumBuilder() :_mobj(nullptr),_index(0) {}intindex()const{return _index; } QByteArray name()const; QByteArray enumName()const;voidsetEnumName(const QByteArray &alias); QMetaType metaType()const;voidsetMetaType(QMetaType metaType);boolisFlag()const;voidsetIsFlag(bool value);boolisScoped()const;voidsetIsScoped(bool value);boolis64Bit()const;voidsetIs64Bit(bool value);intkeyCount()const; QByteArray key(int index)const;intvalue(int index)const;std::optional<quint64>value64(int index)const;intaddKey(const QByteArray &name,int value);intaddKey(const QByteArray &name, quint64 value);voidremoveKey(int index);private:const QMetaObjectBuilder *_mobj;int _index;friend class QMetaObjectBuilder;QMetaEnumBuilder(const QMetaObjectBuilder *mobj,int index):_mobj(mobj),_index(index) {} QMetaEnumBuilderPrivate *d_func()const;};class Q_CORE_EXPORT QMetaStringTable {Q_DISABLE_COPY_MOVE(QMetaStringTable)public:explicitQMetaStringTable(const QByteArray &className);intenter(const QByteArray &value);static intpreferredAlignment();intblobSize()const;voidwriteBlob(char*out)const;private:typedef QHash<QByteArray,int> Entries;// string --> index mapping Entries m_entries;int m_index; QByteArray m_className;};Q_DECLARE_OPERATORS_FOR_FLAGS(QMetaObjectBuilder::AddMembers) QT_END_NAMESPACE #endif
|