ModelEditor: Introduce custom relation type "Connection"

Change-Id: Iddd45508dcb2de1fa2b6d9b2b881b54a73172caf
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Jochen Becher
2016-08-23 21:47:12 +02:00
parent 82cb2b248e
commit ffb5dc756a
47 changed files with 1252 additions and 73 deletions

View File

@@ -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)

View File

@@ -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;

View File

@@ -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

View File

@@ -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;

View File

@@ -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)

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
};