aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/modelinglib
diff options
context:
space:
mode:
authorJochen Becher <[email protected]>2018-08-08 21:10:18 +0200
committerJochen Becher <[email protected]>2018-08-26 15:55:46 +0000
commit36bb1b60857cdadf2248ebefd916f3769d88baaf (patch)
treece51ec03fed793e2f5c4159b091f627d0ccc05bd /src/libs/modelinglib
parent7a3c78595078c8933fee0ff9f5fe31c4d8cc76cd (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')
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/capabilities/editable.h2
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/diagramscenemodel.cpp13
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.cpp11
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/annotationitem.h2
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.cpp11
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/boundaryitem.h2
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp11
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/objectitem.h2
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();