diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-06-03 17:22:50 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2017-06-03 17:22:50 +0200 |
commit | 8917ca1cfb8a77a84fea06f6a9c00558f5a21e88 (patch) | |
tree | 2e03ed197f38e93764a3926776888636b22e8e21 /src | |
parent | Test plugin loading (diff) | |
download | smolbote-8917ca1cfb8a77a84fea06f6a9c00558f5a21e88.tar.xz |
Adding plugin action to the menu bar
Diffstat (limited to 'src')
-rw-r--r-- | src/browser.cpp | 8 | ||||
-rw-r--r-- | src/browser.h | 4 | ||||
-rw-r--r-- | src/interfaces.h | 10 | ||||
-rw-r--r-- | src/plugins/plugins.qbs | 5 | ||||
-rw-r--r-- | src/plugins/testplugin/testplugin.cpp (renamed from src/testplugin.cpp) | 0 | ||||
-rw-r--r-- | src/plugins/testplugin/testplugin.h (renamed from src/testplugin.h) | 0 | ||||
-rw-r--r-- | src/plugins/tomleditor/tomleditor.qbs | 26 | ||||
-rw-r--r-- | src/plugins/tomleditor/tomleditorform.cpp | 53 | ||||
-rw-r--r-- | src/plugins/tomleditor/tomleditorform.h | 56 | ||||
-rw-r--r-- | src/plugins/tomleditor/tomleditorform.ui | 22 | ||||
-rw-r--r-- | src/widgets/mainwindowmenubar.cpp | 13 |
11 files changed, 196 insertions, 1 deletions
diff --git a/src/browser.cpp b/src/browser.cpp index 031bdb9..f95d01a 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -38,6 +38,8 @@ Browser::Browser(int &argc, char *argv[]) : m_bookmarksManager = nullptr; m_downloadManager = nullptr; m_blocklistManager = nullptr; + + m_plugin = nullptr; } Browser::~Browser() @@ -129,6 +131,7 @@ bool Browser::prepare(QStringList urls) PluginInterface *p = qobject_cast<PluginInterface *>(plugin); if(p) { qDebug("Successfully loaded plugin [name = %s]", qUtf8Printable(p->name())); + m_plugin = plugin; } } else { qDebug("Plugin load failed"); @@ -261,6 +264,11 @@ QStringList Browser::profiles() return l; } +QObject *Browser::plugin() +{ + return m_plugin; +} + void Browser::handleNewConnection() { QLocalSocket *socket = m_localServer->nextPendingConnection(); diff --git a/src/browser.h b/src/browser.h index 6c3252f..2c30bcc 100644 --- a/src/browser.h +++ b/src/browser.h @@ -65,6 +65,8 @@ public: WebEngineProfile *profile(const QString name); QStringList profiles(); + QObject *plugin(); + public slots: void removeWindow(MainWindow* window); @@ -84,6 +86,8 @@ private: DownloadsWidget *m_downloadManager; BlockerManager *m_blocklistManager; + QObject *m_plugin; + }; #endif // BROWSER_H diff --git a/src/interfaces.h b/src/interfaces.h index 8cf02fc..033a65a 100644 --- a/src/interfaces.h +++ b/src/interfaces.h @@ -25,6 +25,7 @@ class QString; class QWidget; +class QAction; class PluginInterface { @@ -35,11 +36,18 @@ public: class GuiInterface { public: - virtual QWidget widget() const = 0; + // The widget that should be displayed for this plugin + virtual QWidget *widget() = 0; + // The action that should trigger displaying the widget + virtual QAction *action() = 0; }; #define PluginInterface_iid "net.iserlohn-fortress.poi.PluginInterface" Q_DECLARE_INTERFACE(PluginInterface, PluginInterface_iid) +#define GuiInterface_iid "net.iserlohn-fortress.poi.GuiInterface" + +Q_DECLARE_INTERFACE(GuiInterface, GuiInterface_iid) + #endif // INTERFACES_H diff --git a/src/plugins/plugins.qbs b/src/plugins/plugins.qbs new file mode 100644 index 0000000..72b4ba2 --- /dev/null +++ b/src/plugins/plugins.qbs @@ -0,0 +1,5 @@ +Project { + references: [ + "tomleditor/tomleditor.qbs", + ] +} diff --git a/src/testplugin.cpp b/src/plugins/testplugin/testplugin.cpp index 10cab91..10cab91 100644 --- a/src/testplugin.cpp +++ b/src/plugins/testplugin/testplugin.cpp diff --git a/src/testplugin.h b/src/plugins/testplugin/testplugin.h index eec3b1f..eec3b1f 100644 --- a/src/testplugin.h +++ b/src/plugins/testplugin/testplugin.h diff --git a/src/plugins/tomleditor/tomleditor.qbs b/src/plugins/tomleditor/tomleditor.qbs new file mode 100644 index 0000000..9b577a7 --- /dev/null +++ b/src/plugins/tomleditor/tomleditor.qbs @@ -0,0 +1,26 @@ +import qbs 1.0 + +Project { + name: "tomleditor" + + DynamicLibrary { + id: tomleditor + name: "tomleditor" + Depends { name: "cpp" } + Depends { name: "Qt"; submodules: ["core", "widgets", "webengine", "webenginewidgets"] } + + cpp.includePaths: ["../.."] + files: [ + "tomleditorform.cpp", + "tomleditorform.h", + "tomleditorform.ui", + ] + + Group { + fileTagsFilter: product.type + qbs.install: true + qbs.installDir: "lib/smolbote/plugins" + } + + } // DynamicLibrary testPlugin +} diff --git a/src/plugins/tomleditor/tomleditorform.cpp b/src/plugins/tomleditor/tomleditorform.cpp new file mode 100644 index 0000000..0a7d2f8 --- /dev/null +++ b/src/plugins/tomleditor/tomleditorform.cpp @@ -0,0 +1,53 @@ +/******************************************************************************* + ** + ** 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 "tomleditorform.h" +#include "ui_tomleditorform.h" + +#include <QAction> + +TomlEditorForm::TomlEditorForm(QWidget *parent) : + QWidget(parent), + ui(new Ui::TomlEditorForm) +{ + ui->setupUi(this); + m_action = new QAction(tr("Editor")); + connect(m_action, SIGNAL(triggered()), this, SLOT(show())); +} + +TomlEditorForm::~TomlEditorForm() +{ + delete ui; +} + +QString TomlEditorForm::name() const +{ + return QString("Toml Editor Plugin"); +} + +QWidget *TomlEditorForm::widget() +{ + return this; +} + +QAction *TomlEditorForm::action() +{ + return m_action; +} diff --git a/src/plugins/tomleditor/tomleditorform.h b/src/plugins/tomleditor/tomleditorform.h new file mode 100644 index 0000000..d0bf022 --- /dev/null +++ b/src/plugins/tomleditor/tomleditorform.h @@ -0,0 +1,56 @@ +/******************************************************************************* + ** + ** 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 TOMLEDITORFORM_H +#define TOMLEDITORFORM_H + +#include <QWidget> +#include <interfaces.h> + +namespace Ui { +class TomlEditorForm; +} + +class TomlEditorForm : public QWidget, + public PluginInterface, + public GuiInterface +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID PluginInterface_iid) + Q_INTERFACES(PluginInterface GuiInterface) + +public: + explicit TomlEditorForm(QWidget *parent = 0); + ~TomlEditorForm(); + + // PluginInterface + QString name() const override; + + // GuiInterface + QWidget *widget() override; + QAction *action() override; + +private: + Ui::TomlEditorForm *ui; + + QAction *m_action; +}; + +#endif // TOMLEDITORFORM_H diff --git a/src/plugins/tomleditor/tomleditorform.ui b/src/plugins/tomleditor/tomleditorform.ui new file mode 100644 index 0000000..adc750e --- /dev/null +++ b/src/plugins/tomleditor/tomleditorform.ui @@ -0,0 +1,22 @@ +<?xml version='1.0'?> +<ui version="4.0"> + <author/> + <comment/> + <exportmacro/> + <class>TomlEditorForm</class> + <widget name="TomlEditorForm" class="QWidget"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>240</width> + <height>320</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + </widget> + <pixmapfunction/> + <connections/> +</ui> diff --git a/src/widgets/mainwindowmenubar.cpp b/src/widgets/mainwindowmenubar.cpp index 0770a8d..cd27a98 100644 --- a/src/widgets/mainwindowmenubar.cpp +++ b/src/widgets/mainwindowmenubar.cpp @@ -24,6 +24,8 @@ #include <QInputDialog> #include "forms/profilesdialog.h" +#include "interfaces.h" + MainWindowMenuBar::MainWindowMenuBar(MainWindow *parent) : QMenuBar(parent) { @@ -52,6 +54,17 @@ MainWindowMenuBar::MainWindowMenuBar(MainWindow *parent) : toolsMenu->addSeparator(); toolsMenu->addAction(tr("Filter"), qApp->blocklists(), SLOT(show()), QKeySequence::fromString(sSettings->value("blocker.shortcut").toString())); + if(qApp->plugin()) { + GuiInterface *gui = qobject_cast<GuiInterface *>(qApp->plugin()); + if(gui) { + toolsMenu->addAction(gui->action()); + } else { + qDebug("Plugin doesn't gui"); + } + } else { + qDebug("No plugin!"); + } + // Profile menu QMenu *profileMenu = new QMenu(tr("Profile"), this); addMenu(profileMenu); |