diff options
author | Martin Kampas <martin.kampas@jolla.com> | 2016-11-17 12:04:22 +0100 |
---|---|---|
committer | Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com> | 2016-11-23 07:18:01 +0000 |
commit | cba633902cbb7d2557d924bd1692c03599084031 (patch) | |
tree | 1b5135dcf7d06acd12a967f6fa184f4cdbd0ebca | |
parent | 9e26619a7ee7117ccf7c15f226e0637d70140306 (diff) |
LiveNodeEngine: Do not try to load files of unsuported type
Change-Id: I4098b62076b0c50334e51a3f17eb6ac759fe17d2
Reviewed-by: Juergen Bocklage-Ryannel <juergen.bocklage-ryannel@pelagicore.com>
-rw-r--r-- | src/livenodeengine.cpp | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/src/livenodeengine.cpp b/src/livenodeengine.cpp index e379340..44f6f00 100644 --- a/src/livenodeengine.cpp +++ b/src/livenodeengine.cpp @@ -441,8 +441,32 @@ void LiveNodeEngine::reloadDocument() const QUrl originalUrl = QUrl::fromLocalFile(m_activeFile.absoluteFilePathIn(m_workspace)); const QUrl url = queryDocumentViewer(originalUrl); - QScopedPointer<QQmlComponent> component(new QQmlComponent(m_qmlEngine, url)); - m_object = component->create(); + auto showErrorScreen = [this] { + Q_ASSERT(m_fallbackView); + m_fallbackView->setResizeMode(QQuickView::SizeRootObjectToView); + m_fallbackView->setSource(errorScreenUrl()); + m_activeWindow = m_fallbackView; + }; + + auto logError = [this, url](const QString &description) { + QQmlError error; + error.setObject(m_object); + error.setUrl(url); + error.setLine(0); + error.setColumn(0); + error.setDescription(description); + emit logErrors(QList<QQmlError>() << error); + }; + + QScopedPointer<QQmlComponent> component(new QQmlComponent(m_qmlEngine)); + if (url.path().endsWith(QLatin1String(".qml"), Qt::CaseInsensitive)) { + component->loadUrl(url); + m_object = component->create(); + } else if (url == originalUrl) { + logError(tr("LiveNodeEngine: Cannot display this file type")); + } else { + logError(tr("LiveNodeEngine: Internal error: Cannot display this file type")); + } if (!component->isReady()) { if (component->isLoading()) { @@ -452,11 +476,8 @@ void LiveNodeEngine::reloadDocument() } else { emit logErrors(component->errors()); delete m_object; - if (m_fallbackView) { - m_fallbackView->setResizeMode(QQuickView::SizeRootObjectToView); - m_fallbackView->setSource(errorScreenUrl()); - m_activeWindow = m_fallbackView; - } + if (m_fallbackView) + showErrorScreen(); } } else if (QQuickWindow *window = qobject_cast<QQuickWindow *>(m_object)) { // TODO (why) is this needed? @@ -473,29 +494,14 @@ void LiveNodeEngine::reloadDocument() m_fallbackView->setContent(url, component.take(), m_object); m_activeWindow = m_fallbackView; } else { - QQmlError error; - error.setObject(m_object); - error.setUrl(url); - error.setLine(0); - error.setColumn(0); - error.setDescription(tr("LiveNodeEngine: Cannot display this component: " - "Root object is not a QQuickWindow and no LiveNodeEngine::fallbackView set.")); - emit logErrors(QList<QQmlError>() << error); + logError(tr("LiveNodeEngine: Cannot display this component: " + "Root object is not a QQuickWindow and no LiveNodeEngine::fallbackView set.")); } } else { - QQmlError error; - error.setObject(m_object); - error.setUrl(url); - error.setLine(0); - error.setColumn(0); - error.setDescription(tr("LiveNodeEngine: Cannot display this component: " - "Root object is not a QQuickWindow nor a QQuickItem.")); - emit logErrors(QList<QQmlError>() << error); - if (m_fallbackView) { - m_fallbackView->setResizeMode(QQuickView::SizeRootObjectToView); - m_fallbackView->setSource(errorScreenUrl()); - m_activeWindow = m_fallbackView; - } + logError(tr("LiveNodeEngine: Cannot display this component: " + "Root object is not a QQuickWindow nor a QQuickItem.")); + if (m_fallbackView) + showErrorScreen(); } if (m_activeWindow) { |