diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-10-28 22:14:18 -0300 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-10-29 02:10:24 +0100 |
commit | 899144a4a98d4b0445a6c84ec900747091742de3 (patch) | |
tree | 9d07a96cca871552a2bc3f94021eb54e614f0430 | |
parent | 28bc3e761e7340bf92e45dbfa3325ae2cbe3c75f (diff) |
Improve loaded plugins dialog implementation
Change-Id: Ia264b31aff85149a206a8631c276e167c8667836
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
4 files changed, 89 insertions, 35 deletions
diff --git a/examples/uml/duse-mt/src/app/aboutplugins.ui b/examples/uml/duse-mt/src/app/aboutplugins.ui index 44ad9865..b3fdd1c8 100644 --- a/examples/uml/duse-mt/src/app/aboutplugins.ui +++ b/examples/uml/duse-mt/src/app/aboutplugins.ui @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>400</width> + <width>613</width> <height>300</height> </rect> </property> @@ -14,13 +14,29 @@ <string>Installed Plugins</string> </property> <layout class="QGridLayout" name="gridLayout"> + <item row="1" column="0"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> <item row="0" column="0"> - <widget class="QTableWidget" name="loadedPlugins"> - <attribute name="horizontalHeaderStretchLastSection"> + <widget class="QTreeWidget" name="loadedPlugins"> + <property name="alternatingRowColors"> <bool>true</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <attribute name="headerDefaultSectionSize"> + <number>120</number> </attribute> - <attribute name="verticalHeaderVisible"> - <bool>false</bool> + <attribute name="headerMinimumSectionSize"> + <number>35</number> </attribute> <column> <property name="text"> @@ -29,6 +45,11 @@ </column> <column> <property name="text"> + <string>Load</string> + </property> + </column> + <column> + <property name="text"> <string>Version</string> </property> </column> @@ -39,16 +60,6 @@ </column> </widget> </item> - <item row="1" column="0"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Close</set> - </property> - </widget> - </item> </layout> </widget> <resources/> diff --git a/examples/uml/duse-mt/src/app/shell/mainwindow.cpp b/examples/uml/duse-mt/src/app/shell/mainwindow.cpp index b8a837e4..52990459 100644 --- a/examples/uml/duse-mt/src/app/shell/mainwindow.cpp +++ b/examples/uml/duse-mt/src/app/shell/mainwindow.cpp @@ -470,18 +470,6 @@ void MainWindow::on_actionFileSave_triggered() void MainWindow::on_actionHelpAboutPlugins_triggered() { - _aboutPlugins->loadedPlugins->clearContents(); - _aboutPlugins->loadedPlugins->setRowCount(_loadedPlugins.size()); - int i = 0; - typedef QPair<QMetaModelPlugin *, QJsonObject> PluginData; - foreach (const PluginData &pair, _loadedPlugins.values()) { - _aboutPlugins->loadedPlugins->setItem(i, 0, new QTableWidgetItem(pair.first->metaObject()->className())); - _aboutPlugins->loadedPlugins->setItem(i, 1, new QTableWidgetItem(pair.second.value("Version").toString())); - _aboutPlugins->loadedPlugins->setItem(i, 2, new QTableWidgetItem(pair.second.value("Vendor").toString())); - _aboutPlugins->loadedPlugins->setRowHeight(i, 22); - ++i; - } - _aboutPlugins->loadedPlugins->resizeColumnsToContents(); _aboutPluginsDialog->exec(); } @@ -549,7 +537,7 @@ void MainWindow::metaModelChanged(QString newMetaModel) _newModel->lstTopLevelContainers->clear(); QVariantList list; typedef QPair<QMetaModelPlugin *, QJsonObject> PluginData; - foreach (const PluginData &pair, _loadedPlugins.values()) { + foreach (const PluginData &pair, _metamodelPlugins.values()) { if (pair.first->metaObject()->className() == newMetaModel) list = pair.second.value("MetaModelTopLevelClasses").toArray().toVariantList(); } @@ -705,9 +693,34 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event) return QObject::eventFilter(obj, event); } +QTreeWidgetItem *MainWindow::itemForCategory(const QString &category) +{ + int topLevelItemCount = _aboutPlugins->loadedPlugins->topLevelItemCount(); + for (int i = 0; i < topLevelItemCount; ++i) + if (_aboutPlugins->loadedPlugins->topLevelItem(i)->text(0) == category) + return _aboutPlugins->loadedPlugins->topLevelItem(i); + QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(_aboutPlugins->loadedPlugins, QStringList() << category); + topLevelItem->setData(1, Qt::CheckStateRole, QVariant(Qt::Checked)); + return topLevelItem; +} + void MainWindow::loadPlugins() { - QMetaModelPlugin *metaModelPlugin = 0; + _aboutPlugins->loadedPlugins->clear(); + _aboutPlugins->loadedPlugins->setColumnWidth(1, 40); + _aboutPlugins->loadedPlugins->header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); + _aboutPlugins->loadedPlugins->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents); +// _aboutPlugins->loadedPlugins->setRowCount(_metamodelPlugins.size()); +// int i = 0; +// typedef QPair<QMetaModelPlugin *, QJsonObject> PluginData; +// foreach (const PluginData &pair, _metamodelPlugins.values()) { +// _aboutPlugins->loadedPlugins->setItem(i, 0, new QTableWidgetItem(pair.first->metaObject()->className())); +// _aboutPlugins->loadedPlugins->setItem(i, 1, new QTableWidgetItem(pair.second.value("Version").toString())); +// _aboutPlugins->loadedPlugins->setItem(i, 2, new QTableWidgetItem(pair.second.value("Vendor").toString())); +// _aboutPlugins->loadedPlugins->setRowHeight(i, 22); +// ++i; +// } + DuSE::ICore *core = DuSE::Core::self(); DuSE::IPlugin *dusePlugin; foreach (QString pluginPath, QCoreApplication::libraryPaths()) { @@ -716,8 +729,17 @@ void MainWindow::loadPlugins() foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { QPluginLoader loader(pluginsDir.absoluteFilePath(fileName)); QObject *plugin = loader.instance(); - if (plugin && (metaModelPlugin = qobject_cast<QMetaModelPlugin *>(plugin))) - _loadedPlugins.insert(loader.metaData().value(QString::fromLatin1("MetaData")).toObject().value(QString::fromLatin1("MetaModelNamespaceUri")).toString(), QPair<QMetaModelPlugin *, QJsonObject>(metaModelPlugin, loader.metaData().value(QString::fromLatin1("MetaData")).toObject())); + QMetaModelPlugin *metaModelPlugin = 0; + if (plugin && (metaModelPlugin = qobject_cast<QMetaModelPlugin *>(plugin))) { + QJsonObject jsonObject = loader.metaData().value(QString::fromLatin1("MetaData")).toObject(); + _metamodelPlugins.insert(jsonObject.value(QString::fromLatin1("MetaModelNamespaceUri")).toString(), QPair<QMetaModelPlugin *, QJsonObject>(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)); + } } } QDir dusePluginsDir(QCoreApplication::applicationDirPath()); @@ -729,16 +751,27 @@ void MainWindow::loadPlugins() QPluginLoader loader(dusePluginSubDir.absoluteFilePath(fileName)); QObject *plugin = loader.instance(); if (plugin && (dusePlugin = qobject_cast<DuSE::IPlugin *>(plugin))) { - qDebug() << "Achei duse-mt plugin:" << dusePluginsDir.absoluteFilePath(fileName); dusePlugin->initialize(core); + QJsonObject jsonObject = loader.metaData().value(QString::fromLatin1("MetaData")).toObject(); + _dusemtPlugins << QPair<DuSE::IPlugin *, QJsonObject>(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 + qDebug() << "Error when loading plugin" << fileName << ":" << loader.errorString(); } } + + _aboutPlugins->loadedPlugins->expandAll(); } void MainWindow::closeEvent(QCloseEvent *event) { - QSettings settings("LiveBlue", "DuSE-MT"); + QSettings settings("QtProject", "duse-mt"); settings.setValue("geometry", saveGeometry()); settings.setValue("windowState", saveState()); QMainWindow::closeEvent(event); diff --git a/examples/uml/duse-mt/src/app/shell/mainwindow.h b/examples/uml/duse-mt/src/app/shell/mainwindow.h index e63c4308..59465f0d 100644 --- a/examples/uml/duse-mt/src/app/shell/mainwindow.h +++ b/examples/uml/duse-mt/src/app/shell/mainwindow.h @@ -53,6 +53,7 @@ class QListView; class QQuickView; class QQuickItem; class QQmlComponent; +class QTreeWidgetItem; namespace Ui { class MainWindow; @@ -61,6 +62,10 @@ namespace Ui { class NewModel; } +namespace DuSE { + class IPlugin; +} + class QModelingElement; class QModelingObject; class QMetaModelPlugin; @@ -120,7 +125,8 @@ private: QList<QModelingElement *> _designSpaceLocation; QString _currentFileName; - QHash< QString, QPair<QMetaModelPlugin *, QJsonObject> > _loadedPlugins; + QHash< QString, QPair<QMetaModelPlugin *, QJsonObject> > _metamodelPlugins; + QList< QPair<DuSE::IPlugin *, QJsonObject> > _dusemtPlugins; QDialog *_aboutPluginsDialog; Ui::AboutPlugins *_aboutPlugins; QDialog *_aboutDuSEMTDialog; @@ -140,6 +146,8 @@ private: QProgressDialog *progress; QTimer *timer; + + QTreeWidgetItem *itemForCategory(const QString &category); }; #endif // MAINWINDOW_H diff --git a/examples/uml/duse-mt/src/plugins/modelinspector/modelinspector.json b/examples/uml/duse-mt/src/plugins/modelinspector/modelinspector.json index 1e811388..86c0672f 100644 --- a/examples/uml/duse-mt/src/plugins/modelinspector/modelinspector.json +++ b/examples/uml/duse-mt/src/plugins/modelinspector/modelinspector.json @@ -1,3 +1,5 @@ { - "Keys" : [ ] + "Category": "Test", + "Vendor": "Qt Project", + "Version": "1.0" } |