QmlDesigner Disable FormEditorView when not visible

Change-Id: I4bf6f3747cfd11fa31bdd386efc11fc27dbfe45c
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Thomas Hartmann
2020-09-30 16:49:14 +02:00
parent 72a6038f7a
commit 51a132eb92
4 changed files with 64 additions and 21 deletions

View File

@@ -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<FormEditorItem*>());
m_currentTool->setItems(QList<FormEditorItem *>());
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;

View File

@@ -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();

View File

@@ -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

View File

@@ -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);