aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/CommandParser.cpp4
-rw-r--r--src/InputMediator.cpp97
-rw-r--r--src/widgets/InputLine.cpp15
-rw-r--r--src/widgets/MainWindow.cpp109
4 files changed, 118 insertions, 107 deletions
diff --git a/src/CommandParser.cpp b/src/CommandParser.cpp
index 8f83575..773d37c 100644
--- a/src/CommandParser.cpp
+++ b/src/CommandParser.cpp
@@ -26,9 +26,9 @@ CommandType CommandParser::toCommandType(QString cmd) {
return Open;
if (cmd == "tabopen")
return TabOpen;
- if (cmd == "bn" || cmd == "bnext")
+ if (cmd == "tn" || cmd == "tabnext")
return TabNext;
- if (cmd == "bp" || cmd == "bprevious")
+ if (cmd == "tp" || cmd == "tabprev")
return TabPrev;
return Noop;
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;
+ }
+}
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();
}
}