From 6fb131de98db7a6f3d69ae4ce440bfcaa3f0daf8 Mon Sep 17 00:00:00 2001 From: Jochen Becher Date: Sun, 3 Jan 2016 19:05:13 +0100 Subject: [PATCH] ModelEditor: Improve reverse engineering of template classes Change-Id: Ic62c8b6f7f08203c2b4f52d1fcb381d8ec61c834 Reviewed-by: Tobias Hunger --- src/plugins/modeleditor/pxnodecontroller.cpp | 24 +++++++++++++------- src/plugins/modeleditor/pxnodecontroller.h | 6 +++-- 2 files changed, 20 insertions(+), 10 deletions(-) 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; };