diff options
| -rw-r--r-- | include/CommandParser.hpp | 31 | ||||
| -rw-r--r-- | include/widgets/MainWindow.hpp | 2 | ||||
| -rw-r--r-- | src/CommandParser.cpp | 32 | ||||
| -rw-r--r-- | src/widgets/MainWindow.cpp | 39 |
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) { |
