diff options
author | Martin Jones <martin.jones@nokia.com> | 2009-07-02 04:53:00 (GMT) |
---|---|---|
committer | Martin Jones <martin.jones@nokia.com> | 2009-07-02 04:53:00 (GMT) |
commit | 740e84dea8a0fb323f6fa4775b6b750ff98a3365 (patch) | |
tree | 8272e66091017370486f8cf702e46dc96d933477 /examples | |
parent | 9fdcef95dfb369ef490d5be8e4621485d11cddda (diff) | |
download | Qt-740e84dea8a0fb323f6fa4775b6b750ff98a3365.zip Qt-740e84dea8a0fb323f6fa4775b6b750ff98a3365.tar.gz Qt-740e84dea8a0fb323f6fa4775b6b750ff98a3365.tar.bz2 |
Make loader handle dummy data and get source URL right.
Diffstat (limited to 'examples')
-rw-r--r-- | examples/declarative/loader/Browser.qml | 2 | ||||
-rw-r--r-- | examples/declarative/loader/main.cpp | 59 |
2 files changed, 57 insertions, 4 deletions
diff --git a/examples/declarative/loader/Browser.qml b/examples/declarative/loader/Browser.qml index af5538e..640ea0c 100644 --- a/examples/declarative/loader/Browser.qml +++ b/examples/declarative/loader/Browser.qml @@ -21,7 +21,7 @@ Rect { if (folders.isFolder(index)) { folders.folder = filePath; } else { - Shell.qml = filePath; + qmlLauncher.launch(filePath); } } } diff --git a/examples/declarative/loader/main.cpp b/examples/declarative/loader/main.cpp index 31bff07..23125ce 100644 --- a/examples/declarative/loader/main.cpp +++ b/examples/declarative/loader/main.cpp @@ -1,18 +1,71 @@ #include <QApplication> #include <QUrl> +#include <QFileInfo> +#include <QDir> +#include <QmlContext> +#include <QmlComponent> #include <qfxview.h> +QFxView *canvas = 0; + +class QmlLauncher : public QObject +{ + Q_OBJECT +public: + QmlLauncher() {} + + Q_INVOKABLE void launch(const QString &fileName) + { + QUrl url(fileName); + QFileInfo fi(fileName); + if (fi.exists()) { + url = QUrl::fromLocalFile(fi.absoluteFilePath()); + QmlContext *ctxt = canvas->rootContext(); + QDir dir(fi.path()+"/dummydata", "*.qml"); + QStringList list = dir.entryList(); + for (int i = 0; i < list.size(); ++i) { + QString qml = list.at(i); + QFile f(dir.filePath(qml)); + f.open(QIODevice::ReadOnly); + QByteArray data = f.readAll(); + QmlComponent comp(canvas->engine()); + comp.setData(data, QUrl()); + QObject *dummyData = comp.create(); + + if(comp.isError()) { + QList<QmlError> errors = comp.errors(); + foreach (const QmlError &error, errors) { + qWarning() << error; + } + } + + if (dummyData) { + qml.truncate(qml.length()-4); + ctxt->setContextProperty(qml, dummyData); + dummyData->setParent(this); + } + } + } + + canvas->setUrl(fileName); + canvas->execute(); + } +}; + int main(int argc, char *argv[]) { QApplication app(argc, argv); - QFxView *canvas = new QFxView; + QmlLauncher *launcher = new QmlLauncher; + + canvas = new QFxView; + QmlContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("qmlLauncher", launcher); canvas->setUrl(QUrl("qrc:/loader.qml")); canvas->execute(); - canvas->resize(210,240); canvas->show(); return app.exec(); } - +#include "main.moc" |