diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-11-27 14:59:39 -0300 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-11-27 19:07:09 +0100 |
commit | 1c5eb2d398f03e3a1227305aab652c18ed7df174 (patch) | |
tree | 028a89fed1cee7ee7fdc8a7ce01c9e008efc5ac6 /src | |
parent | 480140149c6ebd4a90da2227e022f51aeec935a1 (diff) |
Add first steps for element creation during design space navigation
Change-Id: Ic27a8d4452d598259531315dfea15ff416cb8000
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/duse/qdusedesignspace.cpp | 96 | ||||
-rw-r--r-- | src/duse/qdusedesignspace.h | 10 | ||||
-rw-r--r-- | src/duse/qobjects/qdusedesignspaceobject.cpp | 64 | ||||
-rw-r--r-- | src/duse/qobjects/qdusedesignspaceobject_p.h | 10 | ||||
-rw-r--r-- | src/modelingwidgets/qmodelingobjectpropertymodel.cpp | 3 |
5 files changed, 182 insertions, 1 deletions
diff --git a/src/duse/qdusedesignspace.cpp b/src/duse/qdusedesignspace.cpp index 653f1639..6c72be3c 100644 --- a/src/duse/qdusedesignspace.cpp +++ b/src/duse/qdusedesignspace.cpp @@ -44,6 +44,8 @@ #include <QtDuse/QDuseDesignDimension> #include <QtDuse/QDuseQualityMetric> +#include <QtUml/QUmlElementImport> +#include <QtUml/QUmlPackageImport> QT_BEGIN_NAMESPACE @@ -80,6 +82,10 @@ QModelingElement *QDuseDesignSpace::clone() const QDuseDesignSpace *c = new QDuseDesignSpace; c->asQModelingObject()->setObjectName(this->asQModelingObject()->objectName()); c->asQModelingObject()->setProperty("role", this->asQModelingObject()->property("role")); + foreach (QUmlElementImport *element, elementImports()) + c->addElementImport(dynamic_cast<QUmlElementImport *>(element->clone())); + foreach (QUmlPackageImport *element, packageImports()) + c->addPackageImport(dynamic_cast<QUmlPackageImport *>(element->clone())); c->setName(name()); c->setRequiredProfile(requiredProfile()); foreach (QDuseDesignDimension *element, designDimensions()) @@ -92,6 +98,96 @@ QModelingElement *QDuseDesignSpace::clone() const // OWNED ATTRIBUTES /*! + The elements imported by the design space. + + \sa addElementImport(), removeElementImport() + */ +const QSet<QUmlElementImport *> QDuseDesignSpace::elementImports() const +{ + // This is a read-write property + + return _elementImports; +} + +/*! + Adds \a elementImport to elementImports. + + \sa elementImports(), removeElementImport() + */ +void QDuseDesignSpace::addElementImport(QUmlElementImport *elementImport) +{ + // This is a read-write property + + if (!_elementImports.contains(elementImport)) { + _elementImports.insert(elementImport); + if (elementImport && elementImport->asQModelingObject() && this->asQModelingObject()) + QObject::connect(elementImport->asQModelingObject(), SIGNAL(destroyed(QObject*)), this->asQModelingObject(), SLOT(removeElementImport(QObject *))); + elementImport->asQModelingObject()->setParent(this->asQModelingObject()); + } +} + +/*! + Removes \a elementImport from elementImports. + + \sa elementImports(), addElementImport() + */ +void QDuseDesignSpace::removeElementImport(QUmlElementImport *elementImport) +{ + // This is a read-write property + + if (_elementImports.contains(elementImport)) { + _elementImports.remove(elementImport); + if (elementImport->asQModelingObject()) + elementImport->asQModelingObject()->setParent(0); + } +} + +/*! + The packages imported by the design space. + + \sa addPackageImport(), removePackageImport() + */ +const QSet<QUmlPackageImport *> QDuseDesignSpace::packageImports() const +{ + // This is a read-write property + + return _packageImports; +} + +/*! + Adds \a packageImport to packageImports. + + \sa packageImports(), removePackageImport() + */ +void QDuseDesignSpace::addPackageImport(QUmlPackageImport *packageImport) +{ + // This is a read-write property + + if (!_packageImports.contains(packageImport)) { + _packageImports.insert(packageImport); + if (packageImport && packageImport->asQModelingObject() && this->asQModelingObject()) + QObject::connect(packageImport->asQModelingObject(), SIGNAL(destroyed(QObject*)), this->asQModelingObject(), SLOT(removePackageImport(QObject *))); + packageImport->asQModelingObject()->setParent(this->asQModelingObject()); + } +} + +/*! + Removes \a packageImport from packageImports. + + \sa packageImports(), addPackageImport() + */ +void QDuseDesignSpace::removePackageImport(QUmlPackageImport *packageImport) +{ + // This is a read-write property + + if (_packageImports.contains(packageImport)) { + _packageImports.remove(packageImport); + if (packageImport->asQModelingObject()) + packageImport->asQModelingObject()->setParent(0); + } +} + +/*! The design space name. */ QString QDuseDesignSpace::name() const diff --git a/src/duse/qdusedesignspace.h b/src/duse/qdusedesignspace.h index b87f8ffe..52d0db3a 100644 --- a/src/duse/qdusedesignspace.h +++ b/src/duse/qdusedesignspace.h @@ -51,6 +51,8 @@ QT_MODULE(QtDuse) class QDuseDesignDimension; class QDuseQualityMetric; +class QUmlElementImport; +class QUmlPackageImport; class Q_DUSE_EXPORT QDuseDesignSpace : public QModelingElement { @@ -61,6 +63,12 @@ public: virtual QModelingElement *clone() const; // Owned attributes + const QSet<QUmlElementImport *> elementImports() const; + void addElementImport(QUmlElementImport *elementImport); + void removeElementImport(QUmlElementImport *elementImport); + const QSet<QUmlPackageImport *> packageImports() const; + void addPackageImport(QUmlPackageImport *packageImport); + void removePackageImport(QUmlPackageImport *packageImport); QString name() const; void setName(QString name); QString requiredProfile() const; @@ -73,6 +81,8 @@ public: void removeQualityMetric(QDuseQualityMetric *qualityMetric); protected: + QSet<QUmlElementImport *> _elementImports; + QSet<QUmlPackageImport *> _packageImports; QString _name; QString _requiredProfile; QList<QDuseDesignDimension *> _designDimensions; diff --git a/src/duse/qobjects/qdusedesignspaceobject.cpp b/src/duse/qobjects/qdusedesignspaceobject.cpp index 0eaa867c..f3f42157 100644 --- a/src/duse/qobjects/qdusedesignspaceobject.cpp +++ b/src/duse/qobjects/qdusedesignspaceobject.cpp @@ -44,6 +44,8 @@ #include <QtDuse/QDuseDesignSpace> #include <QtDuse/QDuseDesignDimension> #include <QtDuse/QDuseQualityMetric> +#include <QtUml/QUmlElementImport> +#include <QtUml/QUmlPackageImport> QT_BEGIN_NAMESPACE @@ -56,6 +58,22 @@ QDuseDesignSpaceObject::QDuseDesignSpaceObject(QDuseDesignSpace *modelingElement // OWNED ATTRIBUTES [DesignSpace] +const QSet<QObject *> QDuseDesignSpaceObject::elementImports() const +{ + QSet<QObject *> set; + foreach (QUmlElementImport *element, qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->elementImports()) + set.insert(element->asQModelingObject()); + return set; +} + +const QSet<QObject *> QDuseDesignSpaceObject::packageImports() const +{ + QSet<QObject *> set; + foreach (QUmlPackageImport *element, qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->packageImports()) + set.insert(element->asQModelingObject()); + return set; +} + QString QDuseDesignSpaceObject::name() const { return qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->name(); @@ -84,6 +102,30 @@ const QSet<QObject *> QDuseDesignSpaceObject::qualityMetrics() const // SLOTS FOR OWNED ATTRIBUTES [DesignSpace] +void QDuseDesignSpaceObject::addElementImport(QObject *elementImport) +{ + qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->addElementImport(qmodelingelementproperty_cast<QUmlElementImport *>(elementImport)); + emit elementImportsChanged(this->elementImports()); +} + +void QDuseDesignSpaceObject::removeElementImport(QObject *elementImport) +{ + qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->removeElementImport(qmodelingelementproperty_cast<QUmlElementImport *>(elementImport)); + emit elementImportsChanged(this->elementImports()); +} + +void QDuseDesignSpaceObject::addPackageImport(QObject *packageImport) +{ + qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->addPackageImport(qmodelingelementproperty_cast<QUmlPackageImport *>(packageImport)); + emit packageImportsChanged(this->packageImports()); +} + +void QDuseDesignSpaceObject::removePackageImport(QObject *packageImport) +{ + qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->removePackageImport(qmodelingelementproperty_cast<QUmlPackageImport *>(packageImport)); + emit packageImportsChanged(this->packageImports()); +} + void QDuseDesignSpaceObject::setName(QString name) { qmodelingelementproperty_cast<QDuseDesignSpace *>(this)->setName(name); @@ -130,6 +172,8 @@ void QDuseDesignSpaceObject::setGroupProperties() d->groupProperties.insert(QStringLiteral("QObject"), new QMetaProperty(metaObject->property(metaObject->indexOfProperty("objectName")))); d->propertyGroups << QStringLiteral("QDuseDesignSpace"); + d->groupProperties.insert(QStringLiteral("QDuseDesignSpace"), new QMetaProperty(metaObject->property(metaObject->indexOfProperty("elementImports")))); + d->groupProperties.insert(QStringLiteral("QDuseDesignSpace"), new QMetaProperty(metaObject->property(metaObject->indexOfProperty("packageImports")))); d->groupProperties.insert(QStringLiteral("QDuseDesignSpace"), new QMetaProperty(metaObject->property(metaObject->indexOfProperty("name")))); d->groupProperties.insert(QStringLiteral("QDuseDesignSpace"), new QMetaProperty(metaObject->property(metaObject->indexOfProperty("requiredProfile")))); d->groupProperties.insert(QStringLiteral("QDuseDesignSpace"), new QMetaProperty(metaObject->property(metaObject->indexOfProperty("designDimensions")))); @@ -138,6 +182,26 @@ void QDuseDesignSpaceObject::setGroupProperties() void QDuseDesignSpaceObject::setPropertyData() { + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, AggregationRole, QStringLiteral("composite")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, PropertyClassRole, QStringLiteral("QDuseDesignSpace")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, PropertyTypeRole, QStringLiteral("QSet<QUmlElementImport *>")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, IsDerivedRole, false); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, IsDerivedUnionRole, false); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, DocumentationRole, QStringLiteral("The elements imported by the design space.")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, RedefinedPropertiesRole, QStringLiteral("")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, SubsettedPropertiesRole, QStringLiteral("")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, elementImports, OppositeEndRole, QStringLiteral("")); + + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, AggregationRole, QStringLiteral("composite")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, PropertyClassRole, QStringLiteral("QDuseDesignSpace")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, PropertyTypeRole, QStringLiteral("QSet<QUmlPackageImport *>")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, IsDerivedRole, false); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, IsDerivedUnionRole, false); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, DocumentationRole, QStringLiteral("The packages imported by the design space.")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, RedefinedPropertiesRole, QStringLiteral("")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, SubsettedPropertiesRole, QStringLiteral("")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, packageImports, OppositeEndRole, QStringLiteral("")); + Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, name, AggregationRole, QStringLiteral("none")); Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, name, PropertyClassRole, QStringLiteral("QDuseDesignSpace")); Q_DECLARE_METAPROPERTY_INFO(QDuseDesignSpace, name, PropertyTypeRole, QStringLiteral("QString")); diff --git a/src/duse/qobjects/qdusedesignspaceobject_p.h b/src/duse/qobjects/qdusedesignspaceobject_p.h index b11e7270..dc32a5c2 100644 --- a/src/duse/qobjects/qdusedesignspaceobject_p.h +++ b/src/duse/qobjects/qdusedesignspaceobject_p.h @@ -58,6 +58,8 @@ class Q_DUSE_EXPORT QDuseDesignSpaceObject : public QModelingObject Q_DECLARE_PRIVATE(QModelingObject) // Properties [DesignSpace] + Q_PROPERTY(QSet<QObject *> elementImports READ elementImports NOTIFY elementImportsChanged) + Q_PROPERTY(QSet<QObject *> packageImports READ packageImports NOTIFY packageImportsChanged) Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString requiredProfile READ requiredProfile WRITE setRequiredProfile NOTIFY requiredProfileChanged) Q_PROPERTY(QList<QObject *> designDimensions READ designDimensions NOTIFY designDimensionsChanged) @@ -67,6 +69,8 @@ public: Q_INVOKABLE explicit QDuseDesignSpaceObject(QDuseDesignSpace *modelingElement); // Owned attributes [DesignSpace] + Q_INVOKABLE const QSet<QObject *> elementImports() const; + Q_INVOKABLE const QSet<QObject *> packageImports() const; Q_INVOKABLE QString name() const; Q_INVOKABLE QString requiredProfile() const; Q_INVOKABLE const QList<QObject *> designDimensions() const; @@ -75,6 +79,10 @@ public: public Q_SLOTS: // Slots for owned attributes [DesignSpace] + void addElementImport(QObject *elementImport); + void removeElementImport(QObject *elementImport); + void addPackageImport(QObject *packageImport); + void removePackageImport(QObject *packageImport); void setName(QString name); void setRequiredProfile(QString requiredProfile); void addDesignDimension(QObject *designDimension); @@ -85,6 +93,8 @@ public Q_SLOTS: Q_SIGNALS: // Signals for owned attributes [DesignSpace] + void elementImportsChanged(QSet<QObject *> elementImports); + void packageImportsChanged(QSet<QObject *> packageImports); void nameChanged(QString name); void requiredProfileChanged(QString requiredProfile); void designDimensionsChanged(QList<QObject *> designDimensions); diff --git a/src/modelingwidgets/qmodelingobjectpropertymodel.cpp b/src/modelingwidgets/qmodelingobjectpropertymodel.cpp index cd06ccbb..25482719 100644 --- a/src/modelingwidgets/qmodelingobjectpropertymodel.cpp +++ b/src/modelingwidgets/qmodelingobjectpropertymodel.cpp @@ -42,6 +42,7 @@ #include "qmodelingobjectpropertymodel_p.h" #include <QtModeling/QModelingObject> +#include <QtModeling/QModelingElement> #include <QtGui/QFontMetrics> @@ -282,7 +283,7 @@ QVariant QModelingObjectPropertyModel::data(const QModelIndex &index, int role) font.setItalic(true); } } - if (QString::fromLatin1(metaProperty->typeName()).endsWith('*')) { + if (QString::fromLatin1(metaProperty->typeName()).endsWith('*') && !qvariant_cast<QModelingObject *>(metaProperty->read(d->modelingObject))) { font.setItalic(true); } if (metaProperty->isValid() && index.column() == 0 && metaProperty->isResettable()) |