summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorRoberto Raggi <roberto.raggi@nokia.com>2010-02-25 10:41:42 (GMT)
committerRoberto Raggi <roberto.raggi@nokia.com>2010-02-25 10:47:05 (GMT)
commit8df48c2c402873b55c037fb150594c6529e8f146 (patch)
tree7ba8bccacfcd924163ae88573e629beefe8f4425 /src/declarative
parentf5bb807d6938fbd39ea1f99ed45c817d538e4287 (diff)
downloadQt-8df48c2c402873b55c037fb150594c6529e8f146.zip
Qt-8df48c2c402873b55c037fb150594c6529e8f146.tar.gz
Qt-8df48c2c402873b55c037fb150594c6529e8f146.tar.bz2
Introduced QDeclarativeExtensionPlugin::registerTypes(uri).
Now, you have to reimplement registerTypes(uri) to expose native QML types, and initializeEngine(engine,uri) to add instances to the QML engine's root context.
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp12
-rw-r--r--src/declarative/qml/qdeclarativeengine_p.h1
-rw-r--r--src/declarative/qml/qdeclarativeextensioninterface.h3
-rw-r--r--src/declarative/qml/qdeclarativeextensionplugin.cpp16
-rw-r--r--src/declarative/qml/qdeclarativeextensionplugin.h3
5 files changed, 29 insertions, 6 deletions
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index 8abea4e..b4850a9 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -1624,7 +1624,16 @@ bool QDeclarativeEngine::importExtension(const QString &fileName, const QString
QPluginLoader loader(fileName);
if (QDeclarativeExtensionInterface *iface = qobject_cast<QDeclarativeExtensionInterface *>(loader.instance())) {
- iface->initialize(this, uri.toUtf8().constData());
+ const QByteArray bytes = uri.toUtf8();
+ const char *moduleId = bytes.constData();
+
+ QDeclarativeEnginePrivate *d = QDeclarativeEnginePrivate::get(this);
+ if (! d->importedPlugins.contains(fileName)) {
+ d->importedPlugins.insert(fileName);
+ iface->registerTypes(moduleId);
+ }
+
+ iface->initializeEngine(this, moduleId);
return true;
}
@@ -1669,7 +1678,6 @@ QString QDeclarativeEnginePrivate::resolvePlugin(const QDir &dir, const QString
const QStringList &suffixes,
const QString &prefix)
{
- qWarning() << baseName;
foreach (const QString &suffix, suffixes) {
QString pluginFileName = prefix;
diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h
index 2364315..6ef2f93 100644
--- a/src/declarative/qml/qdeclarativeengine_p.h
+++ b/src/declarative/qml/qdeclarativeengine_p.h
@@ -267,6 +267,7 @@ public:
QStringList environmentImportPath;
+ QSet<QString> importedPlugins;
QString resolvePlugin(const QDir &dir, const QString &baseName,
const QStringList &suffixes,
diff --git a/src/declarative/qml/qdeclarativeextensioninterface.h b/src/declarative/qml/qdeclarativeextensioninterface.h
index a8ae064..0fabd6d 100644
--- a/src/declarative/qml/qdeclarativeextensioninterface.h
+++ b/src/declarative/qml/qdeclarativeextensioninterface.h
@@ -55,7 +55,8 @@ class QDeclarativeEngine;
struct Q_DECLARATIVE_EXPORT QDeclarativeExtensionInterface
{
virtual ~QDeclarativeExtensionInterface() {}
- virtual void initialize(QDeclarativeEngine *engine, const char *uri) = 0;
+ virtual void registerTypes(const char *uri) = 0;
+ virtual void initializeEngine(QDeclarativeEngine *engine, const char *uri) = 0;
};
Q_DECLARE_INTERFACE(QDeclarativeExtensionInterface, "com.trolltech.Qt.QDeclarativeExtensionInterface/1.0")
diff --git a/src/declarative/qml/qdeclarativeextensionplugin.cpp b/src/declarative/qml/qdeclarativeextensionplugin.cpp
index 6af3a6d..3d44d63 100644
--- a/src/declarative/qml/qdeclarativeextensionplugin.cpp
+++ b/src/declarative/qml/qdeclarativeextensionplugin.cpp
@@ -63,9 +63,9 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \fn void QDeclarativeExtensionPlugin::initialize(QDeclarativeEngine *engine)
+ \fn void QDeclarativeExtensionPlugin::registerTypes(const char *uri)
- Initializes the extension specified in the given \a engine.
+ Registers the QML types in the given \a uri.
*/
/*!
@@ -84,4 +84,16 @@ QDeclarativeExtensionPlugin::~QDeclarativeExtensionPlugin()
{
}
+/*!
+ \fn void QDeclarativeExtensionPlugin::initializeEngine(QDeclarativeEngine *engine, const char *uri)
+
+ Initializes the extension specified in the given \a engine.
+*/
+
+void QDeclarativeExtensionPlugin::initializeEngine(QDeclarativeEngine *engine, const char *uri)
+{
+ Q_UNUSED(engine);
+ Q_UNUSED(uri);
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeextensionplugin.h b/src/declarative/qml/qdeclarativeextensionplugin.h
index 79df52b..c2ad798 100644
--- a/src/declarative/qml/qdeclarativeextensionplugin.h
+++ b/src/declarative/qml/qdeclarativeextensionplugin.h
@@ -62,7 +62,8 @@ public:
explicit QDeclarativeExtensionPlugin(QObject *parent = 0);
~QDeclarativeExtensionPlugin();
- virtual void initialize(QDeclarativeEngine *engine, const char *uri) = 0;
+ virtual void registerTypes(const char *uri) = 0;
+ virtual void initializeEngine(QDeclarativeEngine *engine, const char *uri);
};
QT_END_NAMESPACE