summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFredrik Orderud <forderud@gmail.com>2015-08-25 15:13:01 +0200
committerFredrik Orderud <forderud@gmail.com>2015-09-02 06:34:09 +0000
commit5d1eb1b40f1dab34d28843d93a030b4a2d499eb8 (patch)
tree13a924c9f805bc6164fbc4f13c348edfdae86c05 /src
parent7b25c625ea50a58edb1d6d5c79ea6dcb00cfc12b (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.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.