diff options
author | Sandro S. Andrade <[email protected]> | 2014-10-28 11:22:22 -0300 |
---|---|---|
committer | Sandro S. Andrade <[email protected]> | 2014-10-28 15:24:07 +0100 |
commit | 63b4ed0994341b1342eeec6c543f7eb0cfe61b66 (patch) | |
tree | c6324a63ba1c25efa06da975af7062f4637be9d4 /examples/uml/duse-mt/src/plugins/designspaceexplorer | |
parent | 001a7e58fcaa2b8c149b8e4a223c8d5f097c0ef9 (diff) |
New DuSE-MT location: [email protected]:duse-mt/duse-mt.git
Change-Id: I4f3e65542703e39a54d20fa2c418fc61a1dca59c
Reviewed-by: Sandro S. Andrade <[email protected]>
Diffstat (limited to 'examples/uml/duse-mt/src/plugins/designspaceexplorer')
17 files changed, 0 insertions, 1037 deletions
diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer.json b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer.json deleted file mode 100644 index 901f0694..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "Category": "Automated Architecture Design", - "Vendor": "Qt Project", - "Version": "1.0" -} diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer.pro b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer.pro deleted file mode 100644 index 56f99df5..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer.pro +++ /dev/null @@ -1,21 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2013-10-25T17:38:51 -# -#------------------------------------------------- - -QT += widgets quick modeling modelingwidgets script uml duse - -include(../../duse-mt-plugin.pri) - -SOURCES += designspaceexplorerplugin.cpp \ - newdusedesigndialog.cpp - -HEADERS += designspaceexplorerplugin.h \ - newdusedesigndialog.h - -FORMS += newdusedesigndialog.ui - -RESOURCES += qml/designspaceexplorer.qrc - -OTHER_FILES += designspaceexplorer.json diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer_dependencies.pri b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer_dependencies.pri deleted file mode 100644 index 02490f2a..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorer_dependencies.pri +++ /dev/null @@ -1 +0,0 @@ -DUSEMT_PLUGIN_NAME = DesignSpaceExplorer diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp b/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp deleted file mode 100644 index 5c932725..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.cpp +++ /dev/null @@ -1,404 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade <[email protected]> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtUml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "designspaceexplorerplugin.h" - -#include <duseinterfaces/iuicontroller.h> -#include <duseinterfaces/iplugincontroller.h> -#include <duseinterfaces/iprojectcontroller.h> - -#include <QtQuick/QQuickView> - -#include <QtWidgets/QAction> -#include <QtWidgets/QComboBox> -#include <QtWidgets/QMessageBox> -#include <QtWidgets/QHeaderView> -#include <QtWidgets/QTableWidget> -#include <QtWidgets/QApplication> - -#include <QtCore/QFileInfo> - -#include <QtScript/QScriptValueIterator> - -#include <QtModeling/QXmiReader> -#include <QtModeling/QMetaModelPlugin> - -#include <QtModelingWidgets/QModelingObjectView> -#include <QtModelingWidgets/QModelingObjectModel> - -#include <QtUml/QUmlModel> -#include <QtUml/QUmlProfile> -#include <QtUml/QUmlProperty> -#include <QtUml/QUmlOpaqueExpression> -#include <QtUml/QUmlProfileApplication> - -#include <QtDuse/QDuseDesignSpace> -#include <QtDuse/QDuseModelChange> -#include <QtDuse/QDuseVariationPoint> -#include <QtDuse/QDuseDesignDimension> -#include <QtDuse/QDuseDesignDimensionInstance> - -#include "newdusedesigndialog.h" - -#include <QDebug> - -template <class T> -QScriptValue qSetToScriptValue(QScriptEngine *engine, const QSet<T *> &elements) -{ - QScriptValue array = engine->newArray(); - foreach (T *element, elements) - array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << engine->newQObject(element)); - return array; -} - -template <class T> -void scriptValueToQSet(const QScriptValue &obj, QSet<T *> &elements) -{ - QScriptValueIterator it(obj); - while (it.hasNext()) { - it.next(); - elements.insert(qobject_cast<T *>(it.value().toQObject())); - } -} - -template <class T> -QScriptValue qListToScriptValue(QScriptEngine *engine, const QList<T *> &elements) -{ - QScriptValue array = engine->newArray(); - foreach (T *element, elements) - array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << engine->newQObject(element)); - return array; -} - -template <class T> -void scriptValueToQList(const QScriptValue &obj, QList<T *> &elements) -{ - QScriptValueIterator it(obj); - while (it.hasNext()) { - it.next(); - elements.append(qobject_cast<T *>(it.value().toQObject())); - } -} - -namespace DuSE -{ - -DesignSpaceExplorerPlugin::DesignSpaceExplorerPlugin(QObject *parent) : - IPlugin(parent), - _currentDesignSpaceLocationQuickView(new QQuickView), - _metricsQuickView(new QQuickView), - _designSpaceExplorer(new QTableWidget), - _currentDesignSpaceLocationView(new QModelingObjectView), - _currentDesignSpaceLocationQtModel(new QModelingObjectModel), - _newDuseDesignDialog(new DuSE::NewDuseDesignDialog), - _engine(0) -{ - _currentDesignSpaceLocationView->setModel(_currentDesignSpaceLocationQtModel); -} - -DesignSpaceExplorerPlugin::~DesignSpaceExplorerPlugin() -{ - delete _newDuseDesignDialog; - delete _engine; -} - -bool DesignSpaceExplorerPlugin::initialize() -{ - _currentDesignSpaceLocationQuickView->setSource(QUrl("qrc:/designspaceexplorer/currentdesignspacelocation.qml")); - _currentDesignSpaceLocationQuickView->setResizeMode(QQuickView::SizeRootObjectToView); - - ICore::self()->uiController()->addCentralWidgetTab(QWidget::createWindowContainer(_currentDesignSpaceLocationQuickView), "Current Design Space Location"); - - _metricsQuickView->setSource(QUrl("qrc:/designspaceexplorer/qualitymetrics/qualitymetrics.qml")); - _metricsQuickView->setResizeMode(QQuickView::SizeRootObjectToView); - - ICore::self()->uiController()->addDockWidget(Qt::LeftDockWidgetArea, tr("Quality Metrics"), QWidget::createWindowContainer(_metricsQuickView)); - - ICore::self()->uiController()->addDockWidget(Qt::LeftDockWidgetArea, tr("Current Location Inspector"), _currentDesignSpaceLocationView); - - _designSpaceExplorer->setAlternatingRowColors(true); - _designSpaceExplorer->horizontalHeader()->setStretchLastSection(true); - _designSpaceExplorer->verticalHeader()->setVisible(false); - _designSpaceExplorer->setRowCount(0); - _designSpaceExplorer->setColumnCount(3); - _designSpaceExplorer->setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Design Dimension"))); - _designSpaceExplorer->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Dimension Instance Target"))); - _designSpaceExplorer->setHorizontalHeaderItem(2, new QTableWidgetItem(tr("Variation Point"))); - _designSpaceExplorer->resizeColumnToContents(0); - _designSpaceExplorer->resizeColumnToContents(1); - _designSpaceExplorer->resizeColumnToContents(2); - - ICore::self()->uiController()->addDockWidget(Qt::RightDockWidgetArea, "Design Space Explorer", _designSpaceExplorer); - - QString iconThemeName; - - QAction *_actionFileNewDuseDesign = new QAction(0); - _actionFileNewDuseDesign->setText(QApplication::translate("MainWindow", "New &DuSE Design ...", 0)); - _actionFileNewDuseDesign->setShortcut(QApplication::translate("MainWindow", "Ctrl+D", 0)); - _actionFileNewDuseDesign->setObjectName(QStringLiteral("actionFileNewDuseDesign")); - QIcon icon8; - iconThemeName = QStringLiteral("document-new"); - if (QIcon::hasThemeIcon(iconThemeName)) { - icon8 = QIcon::fromTheme(iconThemeName); - } else { - icon8.addFile(QStringLiteral(""), QSize(), QIcon::Normal, QIcon::Off); - } - _actionFileNewDuseDesign->setIcon(icon8); - connect(_actionFileNewDuseDesign, &QAction::triggered, this, &DesignSpaceExplorerPlugin::newDuseDesign); - ICore::self()->uiController()->addAction(_actionFileNewDuseDesign, "menu_File"); - - QAction *_actionFileOpenDuseDesign = new QAction(0); - _actionFileOpenDuseDesign->setText(QApplication::translate("MainWindow", "Open DuSE Design ...", 0)); - _actionFileOpenDuseDesign->setShortcut(QApplication::translate("MainWindow", "Ctrl+U", 0)); - _actionFileOpenDuseDesign->setObjectName(QStringLiteral("actionFileOpenDuseDesign")); - QIcon icon9; - iconThemeName = QStringLiteral("document-open"); - if (QIcon::hasThemeIcon(iconThemeName)) { - icon9 = QIcon::fromTheme(iconThemeName); - } else { - icon9.addFile(QStringLiteral(""), QSize(), QIcon::Normal, QIcon::Off); - } - _actionFileOpenDuseDesign->setIcon(icon9); - connect(_actionFileOpenDuseDesign, &QAction::triggered, this, &DesignSpaceExplorerPlugin::openDuseDesign); - ICore::self()->uiController()->addAction(_actionFileOpenDuseDesign, "menu_File"); - - connect(ICore::self()->projectController(), SIGNAL(modelOpened(QList<QModelingObject*>)), this, SLOT(initializeEngine(QList<QModelingObject*>))); - connect(ICore::self()->projectController(), SIGNAL(modelAboutToBeClosed(QList<QModelingObject*>)), this, SLOT(destroyEngine())); - connect(ICore::self()->projectController(), SIGNAL(modelClosed()), _currentDesignSpaceLocationQtModel, SLOT(clear())); - connect(ICore::self()->projectController(), SIGNAL(modelClosed()), this, SLOT(resetDesignSpaceExplorer())); - - return true; -} - -void DesignSpaceExplorerPlugin::initializeEngine(QList<QModelingObject *> modelingObjects) -{ - Q_UNUSED(modelingObjects); - _engine = new QScriptEngine; - qScriptRegisterMetaType(_engine, qSetToScriptValue<QObject>, scriptValueToQSet<QObject>); - qScriptRegisterMetaType(_engine, qListToScriptValue<QObject>, scriptValueToQList<QObject>); - currentDesignSpaceLocationChanged(); -} - -void DesignSpaceExplorerPlugin::destroyEngine() -{ - delete _engine; - _engine = 0; -} - -void DesignSpaceExplorerPlugin::resetDesignSpaceExplorer() -{ - qDeleteAll(_duseInstance); - _duseInstance.clear(); - qDeleteAll(_currentDesignSpaceLocationMofModel); - _currentDesignSpaceLocationMofModel.clear(); - - _designSpaceExplorer->setRowCount(0); - _designSpaceExplorer->clearContents(); -} - -void DesignSpaceExplorerPlugin::newDuseDesign() -{ - ICore::self()->projectController()->closeModel(); - resetDesignSpaceExplorer(); - do { - if (_newDuseDesignDialog->exec() == QDialog::Accepted) { - if (_newDuseDesignDialog->_inputModelFileName.isEmpty() || _newDuseDesignDialog->_duseInstanceModelFileName.isEmpty()) { - QMessageBox::critical(0, tr("Create new DuSE design"), tr("You should select an input model and a DuSE instance model !")); - } - else { - QFile file(_newDuseDesignDialog->_duseInstanceModelFileName); - if (!file.open(QFile::ReadOnly | QFile::Text)) { - QMessageBox::critical(0, tr("Create new DuSE design"), tr("Cannot read DuSE instance file !")); - return; - } - QXmiReader reader; - _duseInstance = reader.readFile(&file); - if (QString::fromLatin1(_duseInstance.first()->asQModelingObject()->metaObject()->className()) != QStringLiteral("QDuseDesignSpaceObject")) { - QMessageBox::critical(0, tr("Create new DuSE design"), QStringLiteral("%1 is not a valid DuSE instance !").arg(QFileInfo(file).fileName())); - return; - } - if (!ICore::self()->projectController()->openModel(_newDuseDesignDialog->_inputModelFileName)) { - QMessageBox::critical(0, tr("Create new DuSE design"), QStringLiteral("Error loading input file %1 !").arg(_newDuseDesignDialog->_inputModelFileName)); - return; - } - - bool found = false; - QUmlModel *package = dynamic_cast<QUmlModel *>(ICore::self()->projectController()->currentModelElements().first()); - QDuseDesignSpace *designSpace = dynamic_cast<QDuseDesignSpace *>(_duseInstance.first()); - foreach (QUmlProfileApplication *profileApplication, package->profileApplications()) { - if (profileApplication->appliedProfile()->name() == designSpace->requiredProfile()) { - found = true; - break; - } - } - - if (!found) { - QMessageBox::critical(0, tr("Create new DuSE design"), QStringLiteral("Input model does not contain the required %1Profile profile application !").arg(_duseInstance.first()->asQModelingObject()->objectName())); - return; - } - - QScriptValue array = _engine->newArray(); - foreach (QObject *modelingObject, ICore::self()->projectController()->currentModelObjects()) - array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << _engine->newQObject(modelingObject)); - _engine->globalObject().setProperty("input", array); - - foreach (QDuseDesignDimension *designDimension, designSpace->designDimensions()) { - foreach (const QString &body, designDimension->instanceSelectionRule()->bodies()) { - QScriptValue value = _engine->evaluate(body); - if (value.toVariant().canConvert(QMetaType::type("QVariantList"))) { - foreach (const QVariant &variant, value.toVariant().value<QVariantList>()) { - if (variant.canConvert(QMetaType::type("QObject*"))) { - QDuseDesignDimensionInstance *designDimensionInstance = new QDuseDesignDimensionInstance; - designDimensionInstance->setTargetInstance(qmodelingelementproperty_cast<QUmlElement *>(variant.value<QObject *>())); - designDimension->addDesignDimensionInstance(designDimensionInstance); - } - } - } - else if (value.toVariant().canConvert(QMetaType::type("QObject*"))) { - QDuseDesignDimensionInstance *designDimensionInstance = new QDuseDesignDimensionInstance; - designDimensionInstance->setTargetInstance(qmodelingelementproperty_cast<QUmlElement *>(value.toVariant().value<QObject *>())); - designDimension->addDesignDimensionInstance(designDimensionInstance); - } - } - } - -// evaluateQualityMetrics(); - populateDesignSpaceExplorer(); - } - } - else - return; - } while (_newDuseDesignDialog->_inputModelFileName.isEmpty() || _newDuseDesignDialog->_duseInstanceModelFileName.isEmpty()); -} - -void DesignSpaceExplorerPlugin::populateDesignSpaceExplorer() -{ - QDuseDesignSpace *designSpace = dynamic_cast<QDuseDesignSpace *>(_duseInstance.first()); - _designSpaceExplorer->setRowCount(0); - int row = 0; - foreach (QDuseDesignDimension *dimension, designSpace->designDimensions()) { - _designSpaceExplorer->setRowCount(_designSpaceExplorer->rowCount() + dimension->designDimensionInstances().count()); - foreach (QDuseDesignDimensionInstance *instance, dimension->designDimensionInstances()) { - _designSpaceExplorer->setItem(row, 0, new QTableWidgetItem(dimension->name())); - _designSpaceExplorer->setItem(row, 1, new QTableWidgetItem(instance->targetInstance()->asQModelingObject()->objectName())); - QComboBox *comboBox = new QComboBox; - foreach (QDuseVariationPoint *variationPoint, dimension->variationPoints()) { - comboBox->addItem(variationPoint->asQModelingObject()->objectName()); - } - _designSpaceExplorer->setCellWidget(row, 2, comboBox); - connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentDesignSpaceLocationChanged())); - ++row; - } - } - _designSpaceExplorer->resizeRowsToContents(); - currentDesignSpaceLocationChanged(); -} - -void DesignSpaceExplorerPlugin::openDuseDesign() -{ -} - -void DesignSpaceExplorerPlugin::currentDesignSpaceLocationChanged() -{ - qDeleteAll(_currentDesignSpaceLocationMofModel); - _currentDesignSpaceLocationMofModel.clear(); - - _currentDesignSpaceLocation.clear(); - - if (_duseInstance.size() == 0) - return; - - 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, ICore::self()->projectController()->currentModelElements()) - _currentDesignSpaceLocationMofModel << element->clone(); - - QList<QModelingObject *> currentModelObjects; - foreach (QModelingElement *element, _currentDesignSpaceLocationMofModel) - currentModelObjects << element->asQModelingObject(); - - QDuseDesignSpace *designSpace = dynamic_cast<QDuseDesignSpace *>(_duseInstance.first()); - QUmlModel *topModel = dynamic_cast<QUmlModel *>(_currentDesignSpaceLocationMofModel.first()); - foreach (QDuseDesignDimension *designDimension, designSpace->designDimensions()) { - foreach (QDuseDesignDimensionInstance *designDimensionInstance, designDimension->designDimensionInstances()) { - QDuseVariationPoint *variationPoint = _currentDesignSpaceLocation[designDimensionInstance->targetInstance()->asQModelingObject()->objectName()][designDimension]; - foreach (QModelingElement *addedElement, variationPoint->addedElements()) { - QObject *modelingObject = addedElement->asQModelingObject(); - QMetaModelPlugin *plugin = ICore::self()->pluginController()->metamodelPlugins()[modelingObject->property("namespaceUri").toString()]; - QModelingElement *newAddedElement = plugin->createModelingElement(modelingObject->property("factoryType").toString()); - newAddedElement->asQModelingObject()->setObjectName(QStringLiteral("%1-%2").arg(designDimensionInstance->targetInstance()->asQModelingObject()->objectName()).arg(modelingObject->property("factoryType").toString())); - topModel->addPackagedElement(dynamic_cast<QUmlPackageableElement *>(newAddedElement)); - } - } - } - - foreach (QDuseDesignDimension *designDimension, designSpace->designDimensions()) { - foreach (QDuseDesignDimensionInstance *designDimensionInstance, designDimension->designDimensionInstances()) { - QDuseVariationPoint *variationPoint = _currentDesignSpaceLocation[designDimensionInstance->targetInstance()->asQModelingObject()->objectName()][designDimension]; - foreach (QDuseModelChange *modelChange, variationPoint->modelChanges()) { - QScriptValue target = _engine->evaluate(modelChange->targetSelectionRule()->bodies().first()); - if (target.toVariant().canConvert(QMetaType::type("QObject*"))) { - QObject *targetObject = target.toVariant().value<QObject *>(); - QString propertyName = modelChange->targetProperty()->name(); - QScriptValue value = _engine->evaluate(modelChange->valueSelectionRule()->bodies().first()); - QMetaProperty metaProperty = targetObject->metaObject()->property(targetObject->metaObject()->indexOfProperty(propertyName.toLatin1())); - QString typeName = QString::fromLatin1(metaProperty.typeName()); - if (metaProperty.type() == QVariant::String) { - targetObject->setProperty(propertyName.toLatin1(), value.toVariant().toString()); - } - else if (metaProperty.type() == QVariant::Int || metaProperty.isEnumType()) { - targetObject->setProperty(propertyName.toLatin1(), value.toVariant().toInt()); - } - else if (typeName.endsWith('*')) { - targetObject->setProperty(propertyName.toLatin1(), QVariant::fromValue(qmodelingelementproperty_cast<QUmlElement *>(value.toVariant().value<QObject *>()))); - } - } - } - } - } - - _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 deleted file mode 100644 index 66dfdd42..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/designspaceexplorerplugin.h +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade <[email protected]> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtUml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef DESIGNSPACEEXPLORERPLUGIN_H -#define DESIGNSPACEEXPLORERPLUGIN_H - -#include <duseinterfaces/iplugin.h> - -#include <QtScript/QScriptEngine> - -QT_BEGIN_NAMESPACE -class QQuickView; -class QTableWidget; - -class QModelingObject; -class QModelingElement; - -class QModelingObjectModel; -class QModelingObjectView; - -class QDuseDesignDimension; -class QDuseVariationPoint; -QT_END_NAMESPACE - -namespace DuSE { - -class ICore; -class NewDuseDesignDialog; - -class DesignSpaceExplorerPlugin : public IPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.liveblue.DuSE.IPlugin" FILE "designspaceexplorer.json") - -public: - DesignSpaceExplorerPlugin(QObject *parent = 0); - virtual ~DesignSpaceExplorerPlugin(); - - virtual bool initialize(); - -private Q_SLOTS: - void initializeEngine(QList<QModelingObject *> modelingObjects); - void destroyEngine(); - void resetDesignSpaceExplorer(); - void newDuseDesign(); - void openDuseDesign(); - void currentDesignSpaceLocationChanged(); - -private: - QQuickView *_currentDesignSpaceLocationQuickView; - QQuickView *_metricsQuickView; - QTableWidget *_designSpaceExplorer; - QModelingObjectView *_currentDesignSpaceLocationView; - QModelingObjectModel *_currentDesignSpaceLocationQtModel; - - DuSE::NewDuseDesignDialog *_newDuseDesignDialog; - QList<QModelingElement *> _duseInstance; - QList<QModelingElement *> _currentDesignSpaceLocationMofModel; - QHash<QString, QHash<QDuseDesignDimension *, QDuseVariationPoint *> > _currentDesignSpaceLocation; - - QScriptEngine *_engine; - - void populateDesignSpaceExplorer(); -}; - -} - -#endif // DESIGNSPACEEXPLORERPLUGIN_H - diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.cpp b/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.cpp deleted file mode 100644 index a0166669..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade <[email protected]> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtUml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "newdusedesigndialog.h" -#include "ui_newdusedesigndialog.h" - -#include <QtWidgets/QFileDialog> - -namespace DuSE -{ - -NewDuseDesignDialog::NewDuseDesignDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::NewDuseDesignDialog) -{ - ui->setupUi(this); -} - -NewDuseDesignDialog::~NewDuseDesignDialog() -{ - delete ui; -} - -void NewDuseDesignDialog::on_tbtInputModel_clicked() -{ - _inputModelFileName = QFileDialog::getOpenFileName(this, tr("Open input model"), QDir::currentPath(), "XMI files (*.xmi)"); - ui->lneInputModel->setText(_inputModelFileName); -} - -void NewDuseDesignDialog::on_tbtDuseInstanceModel_clicked() -{ - _duseInstanceModelFileName = QFileDialog::getOpenFileName(this, tr("Open DuSE instance model"), QDir::currentPath(), "XMI files (*.xmi)"); - ui->lneDuseInstanceModel->setText(_duseInstanceModelFileName); -} - -} - diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.h b/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.h deleted file mode 100644 index 6bbddb94..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.h +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade <[email protected]> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtUml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef NEWDUSEDESIGNDIALOG_H -#define NEWDUSEDESIGNDIALOG_H - -#include <QtWidgets/QDialog> - -namespace DuSE -{ - -namespace Ui { - class NewDuseDesignDialog; -} - -class NewDuseDesignDialog : public QDialog -{ - Q_OBJECT - -public: - explicit NewDuseDesignDialog(QWidget *parent = 0); - ~NewDuseDesignDialog(); - - QString _inputModelFileName; - QString _duseInstanceModelFileName; -private Q_SLOTS: - void on_tbtInputModel_clicked(); - void on_tbtDuseInstanceModel_clicked(); - -private: - Ui::NewDuseDesignDialog *ui; -}; - -} - -#endif // NEWDUSEDESIGNDIALOG_H - diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.ui b/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.ui deleted file mode 100644 index e802b0f4..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/newdusedesigndialog.ui +++ /dev/null @@ -1,102 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>DuSE::NewDuseDesignDialog</class> - <widget class="QDialog" name="DuSE::NewDuseDesignDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>453</width> - <height>127</height> - </rect> - </property> - <property name="windowTitle"> - <string>Create new DuSE design</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="lblInputModel"> - <property name="text"> - <string>Input model:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="lneInputModel"/> - </item> - <item row="0" column="2"> - <widget class="QToolButton" name="tbtInputModel"> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="lblDuseInstanceModel"> - <property name="text"> - <string>DuSE instance model:</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="lneDuseInstanceModel"/> - </item> - <item row="1" column="2"> - <widget class="QToolButton" name="tbtDuseInstanceModel"> - <property name="text"> - <string>...</string> - </property> - </widget> - </item> - </layout> - </item> - <item row="1" column="0"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections> - <connection> - <sender>buttonBox</sender> - <signal>accepted()</signal> - <receiver>DuSE::NewDuseDesignDialog</receiver> - <slot>accept()</slot> - <hints> - <hint type="sourcelabel"> - <x>248</x> - <y>254</y> - </hint> - <hint type="destinationlabel"> - <x>157</x> - <y>274</y> - </hint> - </hints> - </connection> - <connection> - <sender>buttonBox</sender> - <signal>rejected()</signal> - <receiver>DuSE::NewDuseDesignDialog</receiver> - <slot>reject()</slot> - <hints> - <hint type="sourcelabel"> - <x>316</x> - <y>260</y> - </hint> - <hint type="destinationlabel"> - <x>286</x> - <y>274</y> - </hint> - </hints> - </connection> - </connections> -</ui> diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/currentdesignspacelocation.qml b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/currentdesignspacelocation.qml deleted file mode 100644 index c4f95246..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/currentdesignspacelocation.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade <[email protected]> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtUml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.0 - -Flickable { - id: flickable - width: 200; height: 200 - contentHeight: 2890 - contentWidth: 1540 - rightMargin: 0; leftMargin: 0; topMargin: 0; bottomMargin: 0 - MouseArea { - anchors.fill: parent - onPressed: parent.focus = true; - } - Image { - anchors.fill: parent - fillMode: Image.Tile - source: "grid.png" - } -} diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/designspaceexplorer.qrc b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/designspaceexplorer.qrc deleted file mode 100644 index 5709d182..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/designspaceexplorer.qrc +++ /dev/null @@ -1,12 +0,0 @@ -<RCC> - <qresource prefix="/designspaceexplorer"> - <file>qualitymetrics/qualitymetrics.qml</file> - <file>qualitymetrics/content/background.png</file> - <file>qualitymetrics/content/Dial.qml</file> - <file>qualitymetrics/content/needle_shadow.png</file> - <file>qualitymetrics/content/needle.png</file> - <file>qualitymetrics/content/overlay.png</file> - <file>currentdesignspacelocation.qml</file> - <file>grid.png</file> - </qresource> -</RCC> diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/grid.png b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/grid.png Binary files differdeleted file mode 100644 index 52162608..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/grid.png +++ /dev/null diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/Dial.qml b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/Dial.qml deleted file mode 100644 index 12a24f1d..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/Dial.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the examples of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick 2.0 - -Item { - width: view.width; height: 188 - property alias label: label.text - property alias value: root.value - Item { - id: root - property real value : 0 - - width: 210; height: 210 - anchors.centerIn: parent - scale: 0.75 - - Image { source: "background.png" } - - Image { - x: 96 - y: 35 - source: "needle_shadow.png" - transform: Rotation { - origin.x: 9; origin.y: 67 - angle: needleRotation.angle - } - } - Image { - id: needle - x: 98; y: 33 - antialiasing: true - source: "needle.png" - transform: Rotation { - id: needleRotation - origin.x: 5; origin.y: 65 - angle: Math.min(Math.max(-130, root.value*2.6 - 130), 133) - Behavior on angle { - SpringAnimation { - spring: 1.4 - damping: .15 - } - } - } - } - Image { x: 21; y: 18; source: "overlay.png" } - } - Text { - anchors.top: root.bottom - anchors.topMargin: -30 - anchors.horizontalCenter: parent.horizontalCenter - id: label - color: "white" - font { family: "Korolev" } - } -} diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/background.png b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/background.png Binary files differdeleted file mode 100644 index 75d555d7..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/background.png +++ /dev/null diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/needle.png b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/needle.png Binary files differdeleted file mode 100644 index 2d19f750..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/needle.png +++ /dev/null diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/needle_shadow.png b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/needle_shadow.png Binary files differdeleted file mode 100644 index 8d8a928c..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/needle_shadow.png +++ /dev/null diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/overlay.png b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/overlay.png Binary files differdeleted file mode 100644 index 3860a7b5..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/content/overlay.png +++ /dev/null diff --git a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/qualitymetrics.qml b/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/qualitymetrics.qml deleted file mode 100644 index ff13b340..00000000 --- a/examples/uml/duse-mt/src/plugins/designspaceexplorer/qml/qualitymetrics/qualitymetrics.qml +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade <[email protected]> -** Contact: http://www.qt-project.org/legal -** -** This file is part of the QtUml module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick 2.0 -import "content" - -Rectangle { - id: root - color: "#545454" - - ListView { - id: view - anchors { fill: parent; bottomMargin: 30 } - model: metrics - preferredHighlightBegin: 0; preferredHighlightEnd: 0 - highlightRangeMode: ListView.StrictlyEnforceRange - orientation: ListView.Vertical - snapMode: ListView.SnapOneItem; - delegate: Dial { - label: modelData.name; - value: modelData.value; - } - } - Rectangle { - width: root.width; height: 30 - anchors { top: view.bottom; bottom: parent.bottom } - color: "gray" - - Row { - anchors.centerIn: parent - spacing: 20 - - Repeater { - model: metrics ? metrics.length:0 - - Rectangle { - width: 5; height: 5 - radius: 3 - color: view.currentIndex == index ? "blue" : "white" - - MouseArea { - width: 20; height: 20 - anchors.centerIn: parent - onClicked: view.currentIndex = index - } - } - } - } - } -} |