diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-06-03 13:24:14 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-06-03 13:24:14 +0200 |
commit | 8cd62fde42a601d07cc47450b69ebb5ee60bd4b0 (patch) | |
tree | db0c62a025fd626bf1c1aed2f63f160e13f3047a /src | |
parent | Hiding ProfileView until a profile is selected (diff) | |
download | smolbote-8cd62fde42a601d07cc47450b69ebb5ee60bd4b0.tar.xz |
Test plugin loading
Diffstat (limited to 'src')
-rw-r--r-- | src/browser.cpp | 29 | ||||
-rw-r--r-- | src/interfaces.h | 45 | ||||
-rw-r--r-- | src/testplugin.cpp | 31 | ||||
-rw-r--r-- | src/testplugin.h | 45 |
4 files changed, 150 insertions, 0 deletions
diff --git a/src/browser.cpp b/src/browser.cpp index ca2b5d8..031bdb9 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -23,6 +23,10 @@ #include <QtWebEngine> #include <QMessageBox> +#include <QDir> +#include <QPluginLoader> +#include "interfaces.h" + Browser::Browser(int &argc, char *argv[]) : QApplication(argc, argv) { @@ -108,6 +112,31 @@ bool Browser::prepare(QStringList urls) QtWebEngine::initialize(); + // Loading plugins + qDebug(">> Looking for plugins..."); + + // Look for plugins in "../lib/smolbote/plugins" + QDir dir = QDir::current(); + dir.cd("../lib/smolbote/plugins"); + + // Load all plugins + for(QString filename : dir.entryList(QDir::Files | QDir::Readable)) { + qDebug("Loading %s", qUtf8Printable(filename)); + + QPluginLoader loader(dir.absoluteFilePath(filename)); + QObject *plugin = loader.instance(); + if(plugin) { + PluginInterface *p = qobject_cast<PluginInterface *>(plugin); + if(p) { + qDebug("Successfully loaded plugin [name = %s]", qUtf8Printable(p->name())); + } + } else { + qDebug("Plugin load failed"); + } + } + + qDebug("<< Plugins end..."); + // TODO properly profile(""); profile("Default"); diff --git a/src/interfaces.h b/src/interfaces.h new file mode 100644 index 0000000..8cf02fc --- /dev/null +++ b/src/interfaces.h @@ -0,0 +1,45 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef INTERFACES_H +#define INTERFACES_H + +#include <QtPlugin> + +class QString; +class QWidget; + +class PluginInterface +{ +public: + virtual QString name() const = 0; +}; + +class GuiInterface +{ +public: + virtual QWidget widget() const = 0; +}; + +#define PluginInterface_iid "net.iserlohn-fortress.poi.PluginInterface" + +Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid) + +#endif // INTERFACES_H diff --git a/src/testplugin.cpp b/src/testplugin.cpp new file mode 100644 index 0000000..10cab91 --- /dev/null +++ b/src/testplugin.cpp @@ -0,0 +1,31 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#include "testplugin.h" + +TestPlugin::TestPlugin(QObject *parent) : QObject(parent) +{ + +} + +QString TestPlugin::name() const +{ + return QString("Test Plugin"); +} diff --git a/src/testplugin.h b/src/testplugin.h new file mode 100644 index 0000000..eec3b1f --- /dev/null +++ b/src/testplugin.h @@ -0,0 +1,45 @@ +/******************************************************************************* + ** + ** smolbote: yet another qute browser + ** Copyright (C) 2017 Xian Nox + ** + ** This program is free software: you can redistribute it and/or modify + ** it under the terms of the GNU General Public License as published by + ** the Free Software Foundation, either version 3 of the License, or + ** (at your option) any later version. + ** + ** This program is distributed in the hope that it will be useful, + ** but WITHOUT ANY WARRANTY; without even the implied warranty of + ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ** GNU General Public License for more details. + ** + ** You should have received a copy of the GNU General Public License + ** along with this program. If not, see <http://www.gnu.org/licenses/>. + ** + ******************************************************************************/ + +#ifndef TESTPLUGIN_H +#define TESTPLUGIN_H + +#include <QObject> +#include "interfaces.h" + +class TestPlugin : public QObject, + public PluginInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID PluginInterface_iid) + Q_INTERFACES(PluginInterface) + +public: + explicit TestPlugin(QObject *parent = nullptr); + + // PluginInterface + QString name() const override; + +signals: + +public slots: +}; + +#endif // TESTPLUGIN_H |