diff --git a/src/plugins/modeleditor/pxnodecontroller.cpp b/src/plugins/modeleditor/pxnodecontroller.cpp index 845ca6185e5..a183a5ec162 100644 --- a/src/plugins/modeleditor/pxnodecontroller.cpp +++ b/src/plugins/modeleditor/pxnodecontroller.cpp @@ -296,14 +296,7 @@ void PxNodeController::onMenuActionTriggered(PxNodeController::MenuAction *actio // TODO handle template classes auto klass = new qmt::MClass(); klass->setFlags(qmt::MElement::ReverseEngineered); - QString qualifiedName = action->className; - int i = qualifiedName.lastIndexOf(QStringLiteral("::")); - if (i >= 0) { - klass->setUmlNamespace(qualifiedName.left(i)); - klass->setName(qualifiedName.mid(i + 2)); - } else { - klass->setName(qualifiedName); - } + parseFullClassName(klass, action->className); newObject = klass; break; } @@ -385,5 +378,20 @@ void PxNodeController::onMenuActionTriggered(PxNodeController::MenuAction *actio } } +void PxNodeController::parseFullClassName(qmt::MClass *klass, const QString &fullClassName) +{ + QString umlNamespace; + QString className; + QStringList templateParameters; + + if (qmt::NameController::parseClassName(fullClassName, ¨Namespace, &className, &templateParameters)) { + klass->setName(className); + klass->setUmlNamespace(umlNamespace); + klass->setTemplateParameters(templateParameters); + } else { + klass->setName(fullClassName); + } +} + } // namespace Internal } // namespace ModelEditor diff --git a/src/plugins/modeleditor/pxnodecontroller.h b/src/plugins/modeleditor/pxnodecontroller.h index eb94b9313b9..aa0b44a3350 100644 --- a/src/plugins/modeleditor/pxnodecontroller.h +++ b/src/plugins/modeleditor/pxnodecontroller.h @@ -36,6 +36,7 @@ namespace ProjectExplorer { class Node; } namespace qmt { +class MClass; class MDiagram; class DElement; class DiagramSceneController; @@ -63,12 +64,13 @@ public: bool hasDiagramForExplorerNode(const ProjectExplorer::Node *node); qmt::MDiagram *findDiagramForExplorerNode(const ProjectExplorer::Node *node); -private slots: +private: void onMenuActionTriggered(MenuAction *action, const ProjectExplorer::Node *node, qmt::DElement *topMostElementAtPos, const QPointF &pos, qmt::MDiagram *diagram); -private: + void parseFullClassName(qmt::MClass *klass, const QString &fullClassName); + PxNodeControllerPrivate *d; };