aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--smolbote.qbs22
-rw-r--r--src/browser.cpp8
-rw-r--r--src/browser.h4
-rw-r--r--src/interfaces.h10
-rw-r--r--src/plugins/plugins.qbs5
-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.qbs26
-rw-r--r--src/plugins/tomleditor/tomleditorform.cpp53
-rw-r--r--src/plugins/tomleditor/tomleditorform.h56
-rw-r--r--src/plugins/tomleditor/tomleditorform.ui22
-rw-r--r--src/widgets/mainwindowmenubar.cpp13
12 files changed, 199 insertions, 20 deletions
diff --git a/smolbote.qbs b/smolbote.qbs
index 0ae87d5..60bd062 100644
--- a/smolbote.qbs
+++ b/smolbote.qbs
@@ -183,23 +183,7 @@ Project {
}
} // CppApplication poi
- DynamicLibrary {
- id: testPlugin
- name: "testPlugin"
- Depends { name: "cpp" }
- Depends { name: "Qt"; submodules: ["core", "widgets", "webengine", "webenginewidgets"] }
-
- files: [
- "src/interfaces.h",
- "src/testplugin.cpp",
- "src/testplugin.h",
- ]
-
- Group {
- fileTagsFilter: product.type
- qbs.install: true
- qbs.installDir: "lib/smolbote/plugins"
- }
-
- } // DynamicLibrary testPlugin
+ SubProject {
+ filePath: "src/plugins/plugins.qbs"
+ }
}
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);