diff options
Diffstat (limited to 'examples/uml/duse-mt')
-rw-r--r-- | examples/uml/duse-mt/SADuSE.xmi | 14 | ||||
-rw-r--r-- | examples/uml/duse-mt/duse-mt.qrc | 1 | ||||
-rw-r--r-- | examples/uml/duse-mt/mainwindow.cpp | 173 | ||||
-rw-r--r-- | examples/uml/duse-mt/mainwindow.h | 17 | ||||
-rw-r--r-- | examples/uml/duse-mt/mainwindow.ui | 20 | ||||
-rw-r--r-- | examples/uml/duse-mt/qml/designspaceview.qml | 58 | ||||
-rw-r--r-- | examples/uml/duse-mt/qml/dialcontrol/content/Dial.qml | 1 | ||||
-rw-r--r-- | examples/uml/duse-mt/qml/dialcontrol/dialcontrol.qml | 1 | ||||
-rw-r--r-- | examples/uml/duse-mt/qml/paretofrontview.qml | 9 | ||||
-rw-r--r-- | examples/uml/duse-mt/qml/welcomeview.qml | 2 |
10 files changed, 261 insertions, 35 deletions
diff --git a/examples/uml/duse-mt/SADuSE.xmi b/examples/uml/duse-mt/SADuSE.xmi index 5ef6c0c8..ecef7abc 100644 --- a/examples/uml/duse-mt/SADuSE.xmi +++ b/examples/uml/duse-mt/SADuSE.xmi @@ -1,10 +1,10 @@ <?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:DesignSpace name="SADuSE" xmi:id="SADuSE"> - <qualityMetric xmi:type="duse:QualityMetric" name="Control Robustness" xmi:id="SADuSE-Control Robustness"/> - <qualityMetric xmi:type="duse:QualityMetric" name="Average Maximum Overshoot" xmi:id="SADuSE-Average Maximum Overshoot"/> - <qualityMetric xmi:type="duse:QualityMetric" name="Average Settling Time" xmi:id="SADuSE-Average Settling Time"/> - <qualityMetric xmi:type="duse:QualityMetric" name="Control Overhead" xmi:id="SADuSE-Control Overhead"/> + <qualityMetric xmi:type="duse:QualityMetric" name="Control Robustness" xmi:id="SADuSE-Control Robustness" expression="(1/input[0].ownedElements.length)*120"/> + <qualityMetric xmi:type="duse:QualityMetric" name="Average Maximum Overshoot" xmi:id="SADuSE-Average Maximum Overshoot" expression="(1/input[0].ownedTypes.length)*120"/> + <qualityMetric xmi:type="duse:QualityMetric" name="Average Settling Time" xmi:id="SADuSE-Average Settling Time" expression="var ot = input[0].ownedTypes.length; var sum = 0; for (var j = 0; j < ot; ++j) sum = sum+input[0].ownedTypes[j].ownedAttributes.length; var t = sum/(ot+1); t/sum*120"/> + <qualityMetric xmi:type="duse:QualityMetric" name="Control Overhead" xmi:id="SADuSE-Control Overhead" expression="input[0].ownedAttributes"/> <designDimension xmi:type="duse:DesignDimension" name="Control Law" instanceSelectionRule="var inputLength = input.length; var selected = new Array(); for (var i = 0; i < inputLength; ++i) { if (input[i] instanceof QSADuseProfileProcessComponent) selected.push(input[i].base_Component); } selected;" xmi:id="SADuSE-Control Law"> <variationPoint xmi:type="duse:VariationPoint" name="Proportional" xmi:id="SADuSE-Control Law-Proportional"/> <variationPoint xmi:type="duse:VariationPoint" name="Proportional-Integral" xmi:id="SADuSE-Control Law-Proportional-Integral"/> @@ -13,7 +13,7 @@ <variationPoint xmi:type="duse:VariationPoint" name="Proportional-Integral-Derivative" xmi:id="SADuSE-Control Law-Proportional-Integral-Derivative"/> <variationPoint xmi:type="duse:VariationPoint" name="Precompensated Static State Feedback" xmi:id="SADuSE-Control Law-Precompensated Static State Feedback"/> </designDimension> - <designDimension xmi:type="duse:DesignDimension" name="Tuning Approach" xmi:id="SADuSE-Tuning Approach"> + <designDimension xmi:type="duse:DesignDimension" name="Tuning Approach" instanceSelectionRule="var inputLength = input.length; var selected = new Array(); for (var i = 0; i < inputLength; ++i) { if (input[i] instanceof QSADuseProfileProcessComponent) selected.push(input[i].base_Component); } selected;" xmi:id="SADuSE-Tuning Approach"> <variationPoint xmi:type="duse:VariationPoint" name="Cohen-Coon" xmi:id="SADuSE-Tuning Approach-Cohen-Coon"/> <variationPoint xmi:type="duse:VariationPoint" name="CHR-20OS-DR" xmi:id="SADuSE-Tuning Approach-CHR-20OS-DR"/> <variationPoint xmi:type="duse:VariationPoint" name="Ziegler-Nichols" xmi:id="SADuSE-Tuning Approach-Ziegler-Nichols"/> @@ -22,12 +22,12 @@ <variationPoint xmi:type="duse:VariationPoint" name="CHR-0OS-RT" xmi:id="SADuSE-Tuning Approach-CHR-0OS-RT"/> <variationPoint xmi:type="duse:VariationPoint" name="Linear Quadratic Regulator" xmi:id="SADuSE-Tuning Approach-Linear Quadratic Regulator"/> </designDimension> - <designDimension xmi:type="duse:DesignDimension" name="Control Adaptation" xmi:id="SADuSE-Control Adaptation"> + <designDimension xmi:type="duse:DesignDimension" name="Control Adaptation" instanceSelectionRule="var inputLength = input.length; var selected = new Array(); for (var i = 0; i < inputLength; ++i) { if (input[i] instanceof QSADuseProfileProcessComponent) selected.push(input[i].base_Component); } selected;" xmi:id="SADuSE-Control Adaptation"> <variationPoint xmi:type="duse:VariationPoint" name="Gain Scheduling" xmi:id="SADuSE-Control Adaptation-Gain Scheduling"/> <variationPoint xmi:type="duse:VariationPoint" name="Model Identification Adaptive Control (MIAC)" xmi:id="SADuSE-Control Adaptation-Model Identification Adaptive Control (MIAC)"/> <variationPoint xmi:type="duse:VariationPoint" name="Fixed Gain (no adaptation)" xmi:id="SADuSE-Control Adaptation-Fixed Gain (no adaptation)"/> </designDimension> - <designDimension xmi:type="duse:DesignDimension" name="MAPE Deployment" xmi:id="SADuSE-MAPE Deployment"> + <designDimension xmi:type="duse:DesignDimension" name="MAPE Deployment" instanceSelectionRule="var inputLength = input.length; var selected = new Array(); for (var i = 0; i < inputLength; ++i) { if (input[i] instanceof QSADuseProfileProcessComponent) selected.push(input[i].base_Component); } selected;" xmi:id="SADuSE-MAPE Deployment"> <variationPoint xmi:type="duse:VariationPoint" name="Local Control + Shared Reference" xmi:id="SADuSE-MAPE Deployment-Local Control + Shared Reference"/> <variationPoint xmi:type="duse:VariationPoint" name="Local Control + Shared Error" xmi:id="SADuSE-MAPE Deployment-Local Control + Shared Error"/> <variationPoint xmi:type="duse:VariationPoint" name="Global Control" xmi:id="SADuSE-MAPE Deployment-Global Control"/> diff --git a/examples/uml/duse-mt/duse-mt.qrc b/examples/uml/duse-mt/duse-mt.qrc index 76b70dde..160c4ca9 100644 --- a/examples/uml/duse-mt/duse-mt.qrc +++ b/examples/uml/duse-mt/duse-mt.qrc @@ -22,5 +22,6 @@ <file>metamodels/SADuSEProfile.xmi</file> <file>qml/welcomeview.qml</file> <file>qml/welcome-background.jpg</file> + <file>qml/designspaceview.qml</file> </qresource> </RCC> diff --git a/examples/uml/duse-mt/mainwindow.cpp b/examples/uml/duse-mt/mainwindow.cpp index 018cb129..a2ceb4d9 100644 --- a/examples/uml/duse-mt/mainwindow.cpp +++ b/examples/uml/duse-mt/mainwindow.cpp @@ -53,6 +53,7 @@ #include <QtWidgets/QFileDialog> #include <QtWidgets/QMessageBox> #include <QtWidgets/QItemDelegate> +#include <QtWidgets/QProgressDialog> #include <QtGui/QKeyEvent> @@ -90,6 +91,7 @@ MainWindow::MainWindow(QWidget *parent) : _codeCompletionView(new QListView), _welcomeQuickView(new QQuickView), _modelQuickView(new QQuickView), + _designSpaceQuickView(new QQuickView), _metricsQuickView(new QQuickView), _paretoFrontQuickView(new QQuickView) { @@ -150,7 +152,11 @@ MainWindow::MainWindow(QWidget *parent) : _welcomeQuickView->setSource(QUrl("qrc:/qml/welcomeview.qml")); ui->gridLayout_13->addWidget(QWidget::createWindowContainer(_welcomeQuickView, ui->welcomeViewWidget), 0, 0, 1, 1); + _designSpaceQuickView->setSource(QUrl("qrc:/qml/designspaceview.qml")); + ui->gridLayout_15->addWidget(QWidget::createWindowContainer(_designSpaceQuickView, ui->designSpaceLocationViewWidget), 0, 0, 1, 1); + _modelQuickView->setResizeMode(QQuickView::SizeRootObjectToView); + _designSpaceQuickView->setResizeMode(QQuickView::SizeRootObjectToView); _metricsQuickView->setResizeMode(QQuickView::SizeRootObjectToView); _paretoFrontQuickView->setResizeMode(QQuickView::SizeRootObjectToView); _welcomeQuickView->setResizeMode(QQuickView::SizeRootObjectToView); @@ -232,18 +238,27 @@ void MainWindow::saveXmi(QWrappedObject *rootElement) setCursor(Qt::ArrowCursor); } -QList<QWrappedObject *> MainWindow::loadXmi() +QList<QWrappedObject *> MainWindow::loadXmi(QString fileName) { - QFile file(_currentFileName); + QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::critical(this, tr("Open"), tr("Cannot read file !")); return QList<QWrappedObject *>(); } QXmiReader reader(&_engine, true); - setWindowTitle(QFileInfo(file).fileName() + " - DuSE-MT"); + if (fileName.contains("duse-mt")) + setWindowTitle(QFileInfo(file).fileName() + " - DuSE-MT"); QList<QWrappedObject *> wrappedObjectList = reader.readFile(&file); + ui->txeIssues->setModel(new QStringListModel(reader.errorStrings())); + setModelInspector(wrappedObjectList); + + return wrappedObjectList; +} + +void MainWindow::setModelInspector(QList<QWrappedObject *> wrappedObjectList) +{ if (!wrappedObjectList.isEmpty()) { _engine.globalObject().setProperty(wrappedObjectList.at(0)->objectName(), _engine.newQObject(wrappedObjectList.at(0))); @@ -255,8 +270,9 @@ QList<QWrappedObject *> MainWindow::loadXmi() ui->txeJavaScript->setText("self"); QTimer::singleShot(0, this, SLOT(on_psbJSEvaluate_clicked())); } - - return wrappedObjectList; + _wrappedObjectModel->clear(); + foreach (QWrappedObject *object, wrappedObjectList) + _wrappedObjectModel->addWrappedObject(object); } void MainWindow::on_actionFileOpenModel_triggered() @@ -264,10 +280,13 @@ void MainWindow::on_actionFileOpenModel_triggered() QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), QDir::currentPath(), "XMI files (*.xmi)"); if (!fileName.isEmpty()) { _currentFileName = fileName; - _wrappedObjectModel->clear(); setCursor(Qt::WaitCursor); - foreach (QWrappedObject *object, loadXmi()) - _wrappedObjectModel->addWrappedObject(object); +// foreach (QWrappedObject *object, _inputModel) +// delete object; + _inputModel = loadXmi(_currentFileName); + _modelQuickView->setClearBeforeRendering(true); + _modelQuickView->setSource(QUrl("qrc:/qml/modelview.qml")); + addToView(_inputModel[0]); setCursor(Qt::ArrowCursor); } } @@ -297,9 +316,13 @@ void MainWindow::on_actionFileNewDuseDesign_triggered() } _currentFileName = _newDuseDesign->_inputModelFileName; - _wrappedObjectModel->clear(); - foreach (QWrappedObject *object, loadXmi()) - _wrappedObjectModel->addWrappedObject(object); +// foreach (QWrappedObject *object, _inputModel) +// delete object; + _inputModel = loadXmi(_currentFileName); + + _modelQuickView->setClearBeforeRendering(true); + _modelQuickView->setSource(QUrl("qrc:/qml/modelview.qml")); + addToView(_inputModel[0]); QScriptValue value = _engine.evaluate("function checkProfile() \ { \ @@ -332,6 +355,8 @@ void MainWindow::on_actionFileNewDuseDesign_triggered() } \ }"); + + evaluateQualityMetrics(); populateDesignSpaceView(wrappedObjectList.at(0)); setCursor(Qt::ArrowCursor); @@ -342,6 +367,13 @@ void MainWindow::on_actionFileNewDuseDesign_triggered() } while (_newDuseDesign->_inputModelFileName.isEmpty() || _newDuseDesign->_duseInstanceModelFileName.isEmpty()); } +void MainWindow::evaluateQualityMetrics() +{ + _engine.evaluate("var m = designspace.qualityMetrics.length; \ + for (var j = 0; j < m; ++j) \ + designspace.qualityMetrics[j].value = Math.random()*60+eval(designspace.qualityMetrics[j].expression)"); +} + void MainWindow::populateDesignSpaceView(QWrappedObject *wrappedObject) { QDuseDesignSpace *designSpace = qobject_cast<QDuseDesignSpace *>(wrappedObject); @@ -357,6 +389,7 @@ void MainWindow::populateDesignSpaceView(QWrappedObject *wrappedObject) comboBox->addItem(variationPoint->objectName()); } ui->tblDesignSpace->setCellWidget(row, 2, comboBox); + connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(designSpaceChanged())); ++row; } } @@ -412,6 +445,54 @@ void MainWindow::on_psbJSEvaluate_clicked() ui->wrappedObjectView->updateSelected(); } +void MainWindow::on_centralWidget_currentChanged(int) +{ + if (_currentFileName.isEmpty()) + return; + if (ui->centralWidget->currentIndex() == 1) { +// foreach (QWrappedObject *object, _inputModel) +// delete object; + _inputModel = loadXmi(_currentFileName); + evaluateQualityMetrics(); + } + else if (ui->centralWidget->currentIndex() == 2) { +// foreach (QWrappedObject *object, _designSpaceLocation) +// delete object; + _designSpaceLocation = loadXmi("/data/devel/qtmodeling/examples/uml/r1.xmi"); + addToDesignSpaceView(_designSpaceLocation.first()); + evaluateQualityMetrics(); + } + else if (ui->centralWidget->currentIndex() == 3) { +// foreach (QWrappedObject *object, _designSpaceLocation) +// delete object; + } +} +void MainWindow::on_btnOptimize_clicked() +{ + progress = new QProgressDialog("Optimizing architecture", "Abort", 0, 100, this); + progress->setWindowModality(Qt::WindowModal); + timer = new QTimer(this); + connect(progress, SIGNAL(finished(int)), timer, SLOT(stop())); + connect(timer, SIGNAL(timeout()), this, SLOT(update())); + timer->start(1000); +} + +void MainWindow::update() +{ + progress->setValue(progress->value()+10); + if (progress->value() == 99) { + timer->stop(); + progress->hide(); + _designSpaceLocation = loadXmi(QString::fromLatin1("/data/devel/qtmodeling/examples/uml/r%1.xmi").arg(qrand() % 11)); + addToPareto(_designSpaceLocation.first(), 0); + _designSpaceLocation = loadXmi(QString::fromLatin1("/data/devel/qtmodeling/examples/uml/r%1.xmi").arg(qrand() % 11)); + addToPareto(_designSpaceLocation.first(), 1); + _designSpaceLocation = loadXmi(QString::fromLatin1("/data/devel/qtmodeling/examples/uml/r%1.xmi").arg(qrand() % 11)); + addToPareto(_designSpaceLocation.first(), 2); + evaluateQualityMetrics(); + } +} + void MainWindow::metaModelChanged(QString newMetaModel) { _newModel->lstTopLevelContainers->clear(); @@ -436,7 +517,9 @@ void MainWindow::addToView(QWrappedObject *wrappedObject, QQuickItem *parent) QQmlContext *context = new QQmlContext(_modelQuickView->engine()->rootContext()); wrappedObject->setQmlContextProperties(context); _qmlComponent = new QQmlComponent(_modelQuickView->engine()); - _qmlComponent->setData(QString("import QtQuick 2.0\nimport QtModeling.Uml 1.0\n\n%1 {}").arg(QString(wrappedObject->metaObject()->className()).remove(QRegularExpression("^Q"))).toLatin1(), QUrl()); + int x = qrand() % 400; + int y = qrand() % 400; + _qmlComponent->setData(QString("import QtQuick 2.0\nimport QtModeling.Uml 1.0\n\n%1 { x: %2; y: %3}").arg(QString(wrappedObject->metaObject()->className()).remove(QRegularExpression("^Q"))).arg(x).arg(y).toLatin1(), QUrl()); QQuickItem *item = 0; if (_qmlComponent->isError()) { @@ -448,6 +531,59 @@ void MainWindow::addToView(QWrappedObject *wrappedObject, QQuickItem *parent) } } + foreach (QObject *child, wrappedObject->children()) + addToView(qobject_cast<QWrappedObject *>(child)); + + _qmlComponent->deleteLater(); +} + +void MainWindow::addToDesignSpaceView(QWrappedObject *wrappedObject, QQuickItem *parent) +{ + QQmlContext *context = new QQmlContext(_designSpaceQuickView->engine()->rootContext()); + wrappedObject->setQmlContextProperties(context); + _qmlComponent = new QQmlComponent(_designSpaceQuickView->engine()); + int x = qrand() % 400; + int y = qrand() % 400; + _qmlComponent->setData(QString("import QtQuick 2.0\nimport QtModeling.Uml 1.0\n\n%1 { x: %2; y: %3}").arg(QString(wrappedObject->metaObject()->className()).remove(QRegularExpression("^Q"))).arg(x).arg(y).toLatin1(), QUrl()); + + QQuickItem *item = 0; + if (_qmlComponent->isError()) { + qWarning() << _qmlComponent->errors(); + } else { + item = qobject_cast<QQuickItem *>(_qmlComponent->create(context)); + if (item) { + item->setParentItem(parent ? parent:(qobject_cast<QQuickFlickable *>(_designSpaceQuickView->rootObject()))->contentItem()); + } + } + + foreach (QObject *child, wrappedObject->children()) + addToDesignSpaceView(qobject_cast<QWrappedObject *>(child)); + + _qmlComponent->deleteLater(); +} + +void MainWindow::addToPareto(QWrappedObject *wrappedObject, int pos) +{ + QQmlContext *context = _paretoFrontQuickView->engine()->rootContext(); + wrappedObject->setQmlContextProperties(context); + _qmlComponent = new QQmlComponent(_paretoFrontQuickView->engine()); + int x = qrand() % 400; + int y = qrand() % 400; + _qmlComponent->setData(QString("import QtQuick 2.0\nimport QtModeling.Uml 1.0\n\n%1 { x: %2; y: %3}").arg(QString(wrappedObject->metaObject()->className()).remove(QRegularExpression("^Q"))).arg(x).arg(y).toLatin1(), QUrl()); + + QQuickItem *item = 0; + if (_qmlComponent->isError()) { + qWarning() << _qmlComponent->errors(); + } else { + item = qobject_cast<QQuickItem *>(_qmlComponent->create(context)); + if (item) { + item->setParentItem(_paretoFrontQuickView->rootObject()->childItems().first()->childItems().first()->childItems().at(pos)); + } + } + + foreach (QObject *child, wrappedObject->children()) + addToPareto(qobject_cast<QWrappedObject *>(child), pos); + _qmlComponent->deleteLater(); } @@ -463,6 +599,19 @@ void MainWindow::dckMetricsVisibilityChanged(bool visible) } } +void MainWindow::designSpaceChanged() +{ + _designSpaceQuickView->setSource(QUrl("qrc:/qml/designspaceview.qml")); + _designSpaceQuickView->setClearBeforeRendering(true); + +// foreach (QWrappedObject *object, _designSpaceLocation) +// delete object; + + _designSpaceLocation = loadXmi(QString::fromLatin1("/data/devel/qtmodeling/examples/uml/r%1.xmi").arg(qrand() % 11)); + addToDesignSpaceView(_designSpaceLocation.first()); + evaluateQualityMetrics(); +} + bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress && obj == ui->txeJavaScript) { diff --git a/examples/uml/duse-mt/mainwindow.h b/examples/uml/duse-mt/mainwindow.h index 1a60f22e..2295cb5d 100644 --- a/examples/uml/duse-mt/mainwindow.h +++ b/examples/uml/duse-mt/mainwindow.h @@ -64,6 +64,7 @@ namespace Ui { class QWrappedObject; class QMetaModelPlugin; class QWrappedObjectModel; +class QProgressDialog; class NewDuseDesign; @@ -79,6 +80,7 @@ public: void readSettings(); private Q_SLOTS: + void update(); void on_actionFileNewModel_triggered(); void on_actionFileOpenModel_triggered(); void on_actionFileNewDuseDesign_triggered(); @@ -88,12 +90,19 @@ private Q_SLOTS: void on_actionHelpAboutPlugins_triggered(); void on_actionHelpAboutDuSEMT_triggered(); void on_psbJSEvaluate_clicked(); + void on_centralWidget_currentChanged(int); + void on_btnOptimize_clicked(); + void evaluateQualityMetrics(); + void setModelInspector(QList<QWrappedObject *> wrappedObjectList); void metaModelChanged(QString newMetaModel); void wrappedObjectChanged(QWrappedObject *wrappedObject); void addToView(QWrappedObject *wrappedObject, QQuickItem *parent = 0); + void addToDesignSpaceView(QWrappedObject *wrappedObject, QQuickItem *parent = 0); + void addToPareto(QWrappedObject *wrappedObject, int pos); void dckMetricsVisibilityChanged(bool visible); + void designSpaceChanged(); protected: bool eventFilter(QObject *obj, QEvent *event); @@ -101,11 +110,13 @@ protected: private: void loadPlugins(); void saveXmi(QWrappedObject *rootElement); - QList<QWrappedObject *> loadXmi(); + QList<QWrappedObject *> loadXmi(QString fileName = 0); void populateDesignSpaceView(QWrappedObject *wrappedObject); Ui::MainWindow *ui; QWrappedObjectModel *_wrappedObjectModel; + QList<QWrappedObject *> _inputModel; + QList<QWrappedObject *> _designSpaceLocation; QString _currentFileName; QHash< QString, QPair<QMetaModelPlugin *, QJsonObject> > _loadedPlugins; @@ -122,8 +133,12 @@ private: QQmlComponent *_qmlComponent; QQuickView *_welcomeQuickView; QQuickView *_modelQuickView; + QQuickView *_designSpaceQuickView; QQuickView *_metricsQuickView; QQuickView *_paretoFrontQuickView; + + QProgressDialog *progress; + QTimer *timer; }; #endif // MAINWINDOW_H diff --git a/examples/uml/duse-mt/mainwindow.ui b/examples/uml/duse-mt/mainwindow.ui index d17facd9..e039ee04 100644 --- a/examples/uml/duse-mt/mainwindow.ui +++ b/examples/uml/duse-mt/mainwindow.ui @@ -34,7 +34,7 @@ <item row="0" column="0"> <widget class="QTabWidget" name="centralWidget"> <property name="currentIndex"> - <number>2</number> + <number>0</number> </property> <widget class="QWidget" name="tabWelcome"> <attribute name="title"> @@ -60,7 +60,7 @@ </widget> <widget class="QWidget" name="tabModelView"> <attribute name="title"> - <string>Model View</string> + <string>Input Model</string> </attribute> <layout class="QGridLayout" name="gridLayout_11"> <property name="leftMargin"> @@ -82,7 +82,7 @@ </widget> <widget class="QWidget" name="tabDesignSpaceLocationView"> <attribute name="title"> - <string>Design Space Location View</string> + <string>Current Design Space Location</string> </attribute> <layout class="QGridLayout" name="gridLayout_15"> <property name="leftMargin"> @@ -104,7 +104,7 @@ </widget> <widget class="QWidget" name="tabParetoFront"> <attribute name="title"> - <string>Pareto Front View</string> + <string>Pareto Front</string> </attribute> <layout class="QGridLayout" name="gridLayout_12"> <property name="leftMargin"> @@ -454,7 +454,10 @@ <number>4</number> </property> <property name="bottomMargin"> - <number>0</number> + <number>4</number> + </property> + <property name="verticalSpacing"> + <number>4</number> </property> <item row="0" column="0"> <widget class="QTableWidget" name="tblDesignSpace"> @@ -484,6 +487,13 @@ </column> </widget> </item> + <item row="1" column="0"> + <widget class="QPushButton" name="btnOptimize"> + <property name="text"> + <string>&Optimize</string> + </property> + </widget> + </item> </layout> </widget> </widget> diff --git a/examples/uml/duse-mt/qml/designspaceview.qml b/examples/uml/duse-mt/qml/designspaceview.qml new file mode 100644 index 00000000..c4f95246 --- /dev/null +++ b/examples/uml/duse-mt/qml/designspaceview.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Sandro S. Andrade <sandroandrade@kde.org> +** 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/qml/dialcontrol/content/Dial.qml b/examples/uml/duse-mt/qml/dialcontrol/content/Dial.qml index dd344128..12a24f1d 100644 --- a/examples/uml/duse-mt/qml/dialcontrol/content/Dial.qml +++ b/examples/uml/duse-mt/qml/dialcontrol/content/Dial.qml @@ -43,6 +43,7 @@ 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 diff --git a/examples/uml/duse-mt/qml/dialcontrol/dialcontrol.qml b/examples/uml/duse-mt/qml/dialcontrol/dialcontrol.qml index 164f7192..ff13b340 100644 --- a/examples/uml/duse-mt/qml/dialcontrol/dialcontrol.qml +++ b/examples/uml/duse-mt/qml/dialcontrol/dialcontrol.qml @@ -55,6 +55,7 @@ Rectangle { snapMode: ListView.SnapOneItem; delegate: Dial { label: modelData.name; + value: modelData.value; } } Rectangle { diff --git a/examples/uml/duse-mt/qml/paretofrontview.qml b/examples/uml/duse-mt/qml/paretofrontview.qml index 46b80ecc..69feb3dc 100644 --- a/examples/uml/duse-mt/qml/paretofrontview.qml +++ b/examples/uml/duse-mt/qml/paretofrontview.qml @@ -53,23 +53,14 @@ Rectangle { Rectangle { width: view.width; height: view.height color: "#FFFEF0" - Text { text: "Page 1"; anchors.centerIn: parent; font { family: "Korolev" } } - - Component.onDestruction: if (printDestruction) print("destroyed 1") } Rectangle { width: view.width; height: view.height color: "#F0FFF7" - Text { text: "Page 2"; anchors.centerIn: parent; font { family: "Korolev" } } - - Component.onDestruction: if (printDestruction) print("destroyed 2") } Rectangle { width: view.width; height: view.height color: "#F4F0FF" - Text { text: "Page 3"; anchors.centerIn: parent; font { family: "Korolev" } } - - Component.onDestruction: if (printDestruction) print("destroyed 3") } } diff --git a/examples/uml/duse-mt/qml/welcomeview.qml b/examples/uml/duse-mt/qml/welcomeview.qml index c9773cdc..b0d1dcee 100644 --- a/examples/uml/duse-mt/qml/welcomeview.qml +++ b/examples/uml/duse-mt/qml/welcomeview.qml @@ -41,7 +41,7 @@ import QtQuick 2.0 Image { - fillMode: Image.Stretch + fillMode: Image.Pad source: "welcome-background.jpg" Row { anchors { left: parent.left; right: parent.right; top: parent.top; margins: 20 } |