From 8917ca1cfb8a77a84fea06f6a9c00558f5a21e88 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sat, 3 Jun 2017 17:22:50 +0200 Subject: Adding plugin action to the menu bar --- src/browser.cpp | 8 +++++ src/browser.h | 4 +++ src/interfaces.h | 10 +++++- src/plugins/plugins.qbs | 5 +++ src/plugins/testplugin/testplugin.cpp | 31 +++++++++++++++++ src/plugins/testplugin/testplugin.h | 45 +++++++++++++++++++++++++ src/plugins/tomleditor/tomleditor.qbs | 26 ++++++++++++++ src/plugins/tomleditor/tomleditorform.cpp | 53 +++++++++++++++++++++++++++++ src/plugins/tomleditor/tomleditorform.h | 56 +++++++++++++++++++++++++++++++ src/plugins/tomleditor/tomleditorform.ui | 22 ++++++++++++ src/testplugin.cpp | 31 ----------------- src/testplugin.h | 45 ------------------------- src/widgets/mainwindowmenubar.cpp | 13 +++++++ 13 files changed, 272 insertions(+), 77 deletions(-) create mode 100644 src/plugins/plugins.qbs create mode 100644 src/plugins/testplugin/testplugin.cpp create mode 100644 src/plugins/testplugin/testplugin.h create mode 100644 src/plugins/tomleditor/tomleditor.qbs create mode 100644 src/plugins/tomleditor/tomleditorform.cpp create mode 100644 src/plugins/tomleditor/tomleditorform.h create mode 100644 src/plugins/tomleditor/tomleditorform.ui delete mode 100644 src/testplugin.cpp delete mode 100644 src/testplugin.h (limited to 'src') 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(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/plugins/testplugin/testplugin.cpp b/src/plugins/testplugin/testplugin.cpp new file mode 100644 index 0000000..10cab91 --- /dev/null +++ b/src/plugins/testplugin/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 . + ** + ******************************************************************************/ + +#include "testplugin.h" + +TestPlugin::TestPlugin(QObject *parent) : QObject(parent) +{ + +} + +QString TestPlugin::name() const +{ + return QString("Test Plugin"); +} diff --git a/src/plugins/testplugin/testplugin.h b/src/plugins/testplugin/testplugin.h new file mode 100644 index 0000000..eec3b1f --- /dev/null +++ b/src/plugins/testplugin/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 . + ** + ******************************************************************************/ + +#ifndef TESTPLUGIN_H +#define TESTPLUGIN_H + +#include +#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 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 . + ** + ******************************************************************************/ + +#include "tomleditorform.h" +#include "ui_tomleditorform.h" + +#include + +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 . + ** + ******************************************************************************/ + +#ifndef TOMLEDITORFORM_H +#define TOMLEDITORFORM_H + +#include +#include + +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 @@ + + + + + + TomlEditorForm + + + + 0 + 0 + 240 + 320 + + + + Form + + + + + diff --git a/src/testplugin.cpp b/src/testplugin.cpp deleted file mode 100644 index 10cab91..0000000 --- a/src/testplugin.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/******************************************************************************* - ** - ** 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 . - ** - ******************************************************************************/ - -#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 deleted file mode 100644 index eec3b1f..0000000 --- a/src/testplugin.h +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - ** - ** 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 . - ** - ******************************************************************************/ - -#ifndef TESTPLUGIN_H -#define TESTPLUGIN_H - -#include -#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 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 #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(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); -- cgit v1.2.1