diff options
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/BrowserApp.cpp | 44 | ||||
| -rw-r--r-- | src/widgets/BrowserApp.hpp | 23 | ||||
| -rw-r--r-- | src/widgets/MainWindow.cpp | 34 | ||||
| -rw-r--r-- | src/widgets/MainWindow.hpp | 7 |
4 files changed, 82 insertions, 26 deletions
diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp new file mode 100644 index 0000000..0a82de0 --- /dev/null +++ b/src/widgets/BrowserApp.cpp @@ -0,0 +1,44 @@ +#include <QKeyEvent> +#include <QtCore> + +#include "LuaRuntime.hpp" +#include "widgets/BrowserApp.hpp" +#include "widgets/MainWindow.hpp" + +BrowserApp::BrowserApp() { + auto *lua = LuaRuntime::instance(); + lua->start_event_loop(); + + // Global event filter + qApp->installEventFilter(this); + + // NOTE: TMP + lua->load_file("./config.lua"); +}; + +MainWindow *BrowserApp::create_window() { + auto *win = new MainWindow((const Configuration &)configuration); + win->setWindowTitle("null-browser"); + windows.insert({last_id, win}); + last_id++; + win->show(); + return win; +} + +bool BrowserApp::eventFilter(QObject *target, QEvent *event) { + if (event->type() != QEvent::KeyPress) + return false; + + for (auto &match : windows) { + auto *win = match.second; + + if (auto *target_widget = dynamic_cast<QWidget *>(target); + win->isAncestorOf(target_widget)) { + auto *key_event = static_cast<QKeyEvent *>(event); + const bool should_skip = win->on_window_key_event(key_event); + return should_skip; + } + } + + return false; +} diff --git a/src/widgets/BrowserApp.hpp b/src/widgets/BrowserApp.hpp new file mode 100644 index 0000000..e4fcf99 --- /dev/null +++ b/src/widgets/BrowserApp.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include <unordered_map> + +#include "widgets/MainWindow.hpp" + +class BrowserApp : public QObject { + Q_OBJECT + +public: + BrowserApp(); + + MainWindow *create_window(); + +protected: + bool eventFilter(QObject *target, QEvent *event) override; + +private: + std::unordered_map<uint64_t, MainWindow *> windows; + uint64_t last_id = 1; + + Configuration configuration; +}; diff --git a/src/widgets/MainWindow.cpp b/src/widgets/MainWindow.cpp index d66611b..2d17557 100644 --- a/src/widgets/MainWindow.cpp +++ b/src/widgets/MainWindow.cpp @@ -9,13 +9,11 @@ #include "widgets/MainWindow.hpp" #include "widgets/WebViewStack.hpp" -MainWindow::MainWindow() { +MainWindow::MainWindow(const Configuration &configuration) + : configuration(configuration) { setStyleSheet("background-color: #000; color: #fff;"); setCentralWidget(new QWidget()); // TODO: manage widget memory - // Global event filter - qApp->installEventFilter(this); - // Root stacked layout auto *layout = new QStackedLayout(); layout->setContentsMargins(0, 0, 0, 0); @@ -25,10 +23,14 @@ MainWindow::MainWindow() { // Web engine auto *web_view_stack = - new WebViewStack((const Configuration *)&configuration, - new QWebEngineProfile("null-browser")); + new WebViewStack(&configuration, new QWebEngineProfile("null-browser")); layout->addWidget(web_view_stack); + auto *keymap_evaluator = new KeymapEvaluator; + + input_mediator = new InputMediator(web_view_stack, LuaRuntime::instance(), + keymap_evaluator); + // TODO: remoev web_view_stack->open_url(QUrl("https://duckduckgo.com"), OpenType::OpenUrl); web_view_stack->open_url(QUrl("https://ediblemonad.dev"), @@ -36,32 +38,20 @@ MainWindow::MainWindow() { web_view_stack->open_url(QUrl("https://github.com/trending"), OpenType::OpenUrlInBgTab); - auto *keymap_evaluator = new KeymapEvaluator; - - input_mediator = new InputMediator(web_view_stack, LuaRuntime::instance(), - keymap_evaluator); - - // NOTE: TMP - LuaRuntime::instance()->load_file("./config.lua"); - // TODO: remove - keymap_evaluator->add_keymap(KeyMode::Normal, "i", [&keymap_evaluator]() { + keymap_evaluator->add_keymap(KeyMode::Normal, "i", [keymap_evaluator]() { keymap_evaluator->set_current_mode(KeyMode::Insert); }); - keymap_evaluator->add_keymap(KeyMode::Insert, "<esc>", [&keymap_evaluator]() { + keymap_evaluator->add_keymap(KeyMode::Insert, "<esc>", [keymap_evaluator]() { keymap_evaluator->set_current_mode(KeyMode::Normal); }); keymap_evaluator->add_keymap(KeyMode::Normal, "<c-t>a", []() { qDebug() << "Stuff"; }); } -bool MainWindow::eventFilter(QObject * /*watched*/, QEvent *event) { - if (event->type() != QEvent::KeyPress) - return false; - - auto *key_event = static_cast<QKeyEvent *>(event); +bool MainWindow::on_window_key_event(QKeyEvent *event) { const bool should_skip = input_mediator->evaluate_keymap( - key_event->modifiers(), (Qt::Key)key_event->key()); + event->modifiers(), (Qt::Key)event->key()); return should_skip; } diff --git a/src/widgets/MainWindow.hpp b/src/widgets/MainWindow.hpp index 26bd15b..7aaca2b 100644 --- a/src/widgets/MainWindow.hpp +++ b/src/widgets/MainWindow.hpp @@ -7,12 +7,11 @@ class MainWindow : public QMainWindow { public: - MainWindow(); + MainWindow(const Configuration &configuration); -protected: - bool eventFilter(QObject *object, QEvent *event) override; + bool on_window_key_event(QKeyEvent *event); private: InputMediator *input_mediator; - Configuration configuration; + const Configuration &configuration; }; |
