forked from qt-creator/qt-creator
ModelEditor: Introduce custom relation type "Connection"
Change-Id: Iddd45508dcb2de1fa2b6d9b2b881b54a73172caf Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -36,6 +36,7 @@
|
||||
#include "qmt/diagram/dinheritance.h"
|
||||
#include "qmt/diagram/ddependency.h"
|
||||
#include "qmt/diagram/dassociation.h"
|
||||
#include "qmt/diagram/dconnection.h"
|
||||
#include "qmt/diagram/dannotation.h"
|
||||
#include "qmt/diagram/dboundary.h"
|
||||
#include "qmt/infrastructure/qmtassert.h"
|
||||
@@ -122,6 +123,13 @@ void DCloneVisitor::visitDAssociation(const DAssociation *association)
|
||||
visitDRelation(association);
|
||||
}
|
||||
|
||||
void DCloneVisitor::visitDConnection(const DConnection *connection)
|
||||
{
|
||||
if (!m_cloned)
|
||||
m_cloned = new DConnection(*connection);
|
||||
visitDRelation(connection);
|
||||
}
|
||||
|
||||
void DCloneVisitor::visitDAnnotation(const DAnnotation *annotation)
|
||||
{
|
||||
if (!m_cloned)
|
||||
@@ -215,6 +223,13 @@ void DCloneDeepVisitor::visitDAssociation(const DAssociation *association)
|
||||
visitDRelation(association);
|
||||
}
|
||||
|
||||
void DCloneDeepVisitor::visitDConnection(const DConnection *connection)
|
||||
{
|
||||
if (!m_cloned)
|
||||
m_cloned = new DConnection(*connection);
|
||||
visitDRelation(connection);
|
||||
}
|
||||
|
||||
void DCloneDeepVisitor::visitDAnnotation(const DAnnotation *annotation)
|
||||
{
|
||||
if (!m_cloned)
|
||||
|
||||
@@ -48,6 +48,7 @@ public:
|
||||
void visitDInheritance(const DInheritance *inheritance) override;
|
||||
void visitDDependency(const DDependency *dependency) override;
|
||||
void visitDAssociation(const DAssociation *association) override;
|
||||
void visitDConnection(const DConnection *connection) override;
|
||||
void visitDAnnotation(const DAnnotation *annotation) override;
|
||||
void visitDBoundary(const DBoundary *boundary) override;
|
||||
|
||||
@@ -73,6 +74,7 @@ public:
|
||||
void visitDInheritance(const DInheritance *inheritance) override;
|
||||
void visitDDependency(const DDependency *dependency) override;
|
||||
void visitDAssociation(const DAssociation *association) override;
|
||||
void visitDConnection(const DConnection *connection) override;
|
||||
void visitDAnnotation(const DAnnotation *annotation) override;
|
||||
void visitDBoundary(const DBoundary *boundary) override;
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "qmt/diagram/dinheritance.h"
|
||||
#include "qmt/diagram/ddependency.h"
|
||||
#include "qmt/diagram/dassociation.h"
|
||||
#include "qmt/diagram/dconnection.h"
|
||||
|
||||
#include "qmt/model/melement.h"
|
||||
#include "qmt/model/mobject.h"
|
||||
@@ -149,4 +150,12 @@ void DFactory::visitMAssociation(const MAssociation *association)
|
||||
visitMRelation(association);
|
||||
}
|
||||
|
||||
void DFactory::visitMConnection(const MConnection *connection)
|
||||
{
|
||||
QMT_CHECK(!m_product);
|
||||
auto diagramConnection = new DConnection();
|
||||
m_product = diagramConnection;
|
||||
visitMRelation(connection);
|
||||
}
|
||||
|
||||
} // namespace qmt
|
||||
|
||||
@@ -51,6 +51,7 @@ public:
|
||||
void visitMDependency(const MDependency *dependency) override;
|
||||
void visitMInheritance(const MInheritance *inheritance) override;
|
||||
void visitMAssociation(const MAssociation *association) override;
|
||||
void visitMConnection(const MConnection *connection) override;
|
||||
|
||||
private:
|
||||
DElement *m_product;
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "qmt/diagram/dinheritance.h"
|
||||
#include "qmt/diagram/ddependency.h"
|
||||
#include "qmt/diagram/dassociation.h"
|
||||
#include "qmt/diagram/dconnection.h"
|
||||
#include "qmt/diagram/dannotation.h"
|
||||
#include "qmt/diagram/dboundary.h"
|
||||
#include "qmt/infrastructure/qmtassert.h"
|
||||
@@ -142,6 +143,17 @@ void DFlatAssignmentVisitor::visitDAssociation(const DAssociation *association)
|
||||
QMT_ASSERT(target, return);
|
||||
target->setEndA(association->endA());
|
||||
target->setEndB(association->endB());
|
||||
// TODO assign assoziation class?
|
||||
}
|
||||
|
||||
void DFlatAssignmentVisitor::visitDConnection(const DConnection *connection)
|
||||
{
|
||||
visitDRelation(connection);
|
||||
auto target = dynamic_cast<DConnection *>(m_target);
|
||||
QMT_CHECK(target);
|
||||
target->setCustomRelationId(connection->customRelationId());
|
||||
target->setEndA(connection->endA());
|
||||
target->setEndB(connection->endB());
|
||||
}
|
||||
|
||||
void DFlatAssignmentVisitor::visitDAnnotation(const DAnnotation *annotation)
|
||||
|
||||
@@ -46,6 +46,7 @@ public:
|
||||
void visitDInheritance(const DInheritance *inheritance) override;
|
||||
void visitDDependency(const DDependency *dependency) override;
|
||||
void visitDAssociation(const DAssociation *association) override;
|
||||
void visitDConnection(const DConnection *connection) override;
|
||||
void visitDAnnotation(const DAnnotation *annotation) override;
|
||||
void visitDBoundary(const DBoundary *boundary) override;
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "qmt/diagram/drelation.h"
|
||||
#include "qmt/diagram/ddependency.h"
|
||||
#include "qmt/diagram/dassociation.h"
|
||||
#include "qmt/diagram/dconnection.h"
|
||||
|
||||
#include "qmt/model/melement.h"
|
||||
#include "qmt/model/mobject.h"
|
||||
@@ -222,6 +223,27 @@ void DUpdateVisitor::visitMAssociation(const MAssociation *association)
|
||||
visitMRelation(association);
|
||||
}
|
||||
|
||||
void DUpdateVisitor::visitMConnection(const MConnection *connection)
|
||||
{
|
||||
auto dconnection = dynamic_cast<DConnection *>(m_target);
|
||||
QMT_CHECK(dconnection);
|
||||
if (isUpdating(connection->customRelationId() != dconnection->customRelationId()))
|
||||
dconnection->setCustomRelationId(connection->customRelationId());
|
||||
DConnectionEnd endA;
|
||||
endA.setName(connection->endA().name());
|
||||
endA.setCardinatlity(connection->endA().cardinality());
|
||||
endA.setNavigable(connection->endA().isNavigable());
|
||||
if (isUpdating(endA != dconnection->endA()))
|
||||
dconnection->setEndA(endA);
|
||||
DConnectionEnd endB;
|
||||
endB.setName(connection->endB().name());
|
||||
endB.setCardinatlity(connection->endB().cardinality());
|
||||
endB.setNavigable(connection->endB().isNavigable());
|
||||
if (isUpdating(endB != dconnection->endB()))
|
||||
dconnection->setEndB(endB);
|
||||
visitMRelation(connection);
|
||||
}
|
||||
|
||||
bool DUpdateVisitor::isUpdating(bool valueChanged)
|
||||
{
|
||||
if (m_checkNeedsUpdate) {
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
void visitMDependency(const MDependency *dependency) override;
|
||||
void visitMInheritance(const MInheritance *inheritance) override;
|
||||
void visitMAssociation(const MAssociation *association) override;
|
||||
void visitMConnection(const MConnection *connection) override;
|
||||
|
||||
private:
|
||||
bool isUpdating(bool valueChanged);
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "qmt/diagram/dinheritance.h"
|
||||
#include "qmt/diagram/ddependency.h"
|
||||
#include "qmt/diagram/dassociation.h"
|
||||
#include "qmt/diagram/dconnection.h"
|
||||
#include "qmt/diagram/dannotation.h"
|
||||
#include "qmt/diagram/dboundary.h"
|
||||
|
||||
@@ -100,6 +101,11 @@ void DVoidVisitor::visitDAssociation(DAssociation *association)
|
||||
visitDRelation(association);
|
||||
}
|
||||
|
||||
void DVoidVisitor::visitDConnection(DConnection *connection)
|
||||
{
|
||||
visitDRelation(connection);
|
||||
}
|
||||
|
||||
void DVoidVisitor::visitDAnnotation(DAnnotation *annotation)
|
||||
{
|
||||
visitDElement(annotation);
|
||||
@@ -169,6 +175,11 @@ void DConstVoidVisitor::visitDAssociation(const DAssociation *association)
|
||||
visitDRelation(association);
|
||||
}
|
||||
|
||||
void DConstVoidVisitor::visitDConnection(const DConnection *connection)
|
||||
{
|
||||
visitDRelation(connection);
|
||||
}
|
||||
|
||||
void DConstVoidVisitor::visitDAnnotation(const DAnnotation *annotation)
|
||||
{
|
||||
visitDElement(annotation);
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
void visitDInheritance(DInheritance *inheritance) override;
|
||||
void visitDDependency(DDependency *dependency) override;
|
||||
void visitDAssociation(DAssociation *association) override;
|
||||
void visitDConnection(DConnection *connection) override;
|
||||
void visitDAnnotation(DAnnotation *annotation) override;
|
||||
void visitDBoundary(DBoundary *boundary) override;
|
||||
};
|
||||
@@ -67,6 +68,7 @@ public:
|
||||
void visitDInheritance(const DInheritance *inheritance) override;
|
||||
void visitDDependency(const DDependency *dependency) override;
|
||||
void visitDAssociation(const DAssociation *association) override;
|
||||
void visitDConnection(const DConnection *connection) override;
|
||||
void visitDAnnotation(const DAnnotation *annotation) override;
|
||||
void visitDBoundary(const DBoundary *boundary) override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user