diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-03-12 20:47:57 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-03-12 21:06:52 +0530 |
| commit | 05ae8976a8e1ab5411058de244c4e2fcc87ec369 (patch) | |
| tree | cb3661ed66b9aeb6b78818228d4ec4785dbf27e1 /src/InputMediator.cpp | |
| parent | d46cf6e12452261c6aaf498dddf8e1176d349d6e (diff) | |
| download | null-browser-05ae8976a8e1ab5411058de244c4e2fcc87ec369.tar.gz null-browser-05ae8976a8e1ab5411058de244c4e2fcc87ec369.zip | |
Refactor MainWindow into InputMediator
Diffstat (limited to 'src/InputMediator.cpp')
| -rw-r--r-- | src/InputMediator.cpp | 97 |
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; + } +} |
