summaryrefslogtreecommitdiffstats
path: root/src/declarative/util
diff options
context:
space:
mode:
authorAaron Kennedy <aaron.kennedy@nokia.com>2009-05-05 01:17:15 (GMT)
committerAaron Kennedy <aaron.kennedy@nokia.com>2009-05-05 01:17:15 (GMT)
commitc7a0cae7deb6e31c5b2e82c9a63ebe0a167fed09 (patch)
treeb57be3fff131de378258a4017dddda361c8799d2 /src/declarative/util
parent1fbb8472ccb3fe7c1c92e960e37f31b7077f999f (diff)
downloadQt-c7a0cae7deb6e31c5b2e82c9a63ebe0a167fed09.zip
Qt-c7a0cae7deb6e31c5b2e82c9a63ebe0a167fed09.tar.gz
Qt-c7a0cae7deb6e31c5b2e82c9a63ebe0a167fed09.tar.bz2
Improve error handling consistency
Diffstat (limited to 'src/declarative/util')
-rw-r--r--src/declarative/util/qfxview.cpp79
-rw-r--r--src/declarative/util/qfxview.h3
2 files changed, 78 insertions, 4 deletions
diff --git a/src/declarative/util/qfxview.cpp b/src/declarative/util/qfxview.cpp
index cac73a0..f71b87e 100644
--- a/src/declarative/util/qfxview.cpp
+++ b/src/declarative/util/qfxview.cpp
@@ -233,8 +233,6 @@ QmlContext* QFxView::rootContext()
*/
void QFxView::execute()
{
- rootContext()->activate();
-
if (d->qml.isEmpty()) {
d->component = new QmlComponent(&d->engine, d->source, this);
} else {
@@ -249,6 +247,45 @@ void QFxView::execute()
}
/*!
+ \internal
+*/
+void QFxView::printErrorLine(const QmlError &error)
+{
+ QUrl url = error.url();
+ if (error.line() > 0 && error.column() > 0 &&
+ url.scheme() == QLatin1String("file")) {
+ QString file = url.toLocalFile();
+ QFile f(file);
+ if (f.open(QIODevice::ReadOnly)) {
+ QByteArray data = f.readAll();
+ QTextStream stream(data, QIODevice::ReadOnly);
+ const QString code = stream.readAll();
+ const QStringList lines = code.split(QLatin1Char('\n'));
+
+ if (lines.count() >= error.line()) {
+ const QString &line = lines.at(error.line() - 1);
+ qWarning() << qPrintable(line);
+
+ int column = qMax(0, error.column() - 1);
+ column = qMin(column, line.length());
+
+ QByteArray ind;
+ ind.reserve(column);
+ for (int i = 0; i < column; ++i) {
+ const QChar ch = line.at(i);
+ if (ch.isSpace())
+ ind.append(ch.unicode());
+ else
+ ind.append(' ');
+ }
+ ind.append('^');
+ qWarning() << ind.constData();
+ }
+ }
+ }
+}
+
+/*!
\internal
*/
void QFxView::continueExecute()
@@ -260,8 +297,26 @@ void QFxView::continueExecute()
return;
}
+ if(d->component->isError()) {
+ QList<QmlError> errors = d->component->errors();
+ foreach (const QmlError &error, errors) {
+ qWarning() << error;
+ }
+
+ return;
+ }
+
QObject *obj = d->component->create();
- rootContext()->deactivate();
+
+ if(d->component->isError()) {
+ QList<QmlError> errors = d->component->errors();
+ foreach (const QmlError &error, errors) {
+ qWarning() << error;
+ }
+
+ return;
+ }
+
if (obj) {
if (QFxItem *item = qobject_cast<QFxItem *>(obj)) {
item->QSimpleCanvasItem::setParent(QSimpleCanvas::root());
@@ -330,7 +385,25 @@ QFxItem* QFxView::addItem(const QString &qml, QFxItem* parent)
return 0;
QmlComponent component(&d->engine, qml.toUtf8(), QUrl());
+ if(d->component->isError()) {
+ QList<QmlError> errors = d->component->errors();
+ foreach (const QmlError &error, errors) {
+ qWarning() << error;
+ }
+
+ return 0;
+ }
+
QObject *obj = component.create();
+ if(d->component->isError()) {
+ QList<QmlError> errors = d->component->errors();
+ foreach (const QmlError &error, errors) {
+ qWarning() << error;
+ }
+
+ return 0;
+ }
+
if (obj){
QFxItem *item = static_cast<QFxItem *>(obj);
if (!parent)
diff --git a/src/declarative/util/qfxview.h b/src/declarative/util/qfxview.h
index d2cacf4..f575f27 100644
--- a/src/declarative/util/qfxview.h
+++ b/src/declarative/util/qfxview.h
@@ -57,7 +57,7 @@ QT_MODULE(Declarative)
class QFxItem;
class QmlEngine;
class QmlContext;
-class Canvas;
+class QmlError;
class QFxViewPrivate;
class Q_DECLARATIVE_EXPORT QFxView : public QSimpleCanvas
@@ -84,6 +84,7 @@ public:
void dumpRoot();
+ static void printErrorLine(const QmlError &);
Q_SIGNALS:
void sceneResized(QSize size);