diff options
Diffstat (limited to 'src/uml/qumlpackagemerge.cpp')
-rw-r--r-- | src/uml/qumlpackagemerge.cpp | 156 |
1 files changed, 52 insertions, 104 deletions
diff --git a/src/uml/qumlpackagemerge.cpp b/src/uml/qumlpackagemerge.cpp index bb596e56..ef7bfbe1 100644 --- a/src/uml/qumlpackagemerge.cpp +++ b/src/uml/qumlpackagemerge.cpp @@ -40,145 +40,93 @@ ****************************************************************************/ #include "qumlpackagemerge.h" -#include <QtUml/QUmlComment> -#include <QtUml/QUmlElement> -#include <QtUml/QUmlPackage> +#include "private/qumlpackagemergeobject_p.h" -QT_BEGIN_NAMESPACE +#include <QtUml/QUmlPackage> /*! - \class UmlPackageMerge + \class QUmlPackageMerge \inmodule QtUml \brief A package merge defines how the contents of one package are extended by the contents of another package. */ - -QUmlPackageMerge::QUmlPackageMerge(QObject *parent) : - QObject(parent) +QUmlPackageMerge::QUmlPackageMerge(bool createQObject) : + _mergedPackage(0), + _receivingPackage(0) { + if (createQObject) + _qObject = new QUmlPackageMergeObject(this); } -// OWNED ATTRIBUTES [Element] - -/*! - The Comments owned by this element. - */ -const QSet<QUmlComment *> QUmlPackageMerge::ownedComment() const +QUmlPackageMerge::~QUmlPackageMerge() { - return *(reinterpret_cast<const QSet<QUmlComment *> *>(&_ownedComment)); + if (!deletingFromQObject) { + _qObject->setProperty("deletingFromModelingObject", true); + delete _qObject; + } } -/*! - The Elements owned by this element. - */ -const QSet<QUmlElement *> QUmlPackageMerge::ownedElement() const -{ - return *(reinterpret_cast<const QSet<QUmlElement *> *>(&_ownedElement)); -} +// OWNED ATTRIBUTES /*! - The Element that owns this element. + References the Package that is to be merged with the receiving package of the PackageMerge. */ -QUmlElement *QUmlPackageMerge::owner() const +QUmlPackage * +QUmlPackageMerge::mergedPackage() const { - return reinterpret_cast<QUmlElement *>(_owner); -} - -// OWNED ATTRIBUTES [Relationship] + // This is a read-write association end -/*! - Specifies the elements related by the Relationship. - */ -const QSet<QUmlElement *> QUmlPackageMerge::relatedElement() const -{ - return *(reinterpret_cast<const QSet<QUmlElement *> *>(&_relatedElement)); + return _mergedPackage; } -// OWNED ATTRIBUTES [DirectedRelationship] - -/*! - Specifies the sources of the DirectedRelationship. - */ -const QSet<QUmlElement *> QUmlPackageMerge::source() const +void QUmlPackageMerge::setMergedPackage(QUmlPackage *mergedPackage) { - return *(reinterpret_cast<const QSet<QUmlElement *> *>(&_source)); -} + // This is a read-write association end -/*! - Specifies the targets of the DirectedRelationship. - */ -const QSet<QUmlElement *> QUmlPackageMerge::target() const -{ - return *(reinterpret_cast<const QSet<QUmlElement *> *>(&_target)); -} + if (_mergedPackage != mergedPackage) { + // Adjust subsetted properties + removeTarget(_mergedPackage); -// OWNED ATTRIBUTES [PackageMerge] + _mergedPackage = mergedPackage; + if (mergedPackage->asQObject() && this->asQObject()) + QObject::connect(mergedPackage->asQObject(), SIGNAL(destroyed()), this->asQObject(), SLOT(setMergedPackage())); -/*! - References the Package that is to be merged with the receiving package of the PackageMerge. - */ -QUmlPackage *QUmlPackageMerge::mergedPackage() const -{ - return reinterpret_cast<QUmlPackage *>(_mergedPackage); + // Adjust subsetted properties + if (mergedPackage) { + addTarget(mergedPackage); + } + } } /*! References the Package that is being extended with the contents of the merged package of the PackageMerge. */ -QUmlPackage *QUmlPackageMerge::receivingPackage() const -{ - return reinterpret_cast<QUmlPackage *>(_receivingPackage); -} - -// OPERATIONS [Element] - -/*! - The query allOwnedElements() gives all of the direct and indirect owned elements of an element. - */ -QSet<QUmlElement *> QUmlPackageMerge::allOwnedElements() const +QUmlPackage * +QUmlPackageMerge::receivingPackage() const { - QSet<QUmlElement *> r; - foreach (UmlElement *element, UmlElement::allOwnedElements()) - r.insert(reinterpret_cast<QUmlElement *>(element)); - return r; -} + // This is a read-write association end -/*! - The query mustBeOwned() indicates whether elements of this type must have an owner. Subclasses of Element that do not require an owner must override this operation. - */ -bool QUmlPackageMerge::mustBeOwned() const -{ - return UmlElement::mustBeOwned(); -} - -// SLOTS FOR OWNED ATTRIBUTES [Element] - -void QUmlPackageMerge::addOwnedComment(UmlComment *ownedComment) -{ - UmlElement::addOwnedComment(ownedComment); -} - -void QUmlPackageMerge::removeOwnedComment(UmlComment *ownedComment) -{ - UmlElement::removeOwnedComment(ownedComment); -} - -// SLOTS FOR OWNED ATTRIBUTES [Relationship] - -// SLOTS FOR OWNED ATTRIBUTES [DirectedRelationship] - -// SLOTS FOR OWNED ATTRIBUTES [PackageMerge] - -void QUmlPackageMerge::setMergedPackage(QUmlPackage *mergedPackage) -{ - UmlPackageMerge::setMergedPackage(mergedPackage); + return _receivingPackage; } void QUmlPackageMerge::setReceivingPackage(QUmlPackage *receivingPackage) { - UmlPackageMerge::setReceivingPackage(receivingPackage); + // This is a read-write association end + + if (_receivingPackage != receivingPackage) { + // Adjust subsetted properties + removeSource(_receivingPackage); + + _receivingPackage = receivingPackage; + if (receivingPackage->asQObject() && this->asQObject()) + QObject::connect(receivingPackage->asQObject(), SIGNAL(destroyed()), this->asQObject(), SLOT(setReceivingPackage())); + + // Adjust subsetted properties + setOwner(receivingPackage); + if (receivingPackage) { + addSource(receivingPackage); + } + } } -QT_END_NAMESPACE - |