diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-11-22 10:23:47 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-11-22 10:23:47 +0100 |
commit | 240fb8427a89d0aa78da07c8d147a0d57df5bb67 (patch) | |
tree | aa4d46020f89e3d5dfc0b5fb24bc7190acbfe60c /lib/about | |
parent | Add link to GPL to About dialog (diff) | |
download | smolbote-240fb8427a89d0aa78da07c8d147a0d57df5bb67.tar.xz |
Add AboutPlugin dialog
Diffstat (limited to 'lib/about')
-rw-r--r-- | lib/about/aboutplugin.cpp | 87 | ||||
-rw-r--r-- | lib/about/aboutplugin.h | 31 | ||||
-rw-r--r-- | lib/about/aboutplugin.ui | 179 | ||||
-rw-r--r-- | lib/about/meson.build | 6 |
4 files changed, 300 insertions, 3 deletions
diff --git a/lib/about/aboutplugin.cpp b/lib/about/aboutplugin.cpp new file mode 100644 index 0000000..7df75fa --- /dev/null +++ b/lib/about/aboutplugin.cpp @@ -0,0 +1,87 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "aboutplugin.h" +#include "ui_aboutplugin.h" +#include <QJsonArray> +#include <QPluginLoader> + +QTreeWidgetItem *createItem(const QString &key, const QJsonValue &json, QTreeWidgetItem *parent) +{ + auto *item = new QTreeWidgetItem(parent, { key, QLatin1Literal("---") }); + + switch(json.type()) { + case QJsonValue::Bool: + item->setText(1, json.toBool() ? QLatin1Literal("true") : QLatin1Literal("false")); + break; + + case QJsonValue::Double: + item->setText(1, QString::number(json.toDouble())); + break; + + case QJsonValue::String: + item->setText(1, json.toString()); + break; + + case QJsonValue::Array: + item->setText(1, QString()); + for(const QJsonValue &v : json.toArray()) { + createItem(QString(), v, item); + } + break; + + case QJsonValue::Object: + item->setText(1, QString()); + for(const QString &k : json.toObject().keys()) { + createItem(k, json.toObject()[k], item); + } + break; + + case QJsonValue::Null: + item->setText(1, QLatin1Literal("null")); + break; + + case QJsonValue::Undefined: + item->setText(1, QLatin1Literal("undefined")); + break; + } + + return item; +} + +AboutPluginDialog::AboutPluginDialog(const QPluginLoader *loader, QWidget *parent) + : QDialog(parent) + , ui(new Ui::AboutPluginDialog) +{ + setAttribute(Qt::WA_DeleteOnClose, true); + ui->setupUi(this); + + auto metaData = loader->metaData()["MetaData"].toObject(); + + this->setWindowTitle(metaData["name"].toString()); + + ui->path->setText(loader->fileName()); + ui->loaded->setChecked(loader->isLoaded()); + + ui->name->setText(metaData[QLatin1Literal("name")].toString()); + ui->author->setText(metaData[QLatin1Literal("author")].toString()); + ui->license->setText(metaData[QLatin1Literal("license")].toString()); + ui->shortcut->setText(metaData[QLatin1Literal("shortcut")].toString()); + + for(const QString &key : loader->metaData().keys()) { + auto *i = createItem(key, loader->metaData()[key], nullptr); + + if(i != nullptr) + ui->details_treeWidget->insertTopLevelItem(0, i); + } +} + +AboutPluginDialog::~AboutPluginDialog() +{ + delete ui; +} diff --git a/lib/about/aboutplugin.h b/lib/about/aboutplugin.h new file mode 100644 index 0000000..adab215 --- /dev/null +++ b/lib/about/aboutplugin.h @@ -0,0 +1,31 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef SMOLBOTE_ABOUTPLUGIN_H +#define SMOLBOTE_ABOUTPLUGIN_H + +#include <QDialog> + +namespace Ui +{ +class AboutPluginDialog; +} +class QPluginLoader; +class AboutPluginDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AboutPluginDialog(const QPluginLoader *loader, QWidget *parent = nullptr); + ~AboutPluginDialog() override; + +private: + Ui::AboutPluginDialog *ui; +}; + +#endif // SMOLBOTE_ABOUTPLUGIN_H diff --git a/lib/about/aboutplugin.ui b/lib/about/aboutplugin.ui new file mode 100644 index 0000000..f2d4848 --- /dev/null +++ b/lib/about/aboutplugin.ui @@ -0,0 +1,179 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>AboutPluginDialog</class> + <widget class="QDialog" name="AboutPluginDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>474</width> + <height>329</height> + </rect> + </property> + <property name="windowTitle"> + <string>Dialog</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTabWidget" name="tabWidget"> + <property name="currentIndex"> + <number>0</number> + </property> + <widget class="QWidget" name="general_tab"> + <attribute name="title"> + <string>General</string> + </attribute> + <layout class="QFormLayout" name="formLayout"> + <item row="0" column="0"> + <widget class="QLabel" name="name_label"> + <property name="text"> + <string>Name</string> + </property> + </widget> + </item> + <item row="0" column="1"> + <widget class="QLabel" name="name"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="author_label"> + <property name="text"> + <string>Author</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QLabel" name="author"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="3" column="0"> + <widget class="QLabel" name="shortcut_label"> + <property name="text"> + <string>Shortcut</string> + </property> + </widget> + </item> + <item row="3" column="1"> + <widget class="QLabel" name="shortcut"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="4" column="1"> + <layout class="QHBoxLayout" name="controls_layout"> + <item> + <widget class="QPushButton" name="loaded"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Load</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + </widget> + </item> + </layout> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="license"> + <property name="text"> + <string/> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="license_label"> + <property name="text"> + <string>License</string> + </property> + </widget> + </item> + </layout> + </widget> + <widget class="QWidget" name="details_tab"> + <attribute name="title"> + <string>Details</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QLabel" name="path"> + <property name="text"> + <string>TextLabel</string> + </property> + </widget> + </item> + <item> + <widget class="QTreeWidget" name="details_treeWidget"> + <column> + <property name="text"> + <string>Key</string> + </property> + </column> + <column> + <property name="text"> + <string>Value</string> + </property> + </column> + </widget> + </item> + </layout> + </widget> + </widget> + </item> + <item> + <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/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>AboutPluginDialog</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>AboutPluginDialog</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/lib/about/meson.build b/lib/about/meson.build index 35598b3..961c7ef 100644 --- a/lib/about/meson.build +++ b/lib/about/meson.build @@ -1,11 +1,11 @@ about_moc = qt5.preprocess( - moc_headers: ['aboutdialog.h'], - ui_files: ['aboutdialog.ui'], + moc_headers: ['aboutdialog.h', 'aboutplugin.h'], + ui_files: ['aboutdialog.ui', 'aboutplugin.ui'], dependencies: dep_qt5 ) about_inc = include_directories('.') -about_lib = static_library('about', ['aboutdialog.cpp', about_moc], +about_lib = static_library('about', ['aboutdialog.cpp', 'aboutplugin.cpp', about_moc], dependencies: [dep_qt5, dep_genheaders] ) |