From 51a132eb921ef1d6564bef4de558d9a17b63d7e4 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 30 Sep 2020 16:49:14 +0200 Subject: [PATCH] QmlDesigner Disable FormEditorView when not visible Change-Id: I4bf6f3747cfd11fa31bdd386efc11fc27dbfe45c Reviewed-by: Miikka Heikkinen Reviewed-by: Thomas Hartmann --- .../components/formeditor/formeditorview.cpp | 58 ++++++++++++------- .../components/formeditor/formeditorview.h | 4 ++ .../formeditor/formeditorwidget.cpp | 21 +++++++ .../components/formeditor/formeditorwidget.h | 2 + 4 files changed, 64 insertions(+), 21 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp index 247c564dd48..6fb05cda0c7 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp @@ -77,25 +77,13 @@ FormEditorView::~FormEditorView() void FormEditorView::modelAttached(Model *model) { - Q_ASSERT(model); - temporaryBlockView(); - AbstractView::modelAttached(model); - Q_ASSERT(m_scene->formLayerItem()); + if (!isEnabled()) + return; - if (QmlItemNode::isValidQmlItemNode(rootModelNode())) - setupFormEditorItemTree(rootModelNode()); - - m_formEditorWidget->updateActions(); - - if (!rewriterView()->errors().isEmpty()) - m_formEditorWidget->showErrorMessageBox(rewriterView()->errors()); - else - m_formEditorWidget->hideErrorMessageBox(); - - if (!rewriterView()->warnings().isEmpty()) - m_formEditorWidget->showWarningMessageBox(rewriterView()->warnings()); + temporaryBlockView(); + setupFormEditorWidget(); } @@ -256,9 +244,9 @@ void FormEditorView::nodeCreated(const ModelNode &node) setupFormEditorItemTree(QmlItemNode(node)); } -void FormEditorView::modelAboutToBeDetached(Model *model) +void FormEditorView::cleanupToolsAndScene() { - m_currentTool->setItems(QList()); + m_currentTool->setItems(QList()); m_selectionTool->clear(); m_moveTool->clear(); m_resizeTool->clear(); @@ -270,8 +258,12 @@ void FormEditorView::modelAboutToBeDetached(Model *model) m_formEditorWidget->resetView(); scene()->resetScene(); - m_currentTool = m_selectionTool.get(); + changeCurrentToolTo(m_selectionTool.get()); +} +void FormEditorView::modelAboutToBeDetached(Model *model) +{ + cleanupToolsAndScene(); AbstractView::modelAboutToBeDetached(model); } @@ -551,6 +543,11 @@ void FormEditorView::changeToSelectionTool(QGraphicsSceneMouseEvent *event) m_selectionTool->selectUnderPoint(event); } +void FormEditorView::resetToSelectionTool() +{ + changeCurrentToolTo(m_selectionTool.get()); +} + void FormEditorView::changeToResizeTool() { if (m_currentTool == m_resizeTool.get()) @@ -593,8 +590,7 @@ void FormEditorView::changeCurrentToolTo(AbstractFormEditorTool *newTool) m_currentTool->clear(); m_currentTool = newTool; m_currentTool->clear(); - m_currentTool->setItems(scene()->itemsForQmlItemNodes(toQmlItemNodeList( - selectedModelNodes()))); + m_currentTool->setItems(scene()->itemsForQmlItemNodes(toQmlItemNodeList(selectedModelNodes()))); m_currentTool->start(); } @@ -776,6 +772,26 @@ QPicture FormEditorView::renderToPicture() const return m_formEditorWidget->renderToPicture(); } +void FormEditorView::setupFormEditorWidget() +{ + Q_ASSERT(model()); + + Q_ASSERT(m_scene->formLayerItem()); + + if (QmlItemNode::isValidQmlItemNode(rootModelNode())) + setupFormEditorItemTree(rootModelNode()); + + m_formEditorWidget->updateActions(); + + if (!rewriterView()->errors().isEmpty()) + m_formEditorWidget->showErrorMessageBox(rewriterView()->errors()); + else + m_formEditorWidget->hideErrorMessageBox(); + + if (!rewriterView()->warnings().isEmpty()) + m_formEditorWidget->showWarningMessageBox(rewriterView()->warnings()); +} + QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode) { QmlObjectNode qmlObjectNode = firstQmlObjectNode; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.h b/src/plugins/qmldesigner/components/formeditor/formeditorview.h index 8aa156fa45c..5072ccf5c55 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorview.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.h @@ -103,6 +103,7 @@ public: void changeToDragTool(); void changeToSelectionTool(); void changeToSelectionTool(QGraphicsSceneMouseEvent *event); + void resetToSelectionTool(); void changeToResizeTool(); void changeToTransformTools(); void changeToCustomTool(); @@ -130,6 +131,9 @@ public: void exportAsImage(); QPicture renderToPicture() const; + void setupFormEditorWidget(); + void cleanupToolsAndScene(); + protected: void reset(); void delayedReset(); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp index 7300735cc38..d57bae3583a 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.cpp @@ -518,4 +518,25 @@ DocumentWarningWidget *FormEditorWidget::errorWidget() return m_documentErrorWidget; } +void FormEditorWidget::hideEvent(QHideEvent *event) +{ + QWidget::hideEvent(event); + + m_formEditorView->setEnabled(false); +} + +void FormEditorWidget::showEvent(QShowEvent *event) +{ + QWidget::showEvent(event); + + const bool wasEnabled = isEnabled(); + m_formEditorView->setEnabled(true); + + if (!wasEnabled && m_formEditorView->model()) { + m_formEditorView->cleanupToolsAndScene(); + m_formEditorView->setupFormEditorWidget(); + m_formEditorView->resetToSelectionTool(); + } +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h index 1f6b559a386..8cd8278da47 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorwidget.h @@ -91,6 +91,8 @@ protected: void wheelEvent(QWheelEvent *event) override; QActionGroup *toolActionGroup() const; DocumentWarningWidget *errorWidget(); + void hideEvent(QHideEvent *event) override; + void showEvent(QShowEvent *event) override; private: void changeTransformTool(bool checked);