diff options
author | Jochen Becher <[email protected]> | 2018-08-08 21:10:18 +0200 |
---|---|---|
committer | Jochen Becher <[email protected]> | 2018-08-26 15:55:46 +0000 |
commit | 36bb1b60857cdadf2248ebefd916f3769d88baaf (patch) | |
tree | ce51ec03fed793e2f5c4159b091f627d0ccc05bd /src/libs/modelinglib | |
parent | 7a3c78595078c8933fee0ff9f5fe31c4d8cc76cd (diff) |
ModelEditor: Clear edit focus on exporting diagram
Task-number: QTCREATORBUG-16689
Change-Id: I01fb97e744a813c4f6c8cb2180e4c49cdafe17ec
Reviewed-by: Christian Stenger <[email protected]>
Diffstat (limited to 'src/libs/modelinglib')
8 files changed, 54 insertions, 0 deletions
diff --git a/src/libs/modelinglib/qmt/diagram_scene/capabilities/editable.h b/src/libs/modelinglib/qmt/diagram_scene/capabilities/editable.h index de0e70edd58..8ab6c3f0807 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/capabilities/editable.h +++ b/src/libs/modelinglib/qmt/diagram_scene/capabilities/editable.h @@ -33,8 +33,10 @@ public: virtual ~IEditable() { } virtual bool isEditable() const = 0; + virtual bool isEditing() const = 0; virtual void edit() = 0; + virtual void finishEdit() = 0; }; } // namespace qmt diff --git a/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp b/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp index 53007c7f2f6..bb4eed6bddc 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp @@ -98,6 +98,7 @@ public: QSet<QGraphicsItem *> m_selectedItems; QSet<QGraphicsItem *> m_secondarySelectedItems; QGraphicsItem *m_focusItem = nullptr; + IEditable *m_editItem = nullptr; bool m_exportSelectedElements = false; QRectF m_sceneBoundingRect; }; @@ -955,6 +956,14 @@ void DiagramSceneModel::saveSelectionStatusBeforeExport(bool exportSelectedEleme // Selections would also render to the clipboard m_graphicsScene->clearSelection(); + foreach (QGraphicsItem *item, m_graphicsItems) { + if (IEditable *editItem = dynamic_cast<IEditable *>(item)) { + if (editItem->isEditing()) { + status->m_editItem = editItem; + editItem->finishEdit(); + } + } + } removeExtraSceneItems(); foreach (QGraphicsItem *item, m_graphicsItems) { @@ -1002,6 +1011,10 @@ void DiagramSceneModel::restoreSelectedStatusAfterExport(const DiagramSceneModel m_focusItem = status.m_focusItem; } } + + // reset edit item + if (status.m_editItem) + status.m_editItem->edit(); } void DiagramSceneModel::recalcSceneRectSize() diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.cpp index d9da017d58c..6169f4cad84 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.cpp @@ -233,12 +233,23 @@ bool AnnotationItem::isEditable() const return true; } +bool AnnotationItem::isEditing() const +{ + return m_textItem && m_textItem->hasFocus(); +} + void AnnotationItem::edit() { if (m_textItem) m_textItem->setFocus(); } +void AnnotationItem::finishEdit() +{ + if (m_textItem) + m_textItem->clearFocus(); +} + void AnnotationItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton || event->button() == Qt::RightButton) diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.h b/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.h index d7bce8d8dc7..a73bbf85092 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.h +++ b/src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.h @@ -81,7 +81,9 @@ public: void setBoundarySelected(const QRectF &boundary, bool secondary) override; bool isEditable() const override; + bool isEditing() const override; void edit() override; + void finishEdit() override; protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override; diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.cpp index 31f7e37bfd7..e437f4c3ecc 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.cpp @@ -284,12 +284,23 @@ bool BoundaryItem::isEditable() const return true; } +bool BoundaryItem::isEditing() const +{ + return m_textItem && m_textItem->hasFocus(); +} + void BoundaryItem::edit() { if (m_textItem) m_textItem->setFocus(); } +void BoundaryItem::finishEdit() +{ + if (m_textItem) + m_textItem->clearFocus(); +} + void BoundaryItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton || event->button() == Qt::RightButton) { diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.h b/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.h index d2105c08bf9..5eaa2f2fcdc 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.h +++ b/src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.h @@ -80,7 +80,9 @@ public: void setBoundarySelected(const QRectF &boundary, bool secondary) override; bool isEditable() const override; + bool isEditing() const override; void edit() override; + void finishEdit() override; protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override; diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp index a53e0958b3e..d6cf0848be1 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp +++ b/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp @@ -455,6 +455,11 @@ bool ObjectItem::isEditable() const return true; } +bool ObjectItem::isEditing() const +{ + return m_nameItem && m_nameItem->hasFocus(); +} + void ObjectItem::edit() { // TODO if name is initial name ("New Class" etc) select all text @@ -462,6 +467,12 @@ void ObjectItem::edit() m_nameItem->setFocus(); } +void ObjectItem::finishEdit() +{ + if (m_nameItem) + m_nameItem->clearFocus(); +} + void ObjectItem::updateStereotypeIconDisplay() { StereotypeDisplayVisitor stereotypeDisplayVisitor; diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.h b/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.h index 39fdee38656..48ca4e75204 100644 --- a/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.h +++ b/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.h @@ -130,7 +130,9 @@ public: void align(AlignType alignType, const QString &identifier) override; bool isEditable() const override; + bool isEditing() const override; void edit() override; + void finishEdit() override; protected: void updateStereotypeIconDisplay(); |