aboutsummaryrefslogtreecommitdiff
path: root/src/InputMediator.cpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-03-12 20:47:57 +0530
committerAkshay Nair <phenax5@gmail.com>2025-03-12 21:06:52 +0530
commit05ae8976a8e1ab5411058de244c4e2fcc87ec369 (patch)
treecb3661ed66b9aeb6b78818228d4ec4785dbf27e1 /src/InputMediator.cpp
parentd46cf6e12452261c6aaf498dddf8e1176d349d6e (diff)
downloadnull-browser-05ae8976a8e1ab5411058de244c4e2fcc87ec369.tar.gz
null-browser-05ae8976a8e1ab5411058de244c4e2fcc87ec369.zip
Refactor MainWindow into InputMediator
Diffstat (limited to '')
-rw-r--r--src/InputMediator.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/InputMediator.cpp b/src/InputMediator.cpp
new file mode 100644
index 0000000..8bcadd0
--- /dev/null
+++ b/src/InputMediator.cpp
@@ -0,0 +1,97 @@
+#include <QWidget>
+#include <QtCore>
+
+#include "CommandParser.hpp"
+#include "InputMediator.hpp"
+#include "LuaRuntime.hpp"
+#include "completion/CommandsAdapter.hpp"
+#include "completion/UrlAdapter.hpp"
+#include "widgets/WebViewStack.hpp"
+
+InputMediator::InputMediator(InputLine *inputLine, WebViewStack *webViewStack,
+ LuaRuntime *luaRuntime)
+ : QObject(), inputLine(inputLine), webViewStack(webViewStack),
+ luaRuntime(luaRuntime) {
+ // Inputline
+ inputLine->setHidden(true);
+ connect(inputLine, &InputLine::submitted, this,
+ &InputMediator::onInputSubmit);
+ connect(inputLine, &InputLine::cancelled, this,
+ &InputMediator::hideInputLine);
+
+ // Lua runtime
+ connect(luaRuntime, &LuaRuntime::urlOpened, webViewStack,
+ &WebViewStack::openUrl);
+}
+
+void InputMediator::onInputSubmit(QString input) {
+ hideInputLine();
+
+ if (dynamic_cast<CommandEval *>(currentEvaluationType))
+ return evaluateCommand(input);
+
+ if (auto urlEval = dynamic_cast<UrlEval *>(currentEvaluationType))
+ return webViewStack->openUrl(input, urlEval->type());
+}
+
+void InputMediator::hideInputLine() {
+ inputLine->setInputFocus(false);
+ inputLine->setHidden(true);
+}
+
+void InputMediator::showInputLine() {
+ inputLine->setHidden(false);
+ inputLine->raise();
+ inputLine->setInputFocus(true);
+}
+
+void InputMediator::showCommandInput(QString cmd) {
+ setEvaluationType(new CommandEval());
+ inputLine->setAdapter(new CommandsAdapter);
+ inputLine->setInputText(cmd);
+ showInputLine();
+}
+
+void InputMediator::setEvaluationType(EvaluationType *evalType) {
+ if (currentEvaluationType)
+ delete currentEvaluationType;
+ currentEvaluationType = evalType;
+}
+
+void InputMediator::showURLInput(QString url, OpenType openType) {
+ setEvaluationType(new UrlEval(openType));
+ inputLine->setAdapter(new UrlAdapter);
+ inputLine->setInputText(url);
+ showInputLine();
+}
+
+void InputMediator::evaluateCommand(QString command) {
+ CommandParser parser;
+ auto cmd = parser.parse(command);
+
+ switch (cmd.command) {
+ case CommandType::LuaEval:
+ luaRuntime->evaluate(cmd.argsString);
+ break;
+ case CommandType::Open:
+ if (cmd.argsString.trimmed().isEmpty())
+ showURLInput("", OpenType::OpenUrl);
+ else
+ webViewStack->openUrl(cmd.argsString, OpenType::OpenUrl);
+ break;
+ case CommandType::TabOpen:
+ if (cmd.argsString.trimmed().isEmpty())
+ showURLInput("", OpenType::OpenUrlInTab);
+ else
+ webViewStack->openUrl(cmd.argsString, OpenType::OpenUrlInTab);
+ break;
+ case CommandType::TabNext:
+ webViewStack->next();
+ break;
+ case CommandType::TabPrev:
+ webViewStack->previous();
+ break;
+ case CommandType::Noop:
+ break;
+ }
+}