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 | |
parent | 480140149c6ebd4a90da2227e022f51aeec935a1 (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.xmi | 11 | ||||
-rw-r--r-- | examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp | 37 | ||||
-rw-r--r-- | examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h | 8 | ||||
-rw-r--r-- | scripts/normative-xmi/Duse.xmi | 26 | ||||
-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 |
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()) |