diff options
author | Fredrik Orderud <forderud@gmail.com> | 2015-08-25 15:13:01 +0200 |
---|---|---|
committer | Fredrik Orderud <forderud@gmail.com> | 2015-09-02 06:34:09 +0000 |
commit | 5d1eb1b40f1dab34d28843d93a030b4a2d499eb8 (patch) | |
tree | 13a924c9f805bc6164fbc4f13c348edfdae86c05 /src | |
parent | 7b25c625ea50a58edb1d6d5c79ea6dcb00cfc12b (diff) |
Add support for "Implemented Categories" in QAxClass.
Generic mechanism for specifying additional container capabilities, in
addition to "control", "insertable" etc. Added documentation to the
table of supported Q_CLASSINFO macro attributes.
Reference: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682451.aspx
Task-number: QTBUG-47918
Change-Id: I21bed3119db3e9899b670c6be779f259a33b78d0
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Diffstat (limited to 'src')
-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. |