Little refactor

This commit is contained in:
Filippo Cucchetto 2016-01-23 19:02:45 +01:00
parent c11cc30180
commit 553bec0eb7
2 changed files with 13 additions and 15 deletions

View File

@ -27,7 +27,7 @@ public:
virtual const DosIQMetaObject* superClassDosMetaObject() const = 0; virtual const DosIQMetaObject* superClassDosMetaObject() const = 0;
}; };
/// Base class for /// Base class for any DosIQMetaObject
class BaseDosQMetaObject : public DosIQMetaObject class BaseDosQMetaObject : public DosIQMetaObject
{ {
public: public:
@ -41,7 +41,7 @@ public:
QMetaMethod writeSlot(const char *propertyName) const override { return QMetaMethod(); } QMetaMethod writeSlot(const char *propertyName) const override { return QMetaMethod(); }
const DosIQMetaObject* superClassDosMetaObject() const { return nullptr; } const DosIQMetaObject* superClassDosMetaObject() const { return nullptr; }
private: protected:
SafeQMetaObjectPtr m_metaObject; SafeQMetaObjectPtr m_metaObject;
}; };
@ -60,10 +60,10 @@ public:
}; };
/// This the generic version used by subclasses of QObject or QAbstractListModels /// This the generic version used by subclasses of QObject or QAbstractListModels
class DosQMetaObject : public DosIQMetaObject class DosQMetaObject : public BaseDosQMetaObject
{ {
public: public:
DosQMetaObject(std::shared_ptr<const DosIQMetaObject> superClassDosMetaObject, DosQMetaObject(DosIQMetaObjectPtr superClassDosMetaObject,
const QString& className, const QString& className,
const SignalDefinitions &signalDefinitions, const SignalDefinitions &signalDefinitions,
const SlotDefinitions &slotDefinitions, const SlotDefinitions &slotDefinitions,
@ -72,7 +72,6 @@ public:
QMetaMethod signal(const QString& signalName) const override; QMetaMethod signal(const QString& signalName) const override;
QMetaMethod readSlot(const char* propertyName) const override; QMetaMethod readSlot(const char* propertyName) const override;
QMetaMethod writeSlot(const char* propertyName) const override; QMetaMethod writeSlot(const char* propertyName) const override;
const QMetaObject *metaObject() const override;
const DosIQMetaObject *superClassDosMetaObject() const override; const DosIQMetaObject *superClassDosMetaObject() const override;
private: private:
@ -81,10 +80,9 @@ private:
const SlotDefinitions &slotDefinitions, const SlotDefinitions &slotDefinitions,
const PropertyDefinitions &propertyDefinitions); const PropertyDefinitions &propertyDefinitions);
std::shared_ptr<const DosIQMetaObject> m_superClassDosMetaObject; const DosIQMetaObjectPtr m_superClassDosMetaObject;
QHash<QString, int> m_signalIndexByName; QHash<QString, int> m_signalIndexByName;
QHash<QString, QPair<int,int>> m_propertySlots; QHash<QString, QPair<int,int>> m_propertySlots;
SafeQMetaObjectPtr m_metaObject;
}; };
/// This class simply holds a ptr to a IDosQMetaObject /// This class simply holds a ptr to a IDosQMetaObject

View File

@ -61,14 +61,19 @@ DosQAbstractListModelMetaObject::DosQAbstractListModelMetaObject()
: BaseDosQMetaObject(::createDynamicQAbstractListModelMetaObject()) : BaseDosQMetaObject(::createDynamicQAbstractListModelMetaObject())
{} {}
DosQMetaObject::DosQMetaObject(std::shared_ptr<const DosIQMetaObject> superClassMetaObject, DosQMetaObject::DosQMetaObject(DosIQMetaObjectPtr superClassMetaObject,
const QString &className, const QString &className,
const SignalDefinitions& signalDefinitions, const SignalDefinitions& signalDefinitions,
const SlotDefinitions& slotDefinitions, const SlotDefinitions& slotDefinitions,
const PropertyDefinitions& propertyDefinitions) const PropertyDefinitions& propertyDefinitions)
: m_superClassDosMetaObject(std::move(superClassMetaObject)) : BaseDosQMetaObject(nullptr)
, m_metaObject(createMetaObject(className, signalDefinitions, slotDefinitions, propertyDefinitions)) , m_superClassDosMetaObject(std::move(superClassMetaObject))
, m_signalIndexByName(QHash<QString, int>())
, m_propertySlots(QHash<QString, QPair<int,int>>())
{ {
// We do the metaobject initialization here because
// we must wait for both maps to be initialized before filling them
m_metaObject.reset(createMetaObject(className, signalDefinitions, slotDefinitions, propertyDefinitions));
} }
QMetaObject *DosQMetaObject::createMetaObject(const QString &className, QMetaObject *DosQMetaObject::createMetaObject(const QString &className,
@ -142,11 +147,6 @@ QMetaMethod DosQMetaObject::writeSlot(const char *propertyName) const
return QMetaMethod(); return QMetaMethod();
} }
const QMetaObject *DosQMetaObject::metaObject() const
{
return m_metaObject;
}
const DosIQMetaObject *DosQMetaObject::superClassDosMetaObject() const const DosIQMetaObject *DosQMetaObject::superClassDosMetaObject() const
{ {
return m_superClassDosMetaObject.get(); return m_superClassDosMetaObject.get();