diff options
Diffstat (limited to 'src/activeqt/control/qaxfactory.h')
-rw-r--r-- | src/activeqt/control/qaxfactory.h | 73 |
1 files changed, 52 insertions, 21 deletions
diff --git a/src/activeqt/control/qaxfactory.h b/src/activeqt/control/qaxfactory.h index bda81f0..23989e2 100644 --- a/src/activeqt/control/qaxfactory.h +++ b/src/activeqt/control/qaxfactory.h @@ -46,6 +46,7 @@ #include <QtCore/qfactoryinterface.h> #include <QtCore/qmetaobject.h> #include <QtCore/qstringlist.h> +#include <QtCore/qsettings.h> struct IUnknown; struct IDispatch; @@ -138,37 +139,37 @@ inline bool QAxFactory::stopServer() public: \ QAxDefaultFactory(const QUuid &app, const QUuid &lib) \ : QAxFactory(app, lib), className(QLatin1String(#Class)) {} \ - QStringList featureList() const \ + QStringList featureList() const override \ { \ QStringList list; \ list << className; \ return list; \ } \ - const QMetaObject *metaObject(const QString &key) const \ + const QMetaObject *metaObject(const QString &key) const override \ { \ if (key == className) \ return &Class::staticMetaObject; \ return Q_NULLPTR; \ } \ - QObject *createObject(const QString &key) \ + QObject *createObject(const QString &key) override \ { \ if (key == className) \ return new Class(Q_NULLPTR); \ return Q_NULLPTR; \ } \ - QUuid classID(const QString &key) const \ + QUuid classID(const QString &key) const override \ { \ if (key == className) \ return QUuid(IIDClass); \ return QUuid(); \ } \ - QUuid interfaceID(const QString &key) const \ + QUuid interfaceID(const QString &key) const override \ { \ if (key == className) \ return QUuid(IIDInterface); \ return QUuid(); \ } \ - QUuid eventsID(const QString &key) const \ + QUuid eventsID(const QString &key) const override \ { \ if (key == className) \ return QUuid(IIDEvents); \ @@ -188,9 +189,9 @@ public: : QAxFactory(libId, appId) {} - const QMetaObject *metaObject(const QString &) const { return &T::staticMetaObject; } - QStringList featureList() const { return QStringList(QLatin1String(T::staticMetaObject.className())); } - QObject *createObject(const QString &key) + const QMetaObject *metaObject(const QString &) const Q_DECL_OVERRIDE { return &T::staticMetaObject; } + QStringList featureList() const Q_DECL_OVERRIDE { return QStringList(QLatin1String(T::staticMetaObject.className())); } + QObject *createObject(const QString &key) Q_DECL_OVERRIDE { const QMetaObject &mo = T::staticMetaObject; if (key != QLatin1String(mo.className())) @@ -199,6 +200,36 @@ public: return Q_NULLPTR; return new T(Q_NULLPTR); } + + void registerClass(const QString &key, QSettings *settings) const Q_DECL_OVERRIDE + { + const QStringList categories = getImplementedCategories(); + + for (QStringList::const_iterator it = categories.begin(), end = categories.end(); it != end; ++it) { + settings->setValue(QLatin1String("/CLSID/") + classID(key).toString() + + QLatin1String("/Implemented Categories/") + *it + QLatin1String("/."), + QString()); + } + } + + void unregisterClass(const QString &key, QSettings *settings) const Q_DECL_OVERRIDE + { + const QStringList categories = getImplementedCategories(); + + for (QStringList::const_iterator it = categories.begin(), end = categories.end(); it != end; ++it) { + settings->remove(QLatin1String("/CLSID/") + classID(key).toString() + + QLatin1String("/Implemented Categories/") + *it + QLatin1String("/.")); + } + } + +private: + /*! Retrieve list of comma-separated "Implemented Categories" Q_CLASSINFO UUIDs from T. */ + static QStringList getImplementedCategories() + { + const QMetaObject &mo = T::staticMetaObject; + QString catids = mo.classInfo(mo.indexOfClassInfo("Implemented Categories")).value(); + return catids.split(QLatin1Char(',')); + } }; #define QAXFACTORY_BEGIN(IDTypeLib, IDApp) \ @@ -238,47 +269,47 @@ public: #define QAXFACTORY_END() \ } \ - ~QAxFactoryList() { qDeleteAll(factories); } \ - QStringList featureList() const { return factoryKeys; } \ - const QMetaObject *metaObject(const QString&key) const { \ + ~QAxFactoryList() Q_DECL_OVERRIDE { qDeleteAll(factories); } \ + QStringList featureList() const Q_DECL_OVERRIDE { return factoryKeys; } \ + const QMetaObject *metaObject(const QString&key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories[key]; \ return f ? f->metaObject(key) : Q_NULLPTR; \ } \ - QObject *createObject(const QString &key) { \ + QObject *createObject(const QString &key) Q_DECL_OVERRIDE { \ if (!creatable.value(key)) \ return Q_NULLPTR; \ QAxFactory *f = factories[key]; \ return f ? f->createObject(key) : Q_NULLPTR; \ } \ - QUuid classID(const QString &key) { \ + QUuid classID(const QString &key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ return f ? f->classID(key) : QUuid(); \ } \ - QUuid interfaceID(const QString &key) { \ + QUuid interfaceID(const QString &key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ return f ? f->interfaceID(key) : QUuid(); \ } \ - QUuid eventsID(const QString &key) { \ + QUuid eventsID(const QString &key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ return f ? f->eventsID(key) : QUuid(); \ } \ - void registerClass(const QString &key, QSettings *s) const { \ + void registerClass(const QString &key, QSettings *s) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ if (f) f->registerClass(key, s); \ } \ - void unregisterClass(const QString &key, QSettings *s) const { \ + void unregisterClass(const QString &key, QSettings *s) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ if (f) f->unregisterClass(key, s); \ } \ - QString exposeToSuperClass(const QString &key) const { \ + QString exposeToSuperClass(const QString &key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ return f ? f->exposeToSuperClass(key) : QString(); \ } \ - bool stayTopLevel(const QString &key) const { \ + bool stayTopLevel(const QString &key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ return f ? f->stayTopLevel(key) : false; \ } \ - bool hasStockEvents(const QString &key) const { \ + bool hasStockEvents(const QString &key) const Q_DECL_OVERRIDE { \ QAxFactory *f = factories.value(key); \ return f ? f->hasStockEvents(key) : false; \ } \ |