summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2013-11-27 14:59:39 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2013-11-27 19:07:09 +0100
commit1c5eb2d398f03e3a1227305aab652c18ed7df174 (patch)
tree028a89fed1cee7ee7fdc8a7ce01c9e008efc5ac6 /src
parent480140149c6ebd4a90da2227e022f51aeec935a1 (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.cpp96
-rw-r--r--src/duse/qdusedesignspace.h10
-rw-r--r--src/duse/qobjects/qdusedesignspaceobject.cpp64
-rw-r--r--src/duse/qobjects/qdusedesignspaceobject_p.h10
-rw-r--r--src/modelingwidgets/qmodelingobjectpropertymodel.cpp3
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())