diff options
-rw-r--r-- | src/activeqt/control/qaxfactory.h | 31 | ||||
-rw-r--r-- | src/activeqt/doc/src/qtaxserver.qdoc | 8 |
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. |