From eaa6623d1b82982509b8f5f51a44205a3d5f9b5f Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 19 Apr 2020 14:22:29 +0300 Subject: move lib/about to src/about - add AboutDialog test - add SVG icon in place of application icon --- src/about/aboutplugin.cpp | 111 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 src/about/aboutplugin.cpp (limited to 'src/about/aboutplugin.cpp') diff --git a/src/about/aboutplugin.cpp b/src/about/aboutplugin.cpp new file mode 100644 index 0000000..99c04ec --- /dev/null +++ b/src/about/aboutplugin.cpp @@ -0,0 +1,111 @@ +/* + * 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 +#include + +QTreeWidgetItem *createItem(const QString &key, const QJsonValue &json, QTreeWidgetItem *parent) +{ + auto *item = new QTreeWidgetItem(parent, { key, QLatin1String("---") }); + + switch(json.type()) { + case QJsonValue::Bool: + item->setText(1, json.toBool() ? QLatin1String("true") : QLatin1String("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 auto &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, QLatin1String("null")); + break; + + case QJsonValue::Undefined: + item->setText(1, QLatin1String("undefined")); + break; + } + + return item; +} + +AboutPluginDialog::AboutPluginDialog(QPluginLoader *loader, QWidget *parent) + : QDialog(parent) + , ui(new Ui::AboutPluginDialog) +{ + setAttribute(Qt::WA_DeleteOnClose, true); + ui->setupUi(this); + + // load button icon + { + QIcon load_icon; + load_icon.addPixmap(style()->standardPixmap(QStyle::SP_MediaPlay), QIcon::Normal, QIcon::On); + load_icon.addPixmap(style()->standardPixmap(QStyle::SP_MediaStop), QIcon::Normal, QIcon::Off); + ui->load->setIcon(load_icon); + } + + auto metaData = loader->metaData()["MetaData"].toObject(); + + this->setWindowTitle(metaData["name"].toString()); + + ui->path->setText(loader->fileName()); + ui->load->setChecked(loader->isLoaded()); + + connect(ui->load, &QToolButton::clicked, this, [this, loader](bool checked) { + if(checked) { + // load plugin + if(!loader->load()) { + ui->load->setChecked(false); + ui->error->setText(loader->errorString()); + } + } else { + // unload plugin + if(!loader->unload()) { + ui->load->setChecked(true); + ui->error->setText(loader->errorString()); + } + } + }); + + ui->name->setText(metaData[QLatin1String("name")].toString()); + ui->author->setText(metaData[QLatin1String("author")].toString()); + ui->license->setText(metaData[QLatin1String("license")].toString()); + ui->shortcut->setText(metaData[QLatin1String("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; +} -- cgit v1.2.1