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) void FormEditorView::modelAttached(Model *model)
{ {
Q_ASSERT(model);
temporaryBlockView();
AbstractView::modelAttached(model); AbstractView::modelAttached(model);
Q_ASSERT(m_scene->formLayerItem()); if (!isEnabled())
return;
if (QmlItemNode::isValidQmlItemNode(rootModelNode())) temporaryBlockView();
setupFormEditorItemTree(rootModelNode()); setupFormEditorWidget();
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());
} }
@@ -256,7 +244,7 @@ void FormEditorView::nodeCreated(const ModelNode &node)
setupFormEditorItemTree(QmlItemNode(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_selectionTool->clear();
@@ -270,8 +258,12 @@ void FormEditorView::modelAboutToBeDetached(Model *model)
m_formEditorWidget->resetView(); m_formEditorWidget->resetView();
scene()->resetScene(); scene()->resetScene();
m_currentTool = m_selectionTool.get(); changeCurrentToolTo(m_selectionTool.get());
}
void FormEditorView::modelAboutToBeDetached(Model *model)
{
cleanupToolsAndScene();
AbstractView::modelAboutToBeDetached(model); AbstractView::modelAboutToBeDetached(model);
} }
@@ -551,6 +543,11 @@ void FormEditorView::changeToSelectionTool(QGraphicsSceneMouseEvent *event)
m_selectionTool->selectUnderPoint(event); m_selectionTool->selectUnderPoint(event);
} }
void FormEditorView::resetToSelectionTool()
{
changeCurrentToolTo(m_selectionTool.get());
}
void FormEditorView::changeToResizeTool() void FormEditorView::changeToResizeTool()
{ {
if (m_currentTool == m_resizeTool.get()) if (m_currentTool == m_resizeTool.get())
@@ -593,8 +590,7 @@ void FormEditorView::changeCurrentToolTo(AbstractFormEditorTool *newTool)
m_currentTool->clear(); m_currentTool->clear();
m_currentTool = newTool; m_currentTool = newTool;
m_currentTool->clear(); m_currentTool->clear();
m_currentTool->setItems(scene()->itemsForQmlItemNodes(toQmlItemNodeList( m_currentTool->setItems(scene()->itemsForQmlItemNodes(toQmlItemNodeList(selectedModelNodes())));
selectedModelNodes())));
m_currentTool->start(); m_currentTool->start();
} }
@@ -776,6 +772,26 @@ QPicture FormEditorView::renderToPicture() const
return m_formEditorWidget->renderToPicture(); 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) QmlItemNode findRecursiveQmlItemNode(const QmlObjectNode &firstQmlObjectNode)
{ {
QmlObjectNode qmlObjectNode = firstQmlObjectNode; QmlObjectNode qmlObjectNode = firstQmlObjectNode;

View File

@@ -103,6 +103,7 @@ public:
void changeToDragTool(); void changeToDragTool();
void changeToSelectionTool(); void changeToSelectionTool();
void changeToSelectionTool(QGraphicsSceneMouseEvent *event); void changeToSelectionTool(QGraphicsSceneMouseEvent *event);
void resetToSelectionTool();
void changeToResizeTool(); void changeToResizeTool();
void changeToTransformTools(); void changeToTransformTools();
void changeToCustomTool(); void changeToCustomTool();
@@ -130,6 +131,9 @@ public:
void exportAsImage(); void exportAsImage();
QPicture renderToPicture() const; QPicture renderToPicture() const;
void setupFormEditorWidget();
void cleanupToolsAndScene();
protected: protected:
void reset(); void reset();
void delayedReset(); void delayedReset();

View File

@@ -518,4 +518,25 @@ DocumentWarningWidget *FormEditorWidget::errorWidget()
return m_documentErrorWidget; 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 } // namespace QmlDesigner

View File

@@ -91,6 +91,8 @@ protected:
void wheelEvent(QWheelEvent *event) override; void wheelEvent(QWheelEvent *event) override;
QActionGroup *toolActionGroup() const; QActionGroup *toolActionGroup() const;
DocumentWarningWidget *errorWidget(); DocumentWarningWidget *errorWidget();
void hideEvent(QHideEvent *event) override;
void showEvent(QShowEvent *event) override;
private: private:
void changeTransformTool(bool checked); void changeTransformTool(bool checked);