From 5ecf52ae725c7b7154a8c84c5918b11f15287d84 Mon Sep 17 00:00:00 2001 From: "Sandro S. Andrade" Date: Wed, 30 Oct 2013 15:52:24 -0300 Subject: Move DuSE-MT architecture optimization from core to plugin Change-Id: Ic218e48d239ad3eb5108f95ea3d73f8ba5b0f1c4 Reviewed-by: Sandro S. Andrade --- examples/uml/duse-mt/src/app/duse-mt.qrc | 2 - examples/uml/duse-mt/src/app/mainwindow.ui | 24 +---- .../uml/duse-mt/src/app/qml/paretofrontview.qml | 103 --------------------- examples/uml/duse-mt/src/app/shell/mainwindow.cpp | 63 ++++++------- examples/uml/duse-mt/src/app/shell/mainwindow.h | 5 +- .../uml/duse-mt/src/app/shell/plugincontroller.cpp | 12 --- .../plugins/designoptimizer/designoptimizer.json | 5 + .../plugins/designoptimizer/designoptimizer.pro | 15 +++ .../designoptimizer/designoptimizerplugin.cpp | 64 +++++++++++++ .../designoptimizer/designoptimizerplugin.h | 63 +++++++++++++ .../designoptimizer/qml/designoptimizer.qrc | 5 + .../plugins/designoptimizer/qml/paretofront.qml | 103 +++++++++++++++++++++ examples/uml/duse-mt/src/plugins/plugins.pro | 3 +- 13 files changed, 288 insertions(+), 179 deletions(-) delete mode 100644 examples/uml/duse-mt/src/app/qml/paretofrontview.qml create mode 100644 examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.json create mode 100644 examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.pro create mode 100644 examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.cpp create mode 100644 examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.h create mode 100644 examples/uml/duse-mt/src/plugins/designoptimizer/qml/designoptimizer.qrc create mode 100644 examples/uml/duse-mt/src/plugins/designoptimizer/qml/paretofront.qml (limited to 'examples/uml') diff --git a/examples/uml/duse-mt/src/app/duse-mt.qrc b/examples/uml/duse-mt/src/app/duse-mt.qrc index e51566a8..cd816f42 100644 --- a/examples/uml/duse-mt/src/app/duse-mt.qrc +++ b/examples/uml/duse-mt/src/app/duse-mt.qrc @@ -14,8 +14,6 @@ icons/duse-mt-48x48.png icons/duse-mt-64x64.png icons/duse-mt-128x128.png - qml/grid.png - qml/paretofrontview.qml metamodels/PrimitiveTypes.xmi metamodels/UML.xmi metamodels/SADuSEProfile.xmi diff --git a/examples/uml/duse-mt/src/app/mainwindow.ui b/examples/uml/duse-mt/src/app/mainwindow.ui index 191a8ad4..185f60c2 100644 --- a/examples/uml/duse-mt/src/app/mainwindow.ui +++ b/examples/uml/duse-mt/src/app/mainwindow.ui @@ -34,30 +34,8 @@ - 0 + -1 - - - Pareto Front - - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - diff --git a/examples/uml/duse-mt/src/app/qml/paretofrontview.qml b/examples/uml/duse-mt/src/app/qml/paretofrontview.qml deleted file mode 100644 index 69feb3dc..00000000 --- a/examples/uml/duse-mt/src/app/qml/paretofrontview.qml +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Sandro S. Andrade -** 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 - -Rectangle { - id: root - color: "lightgray" - width: 320 - height: 480 - property bool printDestruction: false - - VisualItemModel { - id: itemModel - - Rectangle { - width: view.width; height: view.height - color: "#FFFEF0" - } - Rectangle { - width: view.width; height: view.height - color: "#F0FFF7" - } - Rectangle { - width: view.width; height: view.height - color: "#F4F0FF" - } - } - - ListView { - id: view - anchors { fill: parent; bottomMargin: 30 } - model: itemModel - preferredHighlightBegin: 0; preferredHighlightEnd: 0 - highlightRangeMode: ListView.StrictlyEnforceRange - orientation: ListView.Horizontal - snapMode: ListView.SnapOneItem; flickDeceleration: 2000 - cacheBuffer: 200 - } - Rectangle { - width: root.width; height: 30 - anchors { top: view.bottom; bottom: parent.bottom } - color: "gray" - - Row { - anchors.centerIn: parent - spacing: 20 - - Repeater { - model: itemModel.count - - 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 - } - } - } - } - } -} diff --git a/examples/uml/duse-mt/src/app/shell/mainwindow.cpp b/examples/uml/duse-mt/src/app/shell/mainwindow.cpp index fa9723bd..fac1a56c 100644 --- a/examples/uml/duse-mt/src/app/shell/mainwindow.cpp +++ b/examples/uml/duse-mt/src/app/shell/mainwindow.cpp @@ -93,8 +93,7 @@ MainWindow::MainWindow(QWidget *parent) : _aboutDuSEMT(new Ui::AboutDuSEMT), _newModelDialog(new QDialog(this)), _newModel(new Ui::NewModel), - _newDuseDesign(new NewDuseDesign(this)), - _paretoFrontQuickView(new QQuickView) + _newDuseDesign(new NewDuseDesign(this)) { ui->setupUi(this); @@ -105,10 +104,6 @@ MainWindow::MainWindow(QWidget *parent) : // connect(ui->modelingObjectView, &QModelingObjectView::addToView, this, &MainWindow::addToView); - _paretoFrontQuickView->setSource(QUrl("qrc:/qml/paretofrontview.qml")); - ui->gridLayout_12->addWidget(QWidget::createWindowContainer(_paretoFrontQuickView, ui->paretoFrontViewWidget), 0, 0, 1, 1); - - _paretoFrontQuickView->setResizeMode(QQuickView::SizeRootObjectToView); } MainWindow::~MainWindow() @@ -344,15 +339,15 @@ void MainWindow::on_centralWidget_currentChanged(int) // } } -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::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() { @@ -436,27 +431,27 @@ void MainWindow::addToDesignSpaceView(QModelingElement *modelingObject, QQuickIt void MainWindow::addToPareto(QModelingElement *modelingObject, int pos) { - QQmlContext *context = _paretoFrontQuickView->engine()->rootContext(); - //modelingObject->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(modelingObject->asQModelingObject()->metaObject()->className()).remove(QRegularExpression("^Q"))).arg(x).arg(y).toLatin1(), QUrl()); - - QQuickItem *item = 0; - if (_qmlComponent->isError()) { - qWarning() << _qmlComponent->errors(); - } else { - item = qobject_cast(_qmlComponent->create(context)); - if (item) { - item->setParentItem(_paretoFrontQuickView->rootObject()->childItems().first()->childItems().first()->childItems().at(pos)); - } - } +// QQmlContext *context = _paretoFrontQuickView->engine()->rootContext(); +// //modelingObject->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(modelingObject->asQModelingObject()->metaObject()->className()).remove(QRegularExpression("^Q"))).arg(x).arg(y).toLatin1(), QUrl()); + +// QQuickItem *item = 0; +// if (_qmlComponent->isError()) { +// qWarning() << _qmlComponent->errors(); +// } else { +// item = qobject_cast(_qmlComponent->create(context)); +// if (item) { +// item->setParentItem(_paretoFrontQuickView->rootObject()->childItems().first()->childItems().first()->childItems().at(pos)); +// } +// } - foreach (QObject *child, modelingObject->asQModelingObject()->children()) - addToPareto(dynamic_cast(qModelingElement(child)), pos); +// foreach (QObject *child, modelingObject->asQModelingObject()->children()) +// addToPareto(dynamic_cast(qModelingElement(child)), pos); - _qmlComponent->deleteLater(); +// _qmlComponent->deleteLater(); } void MainWindow::designSpaceChanged() diff --git a/examples/uml/duse-mt/src/app/shell/mainwindow.h b/examples/uml/duse-mt/src/app/shell/mainwindow.h index d19d4a2a..9a536035 100644 --- a/examples/uml/duse-mt/src/app/shell/mainwindow.h +++ b/examples/uml/duse-mt/src/app/shell/mainwindow.h @@ -98,7 +98,7 @@ private Q_SLOTS: void on_actionHelpAboutPlugins_triggered(); void on_actionHelpAboutDuSEMT_triggered(); void on_centralWidget_currentChanged(int); - void on_btnOptimize_clicked(); +// void on_btnOptimize_clicked(); void evaluateQualityMetrics(); void metaModelChanged(QString newMetaModel); @@ -125,9 +125,6 @@ private: NewDuseDesign *_newDuseDesign; QQmlComponent *_qmlComponent; -// QQuickView *_designSpaceQuickView; -// QQuickView *_metricsQuickView; - QQuickView *_paretoFrontQuickView; QProgressDialog *progress; QTimer *timer; diff --git a/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp b/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp index 513b3e91..372f912b 100644 --- a/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp +++ b/examples/uml/duse-mt/src/app/shell/plugincontroller.cpp @@ -77,12 +77,6 @@ bool PluginController::initialize() if (plugin && (metaModelPlugin = qobject_cast(plugin))) { QJsonObject jsonObject = loader.metaData().value(QString::fromLatin1("MetaData")).toObject(); _metamodelPlugins.insert(jsonObject.value(QString::fromLatin1("MetaModelNamespaceUri")).toString(), QPair(metaModelPlugin, jsonObject)); -// QTreeWidgetItem *metamodelItem = new QTreeWidgetItem(itemForCategory("Metamodels"), -// QStringList() << metaModelPlugin->metaObject()->className() -// << QString() -// << jsonObject.value("Version").toString() -// << jsonObject.value("Vendor").toString()); -// metamodelItem->setData(1, Qt::CheckStateRole, QVariant(Qt::Checked)); } } } @@ -98,12 +92,6 @@ bool PluginController::initialize() dusePlugin->initialize(core); QJsonObject jsonObject = loader.metaData().value(QString::fromLatin1("MetaData")).toObject(); _dusemtPlugins << QPair(dusePlugin, jsonObject); -// QTreeWidgetItem *dusePluginItem = new QTreeWidgetItem(itemForCategory(jsonObject.value("Category").toString()), -// QStringList() << dusePlugin->metaObject()->className() -// << QString() -// << jsonObject.value("Version").toString() -// << jsonObject.value("Vendor").toString()); -// dusePluginItem->setData(1, Qt::CheckStateRole, QVariant(Qt::Checked)); } else _errorStrings << "Error when loading plugin" << fileName << ":" << loader.errorString(); diff --git a/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.json b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.json new file mode 100644 index 00000000..86c0672f --- /dev/null +++ b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.json @@ -0,0 +1,5 @@ +{ + "Category": "Test", + "Vendor": "Qt Project", + "Version": "1.0" +} diff --git a/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.pro b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.pro new file mode 100644 index 00000000..561c7b0d --- /dev/null +++ b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizer.pro @@ -0,0 +1,15 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2013-10-25T17:38:51 +# +#------------------------------------------------- + +include(../../duse-mt-plugin.pri) + +SOURCES += designoptimizerplugin.cpp + +HEADERS += designoptimizerplugin.h + +RESOURCES += qml/designoptimizer.qrc + +OTHER_FILES += designoptimizer.json diff --git a/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.cpp b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.cpp new file mode 100644 index 00000000..4512abc4 --- /dev/null +++ b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Sandro S. Andrade +** 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 "designoptimizerplugin.h" + +#include + +#include + +#include + +DesignOptimizerPlugin::DesignOptimizerPlugin(QObject *parent) : + DuSE::IPlugin(parent), + _paretoFrontQuickView(new QQuickView) +{ +} + +bool DesignOptimizerPlugin::initialize(DuSE::ICore *core) +{ + _paretoFrontQuickView->setSource(QUrl("qrc:/designoptimizer/paretofront.qml")); + _paretoFrontQuickView->setResizeMode(QQuickView::SizeRootObjectToView); + + core->uiController()->addCentralWidgetTab(QWidget::createWindowContainer(_paretoFrontQuickView), "Pareto Front"); + + return true; +} + diff --git a/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.h b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.h new file mode 100644 index 00000000..d09f04d1 --- /dev/null +++ b/examples/uml/duse-mt/src/plugins/designoptimizer/designoptimizerplugin.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Sandro S. Andrade +** 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 DESIGNOPTIMIZERPLUGIN_H +#define DESIGNOPTIMIZERPLUGIN_H + +#include + +class QQuickView; + +class DesignOptimizerPlugin : public DuSE::IPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.liveblue.DuSE.IPlugin" FILE "designoptimizer.json") + +public: + DesignOptimizerPlugin(QObject *parent = 0); + + virtual bool initialize(DuSE::ICore *core); + +private: + QQuickView *_paretoFrontQuickView; +}; + +#endif // DESIGNOPTIMIZERPLUGIN_H + diff --git a/examples/uml/duse-mt/src/plugins/designoptimizer/qml/designoptimizer.qrc b/examples/uml/duse-mt/src/plugins/designoptimizer/qml/designoptimizer.qrc new file mode 100644 index 00000000..c9152415 --- /dev/null +++ b/examples/uml/duse-mt/src/plugins/designoptimizer/qml/designoptimizer.qrc @@ -0,0 +1,5 @@ + + + paretofront.qml + + diff --git a/examples/uml/duse-mt/src/plugins/designoptimizer/qml/paretofront.qml b/examples/uml/duse-mt/src/plugins/designoptimizer/qml/paretofront.qml new file mode 100644 index 00000000..69feb3dc --- /dev/null +++ b/examples/uml/duse-mt/src/plugins/designoptimizer/qml/paretofront.qml @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Sandro S. Andrade +** 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 + +Rectangle { + id: root + color: "lightgray" + width: 320 + height: 480 + property bool printDestruction: false + + VisualItemModel { + id: itemModel + + Rectangle { + width: view.width; height: view.height + color: "#FFFEF0" + } + Rectangle { + width: view.width; height: view.height + color: "#F0FFF7" + } + Rectangle { + width: view.width; height: view.height + color: "#F4F0FF" + } + } + + ListView { + id: view + anchors { fill: parent; bottomMargin: 30 } + model: itemModel + preferredHighlightBegin: 0; preferredHighlightEnd: 0 + highlightRangeMode: ListView.StrictlyEnforceRange + orientation: ListView.Horizontal + snapMode: ListView.SnapOneItem; flickDeceleration: 2000 + cacheBuffer: 200 + } + Rectangle { + width: root.width; height: 30 + anchors { top: view.bottom; bottom: parent.bottom } + color: "gray" + + Row { + anchors.centerIn: parent + spacing: 20 + + Repeater { + model: itemModel.count + + 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 + } + } + } + } + } +} diff --git a/examples/uml/duse-mt/src/plugins/plugins.pro b/examples/uml/duse-mt/src/plugins/plugins.pro index 35c63025..28395b54 100644 --- a/examples/uml/duse-mt/src/plugins/plugins.pro +++ b/examples/uml/duse-mt/src/plugins/plugins.pro @@ -6,4 +6,5 @@ SUBDIRS = \ javascriptconsole \ welcomedashboard \ concretesyntaxview \ - designspaceexplorer + designspaceexplorer \ + designoptimizer -- cgit v1.2.3