summaryrefslogtreecommitdiffstats
path: root/src/activeqt/control/qaxfactory.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/activeqt/control/qaxfactory.h')
-rw-r--r--src/activeqt/control/qaxfactory.h73
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; \
} \