diff options
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/InputLine.cpp | 15 | ||||
| -rw-r--r-- | src/widgets/MainWindow.cpp | 109 |
2 files changed, 19 insertions, 105 deletions
diff --git a/src/widgets/InputLine.cpp b/src/widgets/InputLine.cpp index 5edfe17..130732c 100644 --- a/src/widgets/InputLine.cpp +++ b/src/widgets/InputLine.cpp @@ -20,14 +20,15 @@ const char *rootStyles = R"( )"; const char *promptStyles = R"( - background-color: #aaa; - color: #555; + background-color: #222; + color: #fff; padding: 0 2px; )"; InputLine::InputLine(QString defaultInput, QWidget *parentNode) : QWidget(parentNode) { setContentsMargins(0, 0, 0, 0); + move(0, 0); setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); setStyleSheet(rootStyles); @@ -54,8 +55,6 @@ InputLine::InputLine(QString defaultInput, QWidget *parentNode) setAdapter(new CommandsAdapter()); } -Adapter *InputLine::adapter() { return adapterInstance; } - void InputLine::setAdapter(Adapter *adapter) { if (this->adapterInstance) delete this->adapterInstance; @@ -64,7 +63,7 @@ void InputLine::setAdapter(Adapter *adapter) { input->setCompleter(adapter->completer()); } -void InputLine::emitSubmit() { emit submitted(getInputCommand()); } +void InputLine::emitSubmit() { emit submitted(getInputText()); } void InputLine::keyPressEvent(QKeyEvent *event) { auto combo = event->keyCombination(); @@ -79,15 +78,9 @@ void InputLine::keyPressEvent(QKeyEvent *event) { emitSubmit(); } -void InputLine::setInputText(QString text) { input->setText(text); } - -bool InputLine::isInputFocussed() { return input->hasFocus(); } - void InputLine::setInputFocus(bool focussed) { if (focussed) input->setFocus(Qt::PopupFocusReason); else input->clearFocus(); } - -QString InputLine::getInputCommand() { return input->text(); } diff --git a/src/widgets/MainWindow.cpp b/src/widgets/MainWindow.cpp index 2d936aa..632869f 100644 --- a/src/widgets/MainWindow.cpp +++ b/src/widgets/MainWindow.cpp @@ -4,9 +4,7 @@ #include <QWebEngineView> #include <QtCore/qnamespace.h> -#include "CommandParser.hpp" -#include "completion/CommandsAdapter.hpp" -#include "completion/UrlAdapter.hpp" +#include "InputMediator.hpp" #include "widgets/InputLine.hpp" #include "widgets/MainWindow.hpp" #include "widgets/WebViewStack.hpp" @@ -16,123 +14,46 @@ MainWindow::MainWindow() { setCentralWidget(new QWidget()); // Root stacked layout - layout = new QStackedLayout(); + auto layout = new QStackedLayout(); layout->setContentsMargins(0, 0, 0, 0); layout->setSpacing(0); layout->setStackingMode(QStackedLayout::StackAll); centralWidget()->setLayout(layout); // Web engine - webViewStack = new WebViewStack(new QWebEngineProfile("web-browser")); + auto webViewStack = new WebViewStack(new QWebEngineProfile("web-browser")); layout->addWidget(webViewStack); // Command input - inputLine = new InputLine; - inputLine->setHidden(true); - inputLine->move(0, 0); - connect(inputLine, &InputLine::submitted, this, &MainWindow::onInputSubmit); - connect(inputLine, &InputLine::cancelled, this, &MainWindow::hideInputLine); + auto inputLine = new InputLine; layout->addWidget(inputLine); - // Lua runtime - luaRuntime = LuaRuntime::instance(); - connect(luaRuntime, &LuaRuntime::urlOpened, this, - [this](QString url, OpenType openType) { - webViewStack->openUrl(QUrl(url), openType); - }); -} - -void MainWindow::hideInputLine() { - inputLine->setInputFocus(false); - inputLine->setHidden(true); -} - -void MainWindow::showInputLine() { - inputLine->setHidden(false); - layout->setCurrentWidget(inputLine); - inputLine->setInputFocus(true); -} - -void MainWindow::showURLInput(QString url, OpenType openType) { - setEvaluationType(new UrlEval(openType)); - inputLine->setAdapter(new UrlAdapter); - inputLine->setInputText(url); - showInputLine(); -} - -void MainWindow::showCommandInput(QString cmd) { - setEvaluationType(new CommandEval()); - inputLine->setAdapter(new CommandsAdapter); - inputLine->setInputText(cmd); - showInputLine(); -} -void MainWindow::setEvaluationType(EvaluationType *evalType) { - if (currentEvaluationType) - delete currentEvaluationType; - currentEvaluationType = evalType; -} - -void MainWindow::onInputSubmit(QString input) { - hideInputLine(); - - if (dynamic_cast<CommandEval *>(currentEvaluationType)) { - evaluateCommand(input); - } else if (auto urlEval = dynamic_cast<UrlEval *>(currentEvaluationType)) { - webViewStack->openUrl(input, urlEval->type()); - } -} - -void MainWindow::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; - } + inputMediator = + new InputMediator(inputLine, webViewStack, LuaRuntime::instance()); } void MainWindow::keyPressEvent(QKeyEvent *event) { auto combo = event->keyCombination(); + if (combo.key() == Qt::Key_L && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - showURLInput(webViewStack->currentUrl().toString(), OpenType::OpenUrl); + inputMediator->showURLInput(inputMediator->currentUrl().toString(), + OpenType::OpenUrl); } else if (combo.key() == Qt::Key_Semicolon && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - showCommandInput(""); + inputMediator->showCommandInput(""); } else if (combo.key() == Qt::Key_T && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - webViewStack->openUrl(QUrl("https://lite.duckduckgo.com"), - OpenType::OpenUrlInTab); + inputMediator->openUrl(QUrl("https://lite.duckduckgo.com"), + OpenType::OpenUrlInTab); } else if (combo.key() == Qt::Key_J && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - webViewStack->next(); + inputMediator->nextWebView(); } else if (combo.key() == Qt::Key_K && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - webViewStack->previous(); + inputMediator->previousWebView(); } else if (combo.key() == Qt::Key_W && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - webViewStack->closeCurrent(); + inputMediator->closeCurrentWebView(); } } |
