diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index a72fcb1387c..5249c3ac67c 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -159,6 +160,8 @@ void FormEditorView::setupFormEditorItemTree(const QmlItemNode &qmlItemNode) if (QmlItemNode::isValidQmlItemNode(nextNode) && nextNode.modelNode().nodeSourceType() == ModelNode::NodeWithoutSource) setupFormEditorItemTree(nextNode.toQmlItemNode()); } + + checkRootModelNode(); } static void deleteWithoutChildren(const QList &items) @@ -296,7 +299,11 @@ void FormEditorView::rootNodeTypeChanged(const QString &/*type*/, int /*majorVer if (newItemNode.isValid()) //only setup QmlItems setupFormEditorItemTree(newItemNode); + + m_currentTool->setItems(scene()->itemsForQmlItemNodes(toQmlItemNodeList(selectedModelNodes()))); + + checkRootModelNode(); } void FormEditorView::propertiesAboutToBeRemoved(const QList& propertyList) @@ -464,6 +471,8 @@ void FormEditorView::documentMessagesChanged(const QList &error m_formEditorWidget->showErrorMessageBox(errors); else m_formEditorWidget->hideErrorMessageBox(); + + checkRootModelNode(); } void FormEditorView::customNotification(const AbstractView * /*view*/, const QString &identifier, const QList &/*nodeList*/, const QList &/*data*/) @@ -796,6 +805,8 @@ void FormEditorView::setupFormEditorWidget() if (!rewriterView()->warnings().isEmpty()) m_formEditorWidget->showWarningMessageBox(rewriterView()->warnings()); + + checkRootModelNode(); } QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode) @@ -884,6 +895,21 @@ void FormEditorView::addOrRemoveFormEditorItem(const ModelNode &node) } } +void FormEditorView::checkRootModelNode() +{ + if (m_formEditorWidget->errorMessageBoxIsVisible()) + return; + + QTC_ASSERT(rootModelNode().isValid(), return); + + if (!rootModelNode().metaInfo().isGraphicalItem()) + m_formEditorWidget->showErrorMessageBox( + {DocumentMessage(tr("%1 is not supported as the root element by Form Editor.") + .arg(rootModelNode().simplifiedTypeName()))}); + else + m_formEditorWidget->hideErrorMessageBox(); +} + void FormEditorView::reset() { QTimer::singleShot(200, this, &FormEditorView::delayedReset); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index ca3fb72bb0a..5859012d3eb 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -149,6 +149,7 @@ private: void temporaryBlockView(int duration = 1000); void resetNodeInstanceView(); void addOrRemoveFormEditorItem(const ModelNode &node); + void checkRootModelNode(); QPointer m_formEditorWidget; QPointer m_scene; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index 31aa8a4de69..9f6a88c5962 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -549,6 +549,11 @@ FormEditorGraphicsView *FormEditorWidget::graphicsView() const return m_graphicsView; } +bool FormEditorWidget::errorMessageBoxIsVisible() const +{ + return m_documentErrorWidget && m_documentErrorWidget->isVisible(); +} + DocumentWarningWidget *FormEditorWidget::errorWidget() { if (m_documentErrorWidget.isNull()) { diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h index 64b1e1a4eeb..11dcc87769e 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h @@ -89,6 +89,8 @@ public: FormEditorGraphicsView *graphicsView() const; + bool errorMessageBoxIsVisible() const; + protected: QActionGroup *toolActionGroup() const; DocumentWarningWidget *errorWidget();