summaryrefslogtreecommitdiffstats
path: root/examples/uml
diff options
context:
space:
mode:
authorSandro S. Andrade <sandroandrade@kde.org>2013-10-28 22:14:18 -0300
committerSandro S. Andrade <sandroandrade@kde.org>2013-10-29 02:10:24 +0100
commit899144a4a98d4b0445a6c84ec900747091742de3 (patch)
tree9d07a96cca871552a2bc3f94021eb54e614f0430 /examples/uml
parent28bc3e761e7340bf92e45dbfa3325ae2cbe3c75f (diff)
Improve loaded plugins dialog implementation
Change-Id: Ia264b31aff85149a206a8631c276e167c8667836 Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'examples/uml')
-rw-r--r--examples/uml/duse-mt/src/app/aboutplugins.ui41
-rw-r--r--examples/uml/duse-mt/src/app/shell/mainwindow.cpp69
-rw-r--r--examples/uml/duse-mt/src/app/shell/mainwindow.h10
-rw-r--r--examples/uml/duse-mt/src/plugins/modelinspector/modelinspector.json4
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"
}