summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/activeqt/control/qaxfactory.h31
-rw-r--r--src/activeqt/doc/src/qtaxserver.qdoc8
2 files changed, 39 insertions, 0 deletions
diff --git a/src/activeqt/control/qaxfactory.h b/src/activeqt/control/qaxfactory.h
index ac7a9e9..f85f30a 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;
@@ -199,6 +200,36 @@ public:
return 0;
return new T(0);
}
+
+ 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) \
diff --git a/src/activeqt/doc/src/qtaxserver.qdoc b/src/activeqt/doc/src/qtaxserver.qdoc
index 97ddcf3..1aed797 100644
--- a/src/activeqt/doc/src/qtaxserver.qdoc
+++ b/src/activeqt/doc/src/qtaxserver.qdoc
@@ -812,6 +812,14 @@
\li The classname used in the generated IDL and in the registry. This is
esp. useful for C++ classes that live in a namespace - by default,
ActiveQt just removes the "::" to make the IDL compile.
+ \row
+ \li Implemented Categories
+ \li List of comma-separated Category ID (CATID) UUIDs. Generic mechanism
+ for specifying additional container capabilities, in addition to
+ "control", "insertable" etc. Typical CATIDs include
+ \c CATID_InternetAware ("{0DE86A58-2BAA-11CF-A229-00AA003D7352}"),
+ \c CATID_SafeForScripting ("{7DD95801-9882-11CF-9FA9-00AA006C42C4}") as
+ well as user-defined CATID values.
\endtable
Note that both keys and values are case sensitive.