From 9ad8ec385e8cf93dcadff0c5482edb725e89f2d7 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 11 Oct 2016 13:04:07 +0200 Subject: [PATCH] QmlDesigner: If the scene looses focus change to selection tool * We forward the focusOut event to the tools * The text tool now commits the data if the focus is lost * Adding override Task-number: QTCREATORBUG-16085 Change-Id: Ibdf6f60fc53e3c6c03222741c16cd8dd665618e1 Reviewed-by: Tim Jenssen --- .../formeditor/abstractcustomtool.cpp | 4 ++++ .../formeditor/abstractcustomtool.h | 2 ++ .../formeditor/abstractformeditortool.h | 2 ++ .../components/formeditor/dragtool.cpp | 4 ++++ .../components/formeditor/dragtool.h | 2 ++ .../components/formeditor/formeditorscene.cpp | 6 +++++ .../components/formeditor/formeditorscene.h | 24 ++++++++++--------- .../components/formeditor/movetool.cpp | 4 ++++ .../components/formeditor/movetool.h | 2 ++ .../components/formeditor/resizetool.cpp | 4 ++++ .../components/formeditor/resizetool.h | 2 ++ .../components/formeditor/selectiontool.cpp | 4 ++++ .../components/formeditor/selectiontool.h | 2 ++ .../texttool/texttool.cpp | 8 +++++++ .../qmldesignerextension/texttool/texttool.h | 2 ++ 15 files changed, 61 insertions(+), 11 deletions(-) diff --git a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp index d62ce40e1aa..05741879d8b 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.cpp @@ -39,5 +39,9 @@ void AbstractCustomTool::selectedItemsChanged(const QList & /* view()->changeToSelectionTool(); } +void AbstractCustomTool::focusLost() +{ +} + } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h index 4b5c0f43c70..151148ecce9 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractcustomtool.h @@ -38,6 +38,8 @@ public: virtual QString name() const = 0; virtual int wantHandleItem(const ModelNode &modelNode) const = 0; + + void focusLost() override; }; } // namespace QmlDesigner diff --git a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h index 4704f1e896c..e62975e21c9 100644 --- a/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h +++ b/src/plugins/qmldesigner/components/formeditor/abstractformeditortool.h @@ -74,6 +74,8 @@ public: virtual void instancesParentChanged(const QList &itemList) = 0; virtual void instancePropertyChange(const QList > &propertyList) = 0; + virtual void focusLost() = 0; + void setItems(const QList &itemList); QList items() const; diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp index 93db5250b84..af33a2e58c5 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.cpp @@ -196,6 +196,10 @@ void DragTool::clearMoveDelay() } } +void DragTool::focusLost() +{ +} + void DragTool::abort() { if (!m_isAborted) { diff --git a/src/plugins/qmldesigner/components/formeditor/dragtool.h b/src/plugins/qmldesigner/components/formeditor/dragtool.h index 794fc0ab606..6b0828b2615 100644 --- a/src/plugins/qmldesigner/components/formeditor/dragtool.h +++ b/src/plugins/qmldesigner/components/formeditor/dragtool.h @@ -75,6 +75,8 @@ public: void clearMoveDelay(); + void focusLost() override; + protected: void abort(); void createQmlItemNode(const ItemLibraryEntry &itemLibraryEntry, const QmlItemNode &parentNode, const QPointF &scenePos); diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp index 7a4ad4f9cb1..19bc053e535 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.cpp @@ -326,6 +326,12 @@ void FormEditorScene::keyReleaseEvent(QKeyEvent *keyEvent) currentTool()->keyReleaseEvent(keyEvent); } +void FormEditorScene::focusOutEvent(QFocusEvent *) +{ + if (currentTool()) + currentTool()->focusLost(); +} + FormEditorView *FormEditorScene::editorView() const { return m_editorView; diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h index ee8340ec149..e284e3ae357 100644 --- a/src/plugins/qmldesigner/components/formeditor/formeditorscene.h +++ b/src/plugins/qmldesigner/components/formeditor/formeditorscene.h @@ -92,22 +92,24 @@ public slots: bool showBoundingRects() const; protected: - bool event(QEvent *event); - void dropEvent(QGraphicsSceneDragDropEvent * event); - void dragEnterEvent(QGraphicsSceneDragDropEvent * event); - void dragLeaveEvent(QGraphicsSceneDragDropEvent * event); - void dragMoveEvent(QGraphicsSceneDragDropEvent * event); - void mousePressEvent(QGraphicsSceneMouseEvent *event); - void mouseMoveEvent(QGraphicsSceneMouseEvent *event); - void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); - void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); + bool event(QEvent *event) override; + void dropEvent(QGraphicsSceneDragDropEvent * event) override; + void dragEnterEvent(QGraphicsSceneDragDropEvent * event) override; + void dragLeaveEvent(QGraphicsSceneDragDropEvent * event) override; + void dragMoveEvent(QGraphicsSceneDragDropEvent * event) override; + void mousePressEvent(QGraphicsSceneMouseEvent *event) override; + void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; void hoverEnterEvent(QGraphicsSceneHoverEvent *event); void hoverMoveEvent(QGraphicsSceneHoverEvent *event); void hoverLeaveEvent(QGraphicsSceneHoverEvent *event); - void keyPressEvent(QKeyEvent *keyEvent); - void keyReleaseEvent(QKeyEvent *keyEvent); + void keyPressEvent(QKeyEvent *keyEvent) override; + void keyReleaseEvent(QKeyEvent *keyEvent) override; + + void focusOutEvent(QFocusEvent *focusEvent) override; private: QList removeLayerItems(const QList &itemList); diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.cpp b/src/plugins/qmldesigner/components/formeditor/movetool.cpp index 86871f5873e..5ebbcb8e819 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/movetool.cpp @@ -370,4 +370,8 @@ void MoveTool::formEditorItemsChanged(const QList &itemList) m_contentNotEditableIndicator.updateItems(selectedItemList); } +void MoveTool::focusLost() +{ +} + } diff --git a/src/plugins/qmldesigner/components/formeditor/movetool.h b/src/plugins/qmldesigner/components/formeditor/movetool.h index 7c6b2bf621c..8aab108eb53 100644 --- a/src/plugins/qmldesigner/components/formeditor/movetool.h +++ b/src/plugins/qmldesigner/components/formeditor/movetool.h @@ -67,6 +67,8 @@ public: void formEditorItemsChanged(const QList &itemList) override; + void focusLost() override; + protected: static bool haveSameParent(const QList &itemList); diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp index 4fb42f27f39..6e941a35144 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizetool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/resizetool.cpp @@ -203,6 +203,10 @@ void ResizeTool::instancePropertyChange(const QList &/*itemList*/) { diff --git a/src/plugins/qmldesigner/components/formeditor/resizetool.h b/src/plugins/qmldesigner/components/formeditor/resizetool.h index 87690d8c212..99c60aaed6f 100644 --- a/src/plugins/qmldesigner/components/formeditor/resizetool.h +++ b/src/plugins/qmldesigner/components/formeditor/resizetool.h @@ -63,6 +63,8 @@ public: void instancesCompleted(const QList &itemList) override; void instancePropertyChange(const QList > &propertyList) override; + void focusLost() override; + private: SelectionIndicator m_selectionIndicator; ResizeIndicator m_resizeIndicator; diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp index 7863486f273..ca925142585 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.cpp @@ -294,4 +294,8 @@ void SelectionTool::selectUnderPoint(QGraphicsSceneMouseEvent *event) m_singleSelectionManipulator.end(event->scenePos()); } +void SelectionTool::focusLost() +{ +} + } diff --git a/src/plugins/qmldesigner/components/formeditor/selectiontool.h b/src/plugins/qmldesigner/components/formeditor/selectiontool.h index 15cfe08e761..0a5945c7356 100644 --- a/src/plugins/qmldesigner/components/formeditor/selectiontool.h +++ b/src/plugins/qmldesigner/components/formeditor/selectiontool.h @@ -77,6 +77,8 @@ public: void setCursor(const QCursor &cursor); + void focusLost() override; + private: RubberBandSelectionManipulator m_rubberbandSelectionManipulator; SingleSelectionManipulator m_singleSelectionManipulator; diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp index f490e9be74b..2798502e2f3 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp +++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.cpp @@ -257,6 +257,14 @@ QString TextTool::name() const return QCoreApplication::translate("TextTool", "Text Tool"); } +void TextTool::focusLost() +{ + if (textItem()) { + textItem()->writeTextToProperty(); + view()->changeToSelectionTool(); + } +} + TextEditItem *TextTool::textItem() const { return m_textItem.data(); diff --git a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.h b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.h index ba13cdbccea..975ddea9e04 100644 --- a/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.h +++ b/src/plugins/qmldesigner/qmldesignerextension/texttool/texttool.h @@ -77,6 +77,8 @@ public: QString name() const override; + void focusLost() override; + protected: TextEditItem *textItem() const;