summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demos/declarative/flickr/common/qmldir10
-rw-r--r--src/declarative/fx/qfxanchors.cpp1
-rw-r--r--src/declarative/qml/qmlcompositetypedata_p.h3
-rw-r--r--src/declarative/qml/qmlcompositetypemanager.cpp137
-rw-r--r--src/declarative/qml/qmlcompositetypemanager_p.h1
-rw-r--r--src/declarative/qml/qmlengine.cpp65
-rw-r--r--src/declarative/qml/qmlengine_p.h2
-rw-r--r--src/declarative/util/qmlview.cpp12
-rw-r--r--src/declarative/util/qmlview.h1
-rw-r--r--tools/qmlviewer/qmlviewer.cpp93
-rw-r--r--tools/qmlviewer/qmlviewer.h4
11 files changed, 210 insertions, 119 deletions
diff --git a/demos/declarative/flickr/common/qmldir b/demos/declarative/flickr/common/qmldir
new file mode 100644
index 0000000..0c94f60
--- /dev/null
+++ b/demos/declarative/flickr/common/qmldir
@@ -0,0 +1,10 @@
+ImageDetails 0.0 ImageDetails.qml
+LikeOMeter 0.0 LikeOMeter.qml
+Loading 0.0 Loading.qml
+MediaButton 0.0 MediaButton.qml
+MediaLineEdit 0.0 MediaLineEdit.qml
+Progress 0.0 Progress.qml
+RssModel 0.0 RssModel.qml
+ScrollBar 0.0 ScrollBar.qml
+Slider 0.0 Slider.qml
+Star 0.0 Star.qml
diff --git a/src/declarative/fx/qfxanchors.cpp b/src/declarative/fx/qfxanchors.cpp
index 737aa63..8d4a8b8 100644
--- a/src/declarative/fx/qfxanchors.cpp
+++ b/src/declarative/fx/qfxanchors.cpp
@@ -181,7 +181,6 @@ void QFxAnchorsPrivate::centerInChanged()
void QFxAnchorsPrivate::clearItem(QFxItem *item)
{
- Q_Q(QFxAnchors);
if (!item)
return;
if (fill == item)
diff --git a/src/declarative/qml/qmlcompositetypedata_p.h b/src/declarative/qml/qmlcompositetypedata_p.h
index fa11137..ffcef4c 100644
--- a/src/declarative/qml/qmlcompositetypedata_p.h
+++ b/src/declarative/qml/qmlcompositetypedata_p.h
@@ -69,7 +69,8 @@ public:
Invalid,
Complete,
Error,
- Waiting
+ Waiting,
+ WaitingResources
};
Status status;
enum ErrorType {
diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp
index 7c22a5f..b335d31 100644
--- a/src/declarative/qml/qmlcompositetypemanager.cpp
+++ b/src/declarative/qml/qmlcompositetypemanager.cpp
@@ -352,18 +352,6 @@ void QmlCompositeTypeManager::setData(QmlCompositeTypeData *unit,
if (!unit->data.parse(data, url)) {
ok = false;
unit->errors << unit->data.errors();
- } else {
- foreach (QmlScriptParser::Import imp, unit->data.imports()) {
- int dot = imp.version.indexOf(QLatin1Char('.'));
- if (dot < 0) dot = imp.version.length();
- if (!QmlEnginePrivate::get(engine)->addToImport(&unit->imports, imp.uri, imp.qualifier, imp.version.left(dot).toInt(), imp.version.mid(dot+1).toInt(), imp.type)) {
- QmlError error;
- error.setUrl(url);
- error.setDescription(tr("Import %1 unavailable").arg(imp.uri));
- unit->errors << error;
- ok = false;
- }
- }
}
if (ok) {
@@ -400,25 +388,11 @@ void QmlCompositeTypeManager::doComplete(QmlCompositeTypeResource *resource)
void QmlCompositeTypeManager::checkComplete(QmlCompositeTypeData *unit)
{
- if (unit->status != QmlCompositeTypeData::Waiting)
+ if (unit->status != QmlCompositeTypeData::Waiting
+ && unit->status != QmlCompositeTypeData::WaitingResources)
return;
int waiting = 0;
- for (int ii = 0; ii < unit->types.count(); ++ii) {
- QmlCompositeTypeData *u = unit->types.at(ii).unit;
-
- if (!u)
- continue;
-
- if (u->status == QmlCompositeTypeData::Error) {
- unit->status = QmlCompositeTypeData::Error;
- unit->errors = u->errors;
- doComplete(unit);
- return;
- } else if (u->status == QmlCompositeTypeData::Waiting) {
- waiting++;
- }
- }
for (int ii = 0; ii < unit->resources.count(); ++ii) {
QmlCompositeTypeResource *r = unit->resources.at(ii);
@@ -429,8 +403,7 @@ void QmlCompositeTypeManager::checkComplete(QmlCompositeTypeData *unit)
unit->status = QmlCompositeTypeData::Error;
QmlError error;
error.setUrl(unit->imports.baseUrl());
- error.setDescription(QLatin1String("Resource ") + r->url +
- QLatin1String(" unavailable"));
+ error.setDescription(tr("Resource %1 unavailable").arg(r->url));
unit->errors << error;
doComplete(unit);
return;
@@ -439,18 +412,75 @@ void QmlCompositeTypeManager::checkComplete(QmlCompositeTypeData *unit)
}
}
+ if (waiting == 0) {
+ if (unit->status == QmlCompositeTypeData::WaitingResources) {
+ waiting += resolveTypes(unit);
+ if (unit->status != QmlCompositeTypeData::Error) {
+ if (waiting)
+ unit->status = QmlCompositeTypeData::Waiting;
+ } else {
+ return;
+ }
+ } else {
+ for (int ii = 0; ii < unit->types.count(); ++ii) {
+ QmlCompositeTypeData *u = unit->types.at(ii).unit;
+
+ if (!u)
+ continue;
+
+ if (u->status == QmlCompositeTypeData::Error) {
+ unit->status = QmlCompositeTypeData::Error;
+ unit->errors = u->errors;
+ doComplete(unit);
+ return;
+ } else if (u->status == QmlCompositeTypeData::Waiting) {
+ waiting++;
+ }
+ }
+ }
+ }
+
if (!waiting) {
unit->status = QmlCompositeTypeData::Complete;
doComplete(unit);
}
}
-// ### Check ref counting in here
-void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
+int QmlCompositeTypeManager::resolveTypes(QmlCompositeTypeData *unit)
{
- QList<QmlScriptParser::TypeReference*> types = unit->data.referencedTypes();
+ // not called until all resources are loaded (they include import URLs)
int waiting = 0;
+
+ foreach (QmlScriptParser::Import imp, unit->data.imports()) {
+ int dot = imp.version.indexOf(QLatin1Char('.'));
+ if (dot < 0) dot = imp.version.length();
+ QString qmldir;
+ if (imp.type == QmlScriptParser::Import::File && imp.qualifier.isEmpty()) {
+ QUrl importUrl = unit->imports.baseUrl().resolved(QUrl(imp.uri + QLatin1String("/qmldir")));
+ for (int ii = 0; ii < unit->resources.count(); ++ii) {
+ if (unit->resources.at(ii)->url == importUrl) {
+ qmldir = QString::fromUtf8(unit->resources.at(ii)->data);
+ break;
+ }
+ }
+ }
+ if (!QmlEnginePrivate::get(engine)->addToImport(
+ &unit->imports, qmldir, imp.uri, imp.qualifier, imp.version.left(dot).toInt(), imp.version.mid(dot+1).toInt(), imp.type))
+ {
+ QmlError error;
+ error.setUrl(unit->imports.baseUrl());
+ error.setDescription(tr("Import %1 unavailable").arg(imp.uri));
+ unit->status = QmlCompositeTypeData::Error;
+ unit->errorType = QmlCompositeTypeData::GeneralError;
+ unit->errors << error;
+ doComplete(unit);
+ return 0;
+ }
+ }
+
+ QList<QmlScriptParser::TypeReference*> types = unit->data.referencedTypes();
+
for (int ii = 0; ii < types.count(); ++ii) {
QmlScriptParser::TypeReference *parserRef = types.at(ii);
QByteArray typeName = parserRef->name.toUtf8();
@@ -478,7 +508,7 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
unit->errorType = QmlCompositeTypeData::GeneralError;
unit->errors << error;
doComplete(unit);
- return;
+ return 0;
}
if (ref.type) {
@@ -521,12 +551,13 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
if (urlUnit->errorType != QmlCompositeTypeData::AccessError)
unit->errors << urlUnit->errors;
doComplete(unit);
- return;
+ return 0;
case QmlCompositeTypeData::Complete:
break;
case QmlCompositeTypeData::Waiting:
+ case QmlCompositeTypeData::WaitingResources:
unit->addref();
ref.unit->dependants << unit;
waiting++;
@@ -535,8 +566,26 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
unit->types << ref;
}
+ return waiting;
+}
+
+// ### Check ref counting in here
+void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
+{
+ int waiting = 0;
QList<QUrl> resourceList = unit->data.referencedResources();
+
+ foreach (QmlScriptParser::Import imp, unit->data.imports()) {
+ if (imp.type == QmlScriptParser::Import::File && imp.qualifier.isEmpty()) {
+ QUrl importUrl = unit->imports.baseUrl().resolved(QUrl(imp.uri + QLatin1String("/qmldir")));
+ if (toLocalFileOrQrc(importUrl).isEmpty()) {
+ // Import requires remote qmldir
+ resourceList.prepend(importUrl);
+ }
+ }
+ }
+
for (int ii = 0; ii < resourceList.count(); ++ii) {
QUrl url = unit->imports.baseUrl().resolved(resourceList.at(ii));
@@ -558,8 +607,7 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
{
QmlError error;
error.setUrl(unit->imports.baseUrl());
- error.setDescription(QLatin1String("Resource ") + resource->url +
- QLatin1String(" unavailable"));
+ error.setDescription(tr("Resource %1 unavailable").arg(resource->url));
unit->errors << error;
}
doComplete(unit);
@@ -579,11 +627,18 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit)
unit->resources << resource;
}
- if (waiting) {
- unit->status = QmlCompositeTypeData::Waiting;
+ if (waiting == 0) {
+ waiting += resolveTypes(unit);
+ if (unit->status != QmlCompositeTypeData::Error) {
+ if (!waiting) {
+ unit->status = QmlCompositeTypeData::Complete;
+ doComplete(unit);
+ } else {
+ unit->status = QmlCompositeTypeData::Waiting;
+ }
+ }
} else {
- unit->status = QmlCompositeTypeData::Complete;
- doComplete(unit);
+ unit->status = QmlCompositeTypeData::WaitingResources;
}
}
diff --git a/src/declarative/qml/qmlcompositetypemanager_p.h b/src/declarative/qml/qmlcompositetypemanager_p.h
index 843a9cf..b6f84db 100644
--- a/src/declarative/qml/qmlcompositetypemanager_p.h
+++ b/src/declarative/qml/qmlcompositetypemanager_p.h
@@ -101,6 +101,7 @@ private:
void doComplete(QmlCompositeTypeData *);
void doComplete(QmlCompositeTypeResource *);
void checkComplete(QmlCompositeTypeData *);
+ int resolveTypes(QmlCompositeTypeData *);
QmlEngine *engine;
typedef QHash<QString, QmlCompositeTypeData *> Components;
diff --git a/src/declarative/qml/qmlengine.cpp b/src/declarative/qml/qmlengine.cpp
index 4f3b2ba..df865f1 100644
--- a/src/declarative/qml/qmlengine.cpp
+++ b/src/declarative/qml/qmlengine.cpp
@@ -1036,6 +1036,7 @@ struct QmlEnginePrivate::ImportedNamespace {
QList<int> minversions;
QList<bool> isLibrary;
QList<bool> isBuiltin;
+ QList<QString> qmlDirContent;
bool find(const QByteArray& type, int *vmajor, int *vminor, QmlType** type_return, QUrl* url_return) const
{
@@ -1057,36 +1058,39 @@ struct QmlEnginePrivate::ImportedNamespace {
}
} else {
QUrl url = QUrl(urls.at(i) + QLatin1String("/") + QString::fromUtf8(type) + QLatin1String(".qml"));
- if (vmaj || vmin) {
+ QString qmldircontent = qmlDirContent.at(i);
+ if (vmaj || vmin || !qmldircontent.isEmpty()) {
// Check version file - XXX cache these in QmlEngine!
- QFile qmldir(toLocalFileOrQrc(QUrl(urls.at(i)+QLatin1String("/qmldir"))));
- if (qmldir.open(QIODevice::ReadOnly)) {
- do {
- QByteArray lineba = qmldir.readLine();
- if (lineba.at(0) == '#')
- continue;
- int space1 = lineba.indexOf(' ');
- if (qstrncmp(lineba,type,space1)==0) {
- // eg. 1.2-5
- QString line = QString::fromUtf8(lineba);
- space1 = line.indexOf(QLatin1Char(' ')); // refind in Unicode
- int space2 = space1 >=0 ? line.indexOf(QLatin1Char(' '),space1+1) : -1;
- QString mapversions = line.mid(space1+1,space2<0?line.length()-space1-2:space2-space1-1);
- int dot = mapversions.indexOf(QLatin1Char('.'));
- int dash = mapversions.indexOf(QLatin1Char('-'));
- int mapvmaj = mapversions.left(dot).toInt();
- if (mapvmaj==vmaj) {
- int mapvmin_from = (dash <= 0 ? mapversions.mid(dot+1) : mapversions.mid(dot+1,dash-dot-1)).toInt();
- int mapvmin_to = dash <= 0 ? mapvmin_from : mapversions.mid(dash+1).toInt();
- if (vmin >= mapvmin_from && vmin <= mapvmin_to) {
- QStringRef mapfile = space2<0 ? QStringRef() : line.midRef(space2+1,line.length()-space2-2);
- if (url_return)
- *url_return = url.resolved(mapfile.toString());
- return true;
- }
+ if (qmldircontent.isEmpty()) {
+ QFile qmldir(toLocalFileOrQrc(QUrl(urls.at(i)+QLatin1String("/qmldir"))));
+ if (qmldir.open(QIODevice::ReadOnly)) {
+ qmldircontent = QString::fromUtf8(qmldir.readAll());
+ }
+ }
+ QString typespace = QString::fromUtf8(type)+QLatin1Char(' ');
+ QStringList lines = qmldircontent.split(QLatin1Char('\n'));
+ foreach (QString line, lines) {
+ if (line.isEmpty() || line.at(0) == QLatin1Char('#'))
+ continue;
+ if (line.startsWith(typespace)) {
+ // eg. 1.2-5
+ int space1 = line.indexOf(QLatin1Char(' '));
+ int space2 = space1 >=0 ? line.indexOf(QLatin1Char(' '),space1+1) : -1;
+ QString mapversions = line.mid(space1+1,space2<0?line.length()-space1-1:space2-space1-1);
+ int dot = mapversions.indexOf(QLatin1Char('.'));
+ int dash = mapversions.indexOf(QLatin1Char('-'));
+ int mapvmaj = mapversions.left(dot).toInt();
+ if (mapvmaj==vmaj) {
+ int mapvmin_from = (dash <= 0 ? mapversions.mid(dot+1) : mapversions.mid(dot+1,dash-dot-1)).toInt();
+ int mapvmin_to = dash <= 0 ? mapvmin_from : mapversions.mid(dash+1).toInt();
+ if (vmin >= mapvmin_from && vmin <= mapvmin_to) {
+ QStringRef mapfile = space2<0 ? QStringRef() : line.midRef(space2+1,line.length()-space2-1);
+ if (url_return)
+ *url_return = url.resolved(mapfile.toString());
+ return true;
}
}
- } while (!qmldir.atEnd());
+ }
}
} else {
// XXX search non-files too! (eg. zip files, see QT-524)
@@ -1115,7 +1119,7 @@ public:
delete s;
}
- bool add(const QUrl& base, const QString& uri, const QString& prefix, int vmaj, int vmin, QmlScriptParser::Import::Type importType, const QStringList& importPath)
+ bool add(const QUrl& base, const QString& qmldircontent, const QString& uri, const QString& prefix, int vmaj, int vmin, QmlScriptParser::Import::Type importType, const QStringList& importPath)
{
QmlEnginePrivate::ImportedNamespace *s;
if (prefix.isEmpty()) {
@@ -1151,6 +1155,7 @@ public:
s->minversions.prepend(vmin);
s->isLibrary.prepend(importType == QmlScriptParser::Import::Library);
s->isBuiltin.prepend(isbuiltin);
+ s->qmlDirContent.prepend(qmldircontent);
return true;
}
@@ -1375,9 +1380,9 @@ QString QmlEngine::offlineStoragePath() const
The base URL must already have been set with Import::setBaseUrl().
*/
-bool QmlEnginePrivate::addToImport(Imports* imports, const QString& uri, const QString& prefix, int vmaj, int vmin, QmlScriptParser::Import::Type importType) const
+bool QmlEnginePrivate::addToImport(Imports* imports, const QString& qmldircontent, const QString& uri, const QString& prefix, int vmaj, int vmin, QmlScriptParser::Import::Type importType) const
{
- bool ok = imports->d->add(imports->d->base,uri,prefix,vmaj,vmin,importType,fileImportPath);
+ bool ok = imports->d->add(imports->d->base,qmldircontent,uri,prefix,vmaj,vmin,importType,fileImportPath);
if (qmlImportTrace())
qDebug() << "QmlEngine::addToImport(" << imports << uri << prefix << vmaj << "." << vmin << (importType==QmlScriptParser::Import::Library? "Library" : "File") << ": " << ok;
return ok;
diff --git a/src/declarative/qml/qmlengine_p.h b/src/declarative/qml/qmlengine_p.h
index 29621c0..69b121e 100644
--- a/src/declarative/qml/qmlengine_p.h
+++ b/src/declarative/qml/qmlengine_p.h
@@ -227,7 +227,7 @@ public:
QmlImportsPrivate *d;
};
- bool addToImport(Imports*, const QString& uri, const QString& prefix, int vmaj, int vmin, QmlScriptParser::Import::Type importType) const;
+ bool addToImport(Imports*, const QString& qmlDirContent,const QString& uri, const QString& prefix, int vmaj, int vmin, QmlScriptParser::Import::Type importType) const;
bool resolveType(const Imports&, const QByteArray& type,
QmlType** type_return, QUrl* url_return,
int *version_major, int *version_minor,
diff --git a/src/declarative/util/qmlview.cpp b/src/declarative/util/qmlview.cpp
index 14f8279..f91d0db 100644
--- a/src/declarative/util/qmlview.cpp
+++ b/src/declarative/util/qmlview.cpp
@@ -360,6 +360,8 @@ void QmlView::continueExecute()
emit sceneResized(sz);
resize(sz);
}
+ updateGeometry();
+ emit initialSize(d->initialSize);
} else if (QWidget *wid = qobject_cast<QWidget *>(obj)) {
window()->setAttribute(Qt::WA_OpaquePaintEvent, false);
window()->setAttribute(Qt::WA_NoSystemBackground, false);
@@ -374,6 +376,7 @@ void QmlView::continueExecute()
}
layout()->addWidget(wid);
emit sceneResized(wid->size());
+ emit initialSize(wid->size());
}
}
}
@@ -382,6 +385,10 @@ void QmlView::continueExecute()
This signal is emitted when the view is resized to \a size.
*/
+/*! \fn void QmlView::initialSize(QSize size)
+ This signal is emitted when the initial size of the root item is known.
+ */
+
/*! \fn void QmlView::errors(const QList<QmlError> &errors)
This signal is emitted when the qml loaded contains \a errors.
*/
@@ -425,7 +432,10 @@ void QmlView::timerEvent(QTimerEvent* e)
automatically resize the root item.
Regardless of this property, the sizeHint of the view
- is the initial size of the root item.
+ is the initial size of the root item. Note though that
+ since QML may load dynamically, that size may change.
+
+ \sa initialSize()
*/
void QmlView::setContentResizable(bool on)
diff --git a/src/declarative/util/qmlview.h b/src/declarative/util/qmlview.h
index faf2564..822827a 100644
--- a/src/declarative/util/qmlview.h
+++ b/src/declarative/util/qmlview.h
@@ -88,6 +88,7 @@ public:
QSize sizeHint() const;
Q_SIGNALS:
+ void initialSize(QSize size);
void sceneResized(QSize size);
void errors(const QList<QmlError> &error);
diff --git a/tools/qmlviewer/qmlviewer.cpp b/tools/qmlviewer/qmlviewer.cpp
index 60fa13a..b115abb 100644
--- a/tools/qmlviewer/qmlviewer.cpp
+++ b/tools/qmlviewer/qmlviewer.cpp
@@ -310,6 +310,7 @@ QmlViewer::QmlViewer(QWidget *parent, Qt::WindowFlags flags)
canvas->setFocus();
QObject::connect(canvas, SIGNAL(sceneResized(QSize)), this, SLOT(sceneResized(QSize)));
+ QObject::connect(canvas, SIGNAL(initialSize(QSize)), this, SLOT(adjustSizeSlot()));
QObject::connect(canvas, SIGNAL(errors(QList<QmlError>)), this, SLOT(executeErrors()));
if (!(flags & Qt::FramelessWindowHint))
@@ -335,6 +336,11 @@ QmlViewer::QmlViewer(QWidget *parent, Qt::WindowFlags flags)
recordTimer.setRepeating(true);
}
+void QmlViewer::adjustSizeSlot()
+{
+ adjustSize();
+}
+
QMenuBar *QmlViewer::menuBar() const
{
if (!mb)
@@ -600,14 +606,17 @@ void QmlViewer::addLibraryPath(const QString& lib)
void QmlViewer::reload()
{
- openQml(currentFileName);
+ openQml(canvas->url());
}
void QmlViewer::open()
{
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open QML file"), currentFileName, tr("QML Files (*.qml)"));
- if (!fileName.isEmpty())
- openQml(fileName);
+ QString cur = canvas->url().toLocalFile();
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open QML file"), cur, tr("QML Files (*.qml)"));
+ if (!fileName.isEmpty()) {
+ QFileInfo fi(fileName);
+ openQml(QUrl::fromLocalFile(fi.absoluteFilePath()));
+ }
}
void QmlViewer::executeErrors()
@@ -615,55 +624,55 @@ void QmlViewer::executeErrors()
if (tester) tester->executefailure();
}
-void QmlViewer::openQml(const QString& fileName)
+void QmlViewer::openQml(const QUrl& url)
{
- setWindowTitle(tr("%1 - Qt Declarative UI Viewer").arg(fileName));
+ QString fileName = url.toLocalFile();
+ setWindowTitle(tr("%1 - Qt Declarative UI Viewer").arg(fileName.isEmpty() ? url.toString() : fileName));
if (!m_script.isEmpty())
tester = new QFxTester(m_script, m_scriptOptions, canvas);
canvas->reset();
- currentFileName = fileName;
- QUrl url(fileName);
- QFileInfo fi(fileName);
- if (fi.exists()) {
- if (fi.suffix().toLower() != QLatin1String("qml")) {
- qWarning() << "qmlviewer cannot open non-QML file" << fileName;
- return;
- }
+ if (!fileName.isEmpty()) {
+ QFileInfo fi(fileName);
+ if (fi.exists()) {
+ if (fi.suffix().toLower() != QLatin1String("qml")) {
+ qWarning() << "qmlviewer cannot open non-QML file" << fileName;
+ return;
+ }
- 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;
+ 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 (tester) tester->executefailure();
}
- if (tester) tester->executefailure();
- }
- if (dummyData) {
- qWarning() << "Loaded dummy data:" << dir.filePath(qml);
- qml.truncate(qml.length()-4);
- ctxt->setContextProperty(qml, dummyData);
- dummyData->setParent(this);
+ if (dummyData) {
+ qWarning() << "Loaded dummy data:" << dir.filePath(qml);
+ qml.truncate(qml.length()-4);
+ ctxt->setContextProperty(qml, dummyData);
+ dummyData->setParent(this);
+ }
}
+ } else {
+ qWarning() << "qmlviewer cannot find file:" << fileName;
+ return;
}
- } else {
- qWarning() << "qmlviewer cannot find file:" << fileName;
- return;
}
canvas->setUrl(url);
@@ -677,7 +686,7 @@ void QmlViewer::openQml(const QString& fileName)
canvas->updateGeometry();
if (mb)
mb->updateGeometry();
- resize(sizeHint());
+ adjustSize();
} else {
if (scaleSkin)
canvas->resize(canvas->sizeHint());
diff --git a/tools/qmlviewer/qmlviewer.h b/tools/qmlviewer/qmlviewer.h
index 7f9dca0..50495db 100644
--- a/tools/qmlviewer/qmlviewer.h
+++ b/tools/qmlviewer/qmlviewer.h
@@ -63,7 +63,7 @@ public:
public slots:
void sceneResized(QSize size);
- void openQml(const QString& fileName);
+ void openQml(const QUrl&);
void open();
void reload();
void takeSnapShot();
@@ -88,12 +88,12 @@ private slots:
void chooseRecordingOptions();
void pickRecordingFile();
void setScaleSkin();
+ void adjustSizeSlot();
private:
void setupProxy();
QString getVideoFileName();
- QString currentFileName;
PreviewDeviceSkin *skin;
QSize skinscreensize;
QmlView *canvas;