Implement Plugin Loading.

This commit adds plugin laoding which are then added as sub winows onto the main window.
This commit also adds 2 plugins however more will follow
This commit is contained in:
2025-11-10 21:42:51 +00:00
parent 0c42ac2c72
commit ac85f22bb5
13 changed files with 309 additions and 0 deletions

2
plugins/CMakeLists.txt Normal file
View File

@@ -0,0 +1,2 @@
add_subdirectory(WebBrowserPlugin)
add_subdirectory(TerminalPlugin)

View File

@@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.16)
project(TerminalPlugin VERSION 1.0 LANGUAGES C CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include(GNUInstallDirs)
find_package(QT NAMES Qt6 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Widgets)
qt_add_plugin(TerminalPlugin)
target_sources(TerminalPlugin PRIVATE
TerminalPlugin.cpp TerminalPlugin.h
)
target_link_libraries(TerminalPlugin PRIVATE
Qt::Core
Qt::Gui
Qt::Widgets
qtermwidget6
)

View File

@@ -0,0 +1,38 @@
#include "TerminalPlugin.h"
#include <QVBoxLayout>
#include <QWidget>
#include <QApplication>
QString TerminalPlugin::pname()
{
return "Terminal Plugin";
}
QString TerminalPlugin::pdesc()
{
return "Simple Terminal Plugin.";
}
QWidget* TerminalPlugin::pcontent()
{
QWidget *test = new QWidget();
QVBoxLayout *mainLayout = new QVBoxLayout;
console = new QTermWidget(test);
QFont font = QApplication::font();
font.setFamily("Monospace");
font.setPointSize(12);
console->setTerminalFont(font);
console->setScrollBarPosition(QTermWidget::ScrollBarRight);
console->setColorScheme("WhiteOnBlack");
test->setWindowTitle(tr("Terminal Plugin"));
test->resize(600, 400);
mainLayout->addWidget(console);
test->setLayout(mainLayout);
QIcon icon = QIcon(":/images/monkey.png");
test->setWindowIcon(icon);
return test;
}

View File

@@ -0,0 +1,29 @@
#ifndef TESTPLUGIN_H
#define TESTPLUGIN_H
#include <../../src/interface.h>
#include <qtermwidget6/qtermwidget.h>
#include <QObject>
#include <QtPlugin>
#include <QString>
#include <QWidget>
#include <QImage>
class TerminalPlugin : public QObject, public Interface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.SOM.Interface" FILE "TerminalPlugin.json")
Q_INTERFACES(Interface)
public:
QString pname() override;
QString pdesc() override;
QWidget *pcontent() override;
private:
QTermWidget *console;
};
#endif

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.16)
project(WebBrowserPlugin VERSION 1.0 LANGUAGES C CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
include(GNUInstallDirs)
find_package(QT NAMES Qt6 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui WebEngineWidgets Widgets)
qt_add_plugin(WebBrowserPlugin)
target_sources(WebBrowserPlugin PRIVATE
WebBrowserPlugin.cpp WebBrowserPlugin.h
)
target_link_libraries(WebBrowserPlugin PRIVATE
Qt::Core
Qt::Gui
Qt::WebEngineWidgets
Qt::Widgets
)

View File

@@ -0,0 +1,78 @@
#include "WebBrowserPlugin.h"
#include <QVBoxLayout>
#include <QWidget>
QString WebBrowserPlugin::pname()
{
return "Web Browser Plugin";
}
QString WebBrowserPlugin::pdesc()
{
return "Simple Web Browser Plugin.";
}
QWidget* WebBrowserPlugin::pcontent()
{
QWidget *test = new QWidget();
test->setWindowTitle(tr("Web Browser Plugin"));
test->resize(1024, 750);
QVBoxLayout *mainLayout = new QVBoxLayout;
view = new QWebEngineView(test);
view->setUrl(QUrl("https://rubenwardy.com/minetest_modding_book/en/index.html"));
view->resize(1024, 750);
horizontalGroupBox = new QGroupBox();
QHBoxLayout *layout = new QHBoxLayout;
back = new QPushButton(tr("Back"));
layout->addWidget(back);
connect(back, &QPushButton::clicked, this, &WebBrowserPlugin::backpage);
forward = new QPushButton(tr("Forward"));
layout->addWidget(forward);
connect(forward, &QPushButton::clicked, this, &WebBrowserPlugin::forwardpage);
refresh = new QPushButton(tr("Refresh"));
layout->addWidget(refresh);
connect(refresh, &QPushButton::clicked, this, &WebBrowserPlugin::refreshpage);
smallEditor = new QLineEdit;
layout->addWidget(smallEditor);
smallEditor->setText("https://rubenwardy.com/minetest_modding_book/en/index.html");
go = new QPushButton(tr("Go"));
layout->addWidget(go);
connect(go, &QPushButton::clicked, this, &WebBrowserPlugin::gotourl);
horizontalGroupBox->setLayout(layout);
mainLayout->addWidget(horizontalGroupBox);
mainLayout->addWidget(view,1);
test->setLayout(mainLayout);
QIcon icon = QIcon(":/images/monkey.png");
test->setWindowIcon(icon);
return test;
}
void WebBrowserPlugin::gotourl()
{
view->setUrl(QUrl(smallEditor->text()));
}
void WebBrowserPlugin::refreshpage()
{
view->reload();
}
void WebBrowserPlugin::backpage()
{
view->back();
}
void WebBrowserPlugin::forwardpage()
{
view->forward();
}

View File

@@ -0,0 +1,35 @@
#ifndef WEBBROWSERPLUGIN_H
#define WEBBROWSERPLUGIN_H
#include <../../src/interface.h>
#include <QWebEngineView>
#include <QtWidgets>
class WebBrowserPlugin : public QObject, public Interface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.SOM.Interface" FILE "WebBrowserPlugin.json")
Q_INTERFACES(Interface)
public:
QString pname() override;
QString pdesc() override;
QWidget *pcontent() override;
private:
QGroupBox *horizontalGroupBox;
QPushButton *back;
QPushButton *forward;
QPushButton *refresh;
QLineEdit *smallEditor;
QPushButton *go;
QWebEngineView *view;
private slots:
void gotourl();
void refreshpage();
void backpage();
void forwardpage();
};
#endif

View File

@@ -0,0 +1 @@
{}