From 240fb8427a89d0aa78da07c8d147a0d57df5bb67 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Thu, 22 Nov 2018 10:23:47 +0100 Subject: Add AboutPlugin dialog --- cmake/VendorConfig.cmake | 53 ------------- lib/about/aboutplugin.cpp | 87 +++++++++++++++++++++ lib/about/aboutplugin.h | 31 ++++++++ lib/about/aboutplugin.ui | 179 +++++++++++++++++++++++++++++++++++++++++++ lib/about/meson.build | 6 +- src/browser.cpp | 39 ++++++---- src/mainwindow/mainwindow.ui | 8 +- 7 files changed, 333 insertions(+), 70 deletions(-) delete mode 100644 cmake/VendorConfig.cmake create mode 100644 lib/about/aboutplugin.cpp create mode 100644 lib/about/aboutplugin.h create mode 100644 lib/about/aboutplugin.ui diff --git a/cmake/VendorConfig.cmake b/cmake/VendorConfig.cmake deleted file mode 100644 index bb88eec..0000000 --- a/cmake/VendorConfig.cmake +++ /dev/null @@ -1,53 +0,0 @@ -find_package(PythonInterp 3.2 REQUIRED) - -string(TOLOWER ${CMAKE_SYSTEM_NAME} SYSTEM_NAME) - -if (NOT EXISTS "${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config") - message(FATAL_ERROR "No vendor config for ${SYSTEM_NAME}: ${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config is missing") -endif() -# there is a .config in ${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config - -function(config KEY KCONFIG) -execute_process( - COMMAND ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/tools/config.py" "--kconfig=${PROJECT_SOURCE_DIR}/${KCONFIG}" "--dotconfig=${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config" ${KEY} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE output OUTPUT_STRIP_TRAILING_WHITESPACE) - set("CONFIG_${KEY}" ${output} PARENT_SCOPE) -endfunction() - -config("POI_NAME" "src/Kconfig") -config("POI_EXE" "src/Kconfig") - -config("INSTALL_BINDIR" "Kconfig") -config("INSTALL_LIBDIR" "Kconfig") -config("INSTALL_PLUGINDIR" "Kconfig") -config("INSTALL_APPDIR" "Kconfig") -config("INSTALL_ICONDIR" "Kconfig") - -add_custom_command(OUTPUT "${PROJECT_BINARY_DIR}/include/config.h" - COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/include" - COMMAND ${CMAKE_COMMAND} -E env "srctree=${PROJECT_SOURCE_DIR}" - ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/tools/Kconfiglib/genconfig.py" "--header-path=${PROJECT_BINARY_DIR}/include/config.h" "${PROJECT_SOURCE_DIR}/src/Kconfig" - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}") - -add_custom_target(config_header DEPENDS "${PROJECT_BINARY_DIR}/include/config.h") - -# QTBUG defines -execute_process( - COMMAND ${PYTHON_EXECUTABLE} "${PROJECT_SOURCE_DIR}/tools/config.py" "--kconfig=${PROJECT_SOURCE_DIR}/src/Kconfig" "--dotconfig=${PROJECT_SOURCE_DIR}/${SYSTEM_NAME}/.config" "QTBUG" - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE QTBUGS OUTPUT_STRIP_TRAILING_WHITESPACE) -foreach(bug IN LISTS QTBUGS) - set(${bug} CACHE STRING "${bug} workaround") -endforeach() - - -## Version information, used in src/version.h.in -if (EXISTS "${PROJECT_SOURCE_DIR}/.git") - execute_process(COMMAND git rev-list --count HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE VerRevision OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE VerShortId OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND git rev-parse HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE VerCommit OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND git rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE VerBranch OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() - -set(poi_Version "r${VerRevision}" CACHE STRING "Short version string") -set(poi_Describe "r${VerRevision}-${VerShortId}" CACHE STRING "Long version string") -set(poi_Build "${VerBranch}-${VerCommit}" CACHE STRING "Build string") 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 +#include + +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 + +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 @@ + + + AboutPluginDialog + + + + 0 + 0 + 474 + 329 + + + + Dialog + + + + + + 0 + + + + General + + + + + + Name + + + + + + + + + + + + + + Author + + + + + + + + + + + + + + Shortcut + + + + + + + + + + + + + + + + false + + + Load + + + true + + + + + + + + + + + + + + + + License + + + + + + + + Details + + + + + + TextLabel + + + + + + + + Key + + + + + Value + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + + buttonBox + accepted() + AboutPluginDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + AboutPluginDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + 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] ) diff --git a/src/browser.cpp b/src/browser.cpp index 8ff8616..0bd3d06 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -7,11 +7,21 @@ */ #include "browser.h" +#include "aboutdialog.h" +#include "aboutplugin.h" #include "addressbar.h" +#include "bookmarkswidget.h" +#include "config.h" +#include "configuration.h" +#include "downloadswidget.h" #include "mainwindow/mainwindow.h" +#include "profilemanager.h" #include "subwindow/subwindow.h" +#include "ui_mainwindow.h" #include "util.h" +#include "webengine/filter.h" #include "webengine/urlinterceptor.h" +#include "webprofile.h" #include #include #include @@ -20,18 +30,9 @@ #include #include #include -#include "aboutdialog.h" -#include "bookmarkswidget.h" -#include "configuration.h" -#include "downloadswidget.h" -#include -#include "profilemanager.h" -#include "webprofile.h" -#include "webengine/filter.h" -#include -#include -#include "config.h" #include +#include +#include Browser::Browser(int &argc, char *argv[], bool allowSecondary) : SingleApplication(argc, argv, allowSecondary, SingleApplication::User | SingleApplication::SecondaryNotification | SingleApplication::ExcludeAppVersion) @@ -69,12 +70,12 @@ const QStringList Browser::configurationOptions() const return options; } -const QString Browser::configuration(const QString& key) const +const QString Browser::configuration(const QString &key) const { return m_config->value(qUtf8Printable(key)).value_or(QString()); } -void Browser::setConfiguration(const QString& key, const QString& value) +void Browser::setConfiguration(const QString &key, const QString &value) { m_config->setValue(qUtf8Printable(key), value); } @@ -223,6 +224,18 @@ MainWindow *Browser::createWindow() connect(window->addressBar, &AddressBar::complete, m_bookmarks.get(), &BookmarksWidget::search); connect(window, &MainWindow::createBookmark, m_bookmarks.get(), &BookmarksWidget::addBookmark); + connect(window->ui->menuTools, &QMenu::aboutToShow, this, [this, window]() { + window->ui->menuPlugins->clear(); + + for(const QPluginLoader *l : m_plugins) { + auto *action = window->ui->menuPlugins->addAction(l->metaData()[QLatin1String("MetaData")].toObject()[QLatin1String("name")].toString()); + connect(action, &QAction::triggered, this, [l, window]() { + auto *dlg = new AboutPluginDialog(l, window); + dlg->exec(); + }); + } + }); + auto *bookmarksAction = new QAction(tr("Bookmarks"), window); m_config->setShortcut(bookmarksAction, "bookmarks.shortcut"); connect(bookmarksAction, &QAction::triggered, window, [this, window]() { diff --git a/src/mainwindow/mainwindow.ui b/src/mainwindow/mainwindow.ui index cb6d39e..ad213c6 100644 --- a/src/mainwindow/mainwindow.ui +++ b/src/mainwindow/mainwindow.ui @@ -20,7 +20,7 @@ 0 0 800 - 23 + 30 @@ -55,6 +55,12 @@ Too&ls + + + &Plugins + + + -- cgit v1.2.1