aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/CommandParser.hpp31
-rw-r--r--include/widgets/MainWindow.hpp2
-rw-r--r--src/CommandParser.cpp32
-rw-r--r--src/widgets/MainWindow.cpp39
4 files changed, 93 insertions, 11 deletions
diff --git a/include/CommandParser.hpp b/include/CommandParser.hpp
new file mode 100644
index 0000000..128b5f4
--- /dev/null
+++ b/include/CommandParser.hpp
@@ -0,0 +1,31 @@
+#pragma once
+
+#include <QtCore/qcontainerfwd.h>
+#include <QtCore>
+
+enum CommandType {
+ Noop,
+ LuaEval,
+ Open,
+ TabOpen,
+ TabNext,
+ TabPrev,
+};
+
+class Cmd {
+public:
+ CommandType command;
+ QStringList args;
+
+ Cmd(CommandType command = Noop, QStringList args = QStringList())
+ : command(command), args(args) {}
+};
+
+class CommandParser {
+public:
+ CommandParser();
+ Cmd parse(QString command);
+
+private:
+ CommandType toCommandType(QString cmd);
+};
diff --git a/include/widgets/MainWindow.hpp b/include/widgets/MainWindow.hpp
index 15e2889..7f54ce2 100644
--- a/include/widgets/MainWindow.hpp
+++ b/include/widgets/MainWindow.hpp
@@ -2,6 +2,7 @@
#include <QMainWindow>
#include <QObject>
+#include <QStackedLayout>
#include <QWebEngineView>
#include "LuaRuntime.hpp"
@@ -23,4 +24,5 @@ private:
BrowserManager *browserManager;
CommandInput *commandInput;
LuaRuntime *luaRuntime;
+ QStackedLayout *layout;
};
diff --git a/src/CommandParser.cpp b/src/CommandParser.cpp
new file mode 100644
index 0000000..ccb84bc
--- /dev/null
+++ b/src/CommandParser.cpp
@@ -0,0 +1,32 @@
+#include <QtCore/qnamespace.h>
+#include <QtCore>
+
+#include "CommandParser.hpp"
+
+CommandParser::CommandParser() {}
+
+Cmd CommandParser::parse(QString input) {
+ auto parts = input.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts);
+
+ if (parts.isEmpty())
+ return Cmd();
+
+ auto cmd = toCommandType(parts.first());
+ parts.removeFirst();
+ return Cmd(cmd, parts);
+}
+
+CommandType CommandParser::toCommandType(QString cmd) {
+ if (cmd == "lua")
+ return LuaEval;
+ if (cmd == "open")
+ return Open;
+ if (cmd == "tabopen")
+ return TabOpen;
+ if (cmd == "bn" || cmd == "bnext")
+ return TabNext;
+ if (cmd == "bp" || cmd == "bprevious")
+ return TabPrev;
+
+ return Noop;
+}
diff --git a/src/widgets/MainWindow.cpp b/src/widgets/MainWindow.cpp
index 14f6aa7..9ac5f12 100644
--- a/src/widgets/MainWindow.cpp
+++ b/src/widgets/MainWindow.cpp
@@ -3,6 +3,7 @@
#include <QVBoxLayout>
#include <QWebEngineView>
+#include "CommandParser.hpp"
#include "widgets/BrowserManager.hpp"
#include "widgets/CommandInput.hpp"
#include "widgets/MainWindow.hpp"
@@ -12,7 +13,7 @@ MainWindow::MainWindow() {
setCentralWidget(new QWidget());
// Root stacked layout
- auto layout = new QStackedLayout();
+ layout = new QStackedLayout();
layout->setContentsMargins(0, 0, 0, 0);
layout->setSpacing(0);
layout->setStackingMode(QStackedLayout::StackAll);
@@ -46,22 +47,38 @@ void MainWindow::hideURLInput() {
}
void MainWindow::showURLInput() {
- commandInput->setInputText(browserManager->currentUrl().toString());
- commandInput->raise();
+ commandInput->setInputText("open " + browserManager->currentUrl().toString());
commandInput->setHidden(false);
+ layout->setCurrentWidget(commandInput);
commandInput->setInputFocus(true);
}
void MainWindow::evaluateCommand(QString command) {
- if (!command.isEmpty()) {
- // TODO: Temporary hack
- if (command.startsWith("lua ")) {
- luaRuntime->evaluate(command.slice(4).toStdString().c_str());
- } else {
- browserManager->setCurrentUrl(command);
- }
- }
hideURLInput();
+
+ // TODO: Temporary hack
+ CommandParser parser;
+ auto cmd = parser.parse(command);
+
+ switch (cmd.command) {
+ case CommandType::LuaEval:
+ luaRuntime->evaluate(cmd.args.join(" ").toStdString().c_str());
+ break;
+ case CommandType::Open:
+ browserManager->openUrl(cmd.args.first(), OpenType::OpenUrl);
+ break;
+ case CommandType::TabOpen:
+ browserManager->openUrl(cmd.args.at(1), OpenType::OpenUrlInTab);
+ break;
+ case CommandType::TabNext:
+ browserManager->nextWebView();
+ break;
+ case CommandType::TabPrev:
+ browserManager->previousWebView();
+ break;
+ case CommandType::Noop:
+ break;
+ }
}
void MainWindow::keyPressEvent(QKeyEvent *event) {