diff options
author | Jochen Becher <jochen_becher@gmx.de> | 2017-12-21 21:18:49 +0100 |
---|---|---|
committer | Jochen Becher <jochen_becher@gmx.de> | 2018-01-09 14:21:22 +0000 |
commit | e8b3b9b1e41d99e68c7b035fded7ddd93a0a46e5 (patch) | |
tree | dc08b9145053d549bc38c10fac8849f0c7f7700b /src/libs/modelinglib | |
parent | 0c7ce54cc6d144549a497b86d1aa4888ff74c513 (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')
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, |