From 5e26d0efb42103457d813ea79830eebf6feeba9b Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 23 Nov 2018 11:48:03 +0100 Subject: Loading and unloading of plugins at runtime --- lib/about/aboutplugin.cpp | 28 ++++++++++++++++++++++++++-- lib/about/aboutplugin.h | 2 +- lib/about/aboutplugin.ui | 47 ++++++++++++++++++++++++++++++++--------------- 3 files changed, 59 insertions(+), 18 deletions(-) (limited to 'lib/about') diff --git a/lib/about/aboutplugin.cpp b/lib/about/aboutplugin.cpp index 7df75fa..b2fab51 100644 --- a/lib/about/aboutplugin.cpp +++ b/lib/about/aboutplugin.cpp @@ -54,19 +54,43 @@ QTreeWidgetItem *createItem(const QString &key, const QJsonValue &json, QTreeWid return item; } -AboutPluginDialog::AboutPluginDialog(const QPluginLoader *loader, QWidget *parent) +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->loaded->setChecked(loader->isLoaded()); + 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[QLatin1Literal("name")].toString()); ui->author->setText(metaData[QLatin1Literal("author")].toString()); diff --git a/lib/about/aboutplugin.h b/lib/about/aboutplugin.h index adab215..9651060 100644 --- a/lib/about/aboutplugin.h +++ b/lib/about/aboutplugin.h @@ -21,7 +21,7 @@ class AboutPluginDialog : public QDialog Q_OBJECT public: - explicit AboutPluginDialog(const QPluginLoader *loader, QWidget *parent = nullptr); + explicit AboutPluginDialog(QPluginLoader *loader, QWidget *parent = nullptr); ~AboutPluginDialog() override; private: diff --git a/lib/about/aboutplugin.ui b/lib/about/aboutplugin.ui index f2d4848..31e20c6 100644 --- a/lib/about/aboutplugin.ui +++ b/lib/about/aboutplugin.ui @@ -67,21 +67,7 @@ - - - - - false - - - Load - - - true - - - - + @@ -127,6 +113,37 @@ + + + Controls + + + + + + Load + + + true + + + + + + + + + + + + + + Status + + + + + -- cgit v1.2.1