aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/modelinglib
diff options
context:
space:
mode:
authorJochen Becher <jochen_becher@gmx.de>2017-12-21 21:18:49 +0100
committerJochen Becher <jochen_becher@gmx.de>2018-01-09 14:21:22 +0000
commite8b3b9b1e41d99e68c7b035fded7ddd93a0a46e5 (patch)
treedc08b9145053d549bc38c10fac8849f0c7f7700b /src/libs/modelinglib
parent0c7ce54cc6d144549a497b86d1aa4888ff74c513 (diff)
ModelEditor: Support multi-line object names
Editing a name of an object at a diagram press Shift-Return do insert a line-break. Change-Id: I3f7d185823d7d5f33bc796bfedb058706f78b4f2 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Diffstat (limited to 'src/libs/modelinglib')
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp10
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.cpp11
-rw-r--r--src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.h3
-rw-r--r--src/libs/modelinglib/qmt/model_ui/treemodel.cpp14
-rw-r--r--src/libs/modelinglib/qmt/model_ui/treemodel.h1
5 files changed, 31 insertions, 8 deletions
diff --git a/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp
index fac3e046d38..1f6664498df 100644
--- a/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp
+++ b/src/libs/modelinglib/qmt/diagram_scene/items/objectitem.cpp
@@ -559,8 +559,16 @@ void ObjectItem::updateNameItem(const Style *style)
m_nameItem->setShowFocus(true);
m_nameItem->setFilterReturnKey(true);
m_nameItem->setFilterTabKey(true);
+ QTextOption textOption = m_nameItem->document()->defaultTextOption();
+ textOption.setAlignment(Qt::AlignHCenter);
+ m_nameItem->document()->setDefaultTextOption(textOption);
QObject::connect(m_nameItem->document(), &QTextDocument::contentsChanged, m_nameItem,
- [=]() { this->setFromDisplayName(m_nameItem->toPlainText()); });
+ [=]()
+ {
+ this->m_nameItem->setTextWidth(-1);
+ this->m_nameItem->setTextWidth(m_nameItem->boundingRect().width());
+ this->setFromDisplayName(m_nameItem->toPlainText());
+ });
QObject::connect(m_nameItem, &EditableTextItem::returnKeyPressed, m_nameItem,
[=]() { this->m_nameItem->clearFocus(); });
}
diff --git a/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.cpp b/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.cpp
index e7c48b5c09c..94007c3cbb2 100644
--- a/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.cpp
+++ b/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.cpp
@@ -76,7 +76,7 @@ void EditableTextItem::selectAll()
void EditableTextItem::keyPressEvent(QKeyEvent *event)
{
- if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && m_filterReturnKey) {
+ if (isReturnKey(event) && m_filterReturnKey) {
event->accept();
emit returnKeyPressed();
} else if (event->key() == Qt::Key_Tab && m_filterTabKey) {
@@ -88,8 +88,7 @@ void EditableTextItem::keyPressEvent(QKeyEvent *event)
void EditableTextItem::keyReleaseEvent(QKeyEvent *event)
{
- if (((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && m_filterReturnKey)
- || (event->key() == Qt::Key_Tab && m_filterTabKey))
+ if (isReturnKey(event) && m_filterReturnKey)
event->accept();
else
QGraphicsTextItem::keyReleaseEvent(event);
@@ -111,4 +110,10 @@ void EditableTextItem::focusOutEvent(QFocusEvent *event)
setTextCursor(cursor);
}
+bool EditableTextItem::isReturnKey(QKeyEvent *event) const
+{
+ return (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)
+ && (event->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier)) == 0;
+}
+
} // namespace qmt
diff --git a/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.h b/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.h
index b3e93ecd1b8..aec5c181539 100644
--- a/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.h
+++ b/src/libs/modelinglib/qmt/diagram_scene/parts/editabletextitem.h
@@ -56,6 +56,9 @@ protected:
void focusOutEvent(QFocusEvent *event) override;
private:
+ bool isReturnKey(QKeyEvent *event) const;
+
+private:
bool m_showFocus = false;
bool m_filterReturnKey = false;
bool m_filterTabKey = false;
diff --git a/src/libs/modelinglib/qmt/model_ui/treemodel.cpp b/src/libs/modelinglib/qmt/model_ui/treemodel.cpp
index bd0bf56bc11..69cdf186610 100644
--- a/src/libs/modelinglib/qmt/model_ui/treemodel.cpp
+++ b/src/libs/modelinglib/qmt/model_ui/treemodel.cpp
@@ -786,6 +786,12 @@ void TreeModel::removeObjectFromItemMap(const MObject *object)
}
}
+QString TreeModel::filterLabel(const QString &label) const
+{
+ QString s = label;
+ return s.replace("\n"," ");
+}
+
QString TreeModel::createObjectLabel(const MObject *object)
{
QMT_ASSERT(object, return QString());
@@ -793,16 +799,16 @@ QString TreeModel::createObjectLabel(const MObject *object)
if (object->name().isEmpty()) {
if (auto item = dynamic_cast<const MItem *>(object)) {
if (!item->variety().isEmpty())
- return QString("[%1]").arg(item->variety());
+ return filterLabel(QString("[%1]").arg(item->variety()));
}
return tr("[unnamed]");
}
if (auto klass = dynamic_cast<const MClass *>(object)) {
if (!klass->umlNamespace().isEmpty())
- return QString("%1 [%2]").arg(klass->name()).arg(klass->umlNamespace());
+ return filterLabel(QString("%1 [%2]").arg(klass->name()).arg(klass->umlNamespace()));
}
- return object->name();
+ return filterLabel(object->name());
}
QString TreeModel::createRelationLabel(const MRelation *relation)
@@ -817,7 +823,7 @@ QString TreeModel::createRelationLabel(const MRelation *relation)
name += " - ";
if (MObject *endB = m_modelController->findObject(relation->endBUid()))
name += createObjectLabel(endB);
- return name;
+ return filterLabel(name);
}
QIcon TreeModel::createIcon(StereotypeIcon::Element stereotypeIconElement, StyleEngine::ElementType styleElementType,
diff --git a/src/libs/modelinglib/qmt/model_ui/treemodel.h b/src/libs/modelinglib/qmt/model_ui/treemodel.h
index 7e9bb0a4fc6..032f8f9b63e 100644
--- a/src/libs/modelinglib/qmt/model_ui/treemodel.h
+++ b/src/libs/modelinglib/qmt/model_ui/treemodel.h
@@ -111,6 +111,7 @@ private:
ModelItem *createItem(const MElement *element);
void createChildren(const MObject *parentObject, ModelItem *parentItem);
void removeObjectFromItemMap(const MObject *object);
+ QString filterLabel(const QString &label) const;
QString createObjectLabel(const MObject *object);
QString createRelationLabel(const MRelation *relation);
QIcon createIcon(StereotypeIcon::Element stereotypeIconElement,