summaryrefslogtreecommitdiffstats
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
parent480140149c6ebd4a90da2227e022f51aeec935a1 (diff)
Add first steps for element creation during design space navigation
Change-Id: Ic27a8d4452d598259531315dfea15ff416cb8000 Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
-rw-r--r--examples/uml/duse-mt/src/app/SADuse.xmi11
-rw-r--r--examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp37
-rw-r--r--examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h8
-rw-r--r--scripts/normative-xmi/Duse.xmi26
-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
9 files changed, 246 insertions, 19 deletions
diff --git a/examples/uml/duse-mt/src/app/SADuse.xmi b/examples/uml/duse-mt/src/app/SADuse.xmi
index 04714586..fab95038 100644
--- a/examples/uml/duse-mt/src/app/SADuse.xmi
+++ b/examples/uml/duse-mt/src/app/SADuse.xmi
@@ -1,6 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmlns:xmi="http://www.omg.org/spec/XMI/20110701" xmlns:duse="http://liveblue.wordpress.com/Duse" xmlns:uml="http://www.omg.org/spec/UML/20110701">
<duse:DesignSpace name="SADuse" xmi:id="SADuse" requiredProfile="SADuseProfile">
+ <packageImport xmi:type="uml:PackageImport" xmi:id="_packageImport.0">
+ <importedPackage href="http://www.omg.org/spec/UML/20110701/PrimitiveTypes.xmi#_0"/>
+ </packageImport>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.0">
+ <importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#NamedElement"/>
+ </elementImport>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.1">
+ <importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#Component"/>
+ </elementImport>
<qualityMetric xmi:type="duse:QualityMetric" name="Control Robustness" xmi:id="SADuse-ControlRobustness">
<expression xmi:type="uml:OpaqueExpression" xmi:id="SADuse-ControlRobustness-Expression">
<language>JavaScript</language>
@@ -40,7 +49,9 @@
<language>JavaScript</language>
<body>input</body>
</valueSelectionRule>
+ <targetProperty href="NamedElement-visibility"/>
</modelChange>
+ <addedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#Component"/>
</variationPoint>
<variationPoint xmi:type="duse:VariationPoint" name="Proportional-Integral" xmi:id="SADuse-ControlLaw-Proportional-Integral">
<modelChange xmi:type="duse:ModelChange" xmi:id="SADuse-ControlLaw-Proportional-Integral-ModelChange1">
diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp
index c07fb6e5..f1fd43bc 100644
--- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp
+++ b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp
@@ -53,7 +53,6 @@
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QApplication>
-
#include <QtCore/QFileInfo>
#include <QtScript/QScriptValueIterator>
@@ -79,6 +78,8 @@
#include "newdusedesigndialog.h"
+#include <QDebug>
+
template <class T>
QScriptValue qSetToScriptValue(QScriptEngine *engine, const QSet<T *> &elements)
{
@@ -123,10 +124,10 @@ DesignSpaceExplorerPlugin::DesignSpaceExplorerPlugin(QObject *parent) :
_metricsQuickView(new QQuickView),
_designSpaceExplorer(new QTableWidget),
_currentDesignSpaceLocationView(new QModelingObjectView),
- _currentDesignSpaceLocationModel(new QModelingObjectModel),
+ _currentDesignSpaceLocationQtModel(new QModelingObjectModel),
_newDuseDesignDialog(new NewDuseDesignDialog)
{
- _currentDesignSpaceLocationView->setModel(_currentDesignSpaceLocationModel);
+ _currentDesignSpaceLocationView->setModel(_currentDesignSpaceLocationQtModel);
}
DesignSpaceExplorerPlugin::~DesignSpaceExplorerPlugin()
@@ -305,22 +306,30 @@ void DesignSpaceExplorerPlugin::openDuseDesign()
void DesignSpaceExplorerPlugin::currentDesignSpaceLocationChanged()
{
- qDeleteAll(_currentDesignSpaceLocation);
+ qDeleteAll(_currentDesignSpaceLocationMofModel);
+ _currentDesignSpaceLocationMofModel.clear();
+
_currentDesignSpaceLocation.clear();
-// QXmiReader reader;
-// QFile inputModel(_newDuseDesignDialog->_inputModelFileName);
-// if (!inputModel.open(QFile::ReadOnly | QFile::Text)) {
-// QMessageBox::critical(0, tr("Create new DuSE design"), tr("Cannot read file %1").arg(_newDuseDesignDialog->_inputModelFileName));
-// return;
-// }
-// _currentDesignSpaceLocation = reader.readFile(&inputModel);
+ QModelingObject *designSpaceObject = _duseInstance.first()->asQModelingObject();
+ int rowCount = _designSpaceExplorer->rowCount();
+ for (int i = 0; i < rowCount; ++i)
+ _currentDesignSpaceLocation[_designSpaceExplorer->item(i, 1)->text()][qmodelingelementproperty_cast<QDuseDesignDimension *>(designSpaceObject->findChild<QModelingObject *>(_designSpaceExplorer->item(i, 0)->text()))] = qmodelingelementproperty_cast<QDuseVariationPoint *>(designSpaceObject->findChild<QModelingObject *>((dynamic_cast<QComboBox *>(_designSpaceExplorer->cellWidget(i, 2)))->currentText()));
+
foreach (QModelingElement *element, _core->projectController()->currentModelElements())
- _currentDesignSpaceLocation << element->clone();
+ _currentDesignSpaceLocationMofModel << element->clone();
QList<QModelingObject *> currentModelObjects;
- foreach (QModelingElement *element, _currentDesignSpaceLocation)
+ foreach (QModelingElement *element, _currentDesignSpaceLocationMofModel)
currentModelObjects << element->asQModelingObject();
- _currentDesignSpaceLocationModel->setModelingObjects(currentModelObjects);
+ QDuseDesignSpace *designSpace = dynamic_cast<QDuseDesignSpace *>(_duseInstance.first());
+ foreach (QDuseDesignDimension *designDimension, designSpace->designDimensions())
+ foreach (QDuseDesignDimensionInstance *designDimensionInstance, designDimension->designDimensionInstances()) {
+ QDuseVariationPoint *variationPoint = _currentDesignSpaceLocation[designDimensionInstance->targetInstance()->asQModelingObject()->objectName()][designDimension];
+ foreach (QModelingElement *addedElement, variationPoint->addedElements())
+ qDebug() << "Added" << addedElement->asQModelingObject()->objectName();
+ }
+
+ _currentDesignSpaceLocationQtModel->setModelingObjects(currentModelObjects);
}
diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h
index b91028ab..f9602ca4 100644
--- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h
+++ b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h
@@ -55,6 +55,9 @@ class QModelingElement;
class QModelingObjectModel;
class QModelingObjectView;
+class QDuseDesignDimension;
+class QDuseVariationPoint;
+
namespace Duse {
class ICore;
}
@@ -82,11 +85,12 @@ private:
QQuickView *_metricsQuickView;
QTableWidget *_designSpaceExplorer;
QModelingObjectView *_currentDesignSpaceLocationView;
- QModelingObjectModel *_currentDesignSpaceLocationModel;
+ QModelingObjectModel *_currentDesignSpaceLocationQtModel;
NewDuseDesignDialog *_newDuseDesignDialog;
QList<QModelingElement *> _duseInstance;
- QList<QModelingElement *> _currentDesignSpaceLocation;
+ QList<QModelingElement *> _currentDesignSpaceLocationMofModel;
+ QHash<QString, QHash<QDuseDesignDimension *, QDuseVariationPoint *> > _currentDesignSpaceLocation;
QScriptEngine _engine;
diff --git a/scripts/normative-xmi/Duse.xmi b/scripts/normative-xmi/Duse.xmi
index b0fe8c6b..9abe36fd 100644
--- a/scripts/normative-xmi/Duse.xmi
+++ b/scripts/normative-xmi/Duse.xmi
@@ -7,12 +7,18 @@
<elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.0">
<importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#Property"/>
</elementImport>
- <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.0">
+ <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.1">
<importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#OpaqueExpression"/>
</elementImport>
- <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.0">
+ <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.2">
<importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#Element"/>
</elementImport>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.3">
+ <importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#ElementImport"/>
+ </elementImport>
+ <elementImport xmi:type="uml:ElementImport" xmi:id="ElementImport.4">
+ <importedElement href="http://www.omg.org/spec/UML/20110701/UML.xmi#PackageImport"/>
+ </elementImport>
<packagedElement xmi:type="uml:Association" name="A_designSpace_designDimension" xmi:id="A_designSpace_designDimension">
<memberEnd xmi:idref="DesignSpace-designDimension"/>
<memberEnd xmi:idref="A_designSpace_designDimension-designSpace"/>
@@ -54,6 +60,22 @@
</ownedEnd>
</packagedElement>
<packagedElement xmi:type="uml:Class" name="DesignSpace" xmi:id="DesignSpace">
+ <ownedAttribute xmi:type="uml:Property" name="elementImport" visibility="public" aggregation="composite" xmi:id="DesignSpace-elementImport">
+ <ownedComment xmi:type="uml:Comment" xmi:id="DesignSpace-elementImport-_ownedComment.0" annotatedElement="DesignSpace-elementImport">
+ <body>The elements imported by the design space.</body>
+ </ownedComment>
+ <type href="http://www.omg.org/spec/UML/20110701/UML.xmi#ElementImport"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" value="*" xmi:id="DesignSpace-elementImport-LiteralUnlimitedNatural.1"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="DesignSpace-elementImport-LiteralInteger.1"/>
+ </ownedAttribute>
+ <ownedAttribute xmi:type="uml:Property" name="packageImport" visibility="public" aggregation="composite" xmi:id="DesignSpace-packageImport">
+ <ownedComment xmi:type="uml:Comment" xmi:id="DesignSpace-packageImport-_ownedComment.0" annotatedElement="DesignSpace-packageImport">
+ <body>The packages imported by the design space.</body>
+ </ownedComment>
+ <type href="http://www.omg.org/spec/UML/20110701/UML.xmi#PackageImport"/>
+ <upperValue xmi:type="uml:LiteralUnlimitedNatural" value="*" xmi:id="DesignSpace-packageImport-LiteralUnlimitedNatural.1"/>
+ <lowerValue xmi:type="uml:LiteralInteger" xmi:id="DesignSpace-packageImport-LiteralInteger.1"/>
+ </ownedAttribute>
<ownedComment xmi:type="uml:Comment" xmi:id="DesignSpace-_ownedComment.0" annotatedElement="DesignSpace">
<body>A design space entails the design dimensions (degrees of freedom) and quality metrics for a particular application domain.</body>
</ownedComment>
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())