From 0d5b7cb2a8bea5d91c58dd40f80d60bca384b766 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Tue, 11 Mar 2025 22:56:07 +0530 Subject: Add command+url evaluation --- src/LuaRuntime.cpp | 4 ++-- src/widgets/InputLine.cpp | 8 +++++--- src/widgets/MainWindow.cpp | 43 ++++++++++++++++++++++++++++++------------- 3 files changed, 37 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp index 6867b61..e4a5289 100644 --- a/src/LuaRuntime.cpp +++ b/src/LuaRuntime.cpp @@ -22,14 +22,14 @@ void LuaRuntime::evaluate(QString code) { int LuaRuntime::lua_onUrlOpen(lua_State *state) { const char *url = luaL_optstring(state, 1, ""); auto runtime = LuaRuntime::instance(); - emit runtime->urlOpenned(url, OpenType::OpenUrl); + emit runtime->urlOpened(url, OpenType::OpenUrl); return 1; } int LuaRuntime::lua_onUrlTabOpen(lua_State *state) { const char *url = luaL_optstring(state, 1, ""); auto runtime = LuaRuntime::instance(); - emit runtime->urlOpenned(url, OpenType::OpenUrlInTab); + emit runtime->urlOpened(url, OpenType::OpenUrlInTab); return 1; } diff --git a/src/widgets/InputLine.cpp b/src/widgets/InputLine.cpp index d577e1d..5edfe17 100644 --- a/src/widgets/InputLine.cpp +++ b/src/widgets/InputLine.cpp @@ -54,10 +54,12 @@ InputLine::InputLine(QString defaultInput, QWidget *parentNode) setAdapter(new CommandsAdapter()); } +Adapter *InputLine::adapter() { return adapterInstance; } + void InputLine::setAdapter(Adapter *adapter) { - if (this->adapter) - delete this->adapter; - this->adapter = adapter; + if (this->adapterInstance) + delete this->adapterInstance; + this->adapterInstance = adapter; promptPrefix->setText(adapter->prompt()); input->setCompleter(adapter->completer()); } diff --git a/src/widgets/MainWindow.cpp b/src/widgets/MainWindow.cpp index 03a4e6e..f2825e8 100644 --- a/src/widgets/MainWindow.cpp +++ b/src/widgets/MainWindow.cpp @@ -30,13 +30,13 @@ MainWindow::MainWindow() { inputLine = new InputLine; inputLine->setHidden(true); inputLine->move(0, 0); - connect(inputLine, &InputLine::submitted, this, &MainWindow::evaluateCommand); + connect(inputLine, &InputLine::submitted, this, &MainWindow::onInputSubmit); connect(inputLine, &InputLine::cancelled, this, &MainWindow::hideInputLine); layout->addWidget(inputLine); // Lua runtime luaRuntime = LuaRuntime::instance(); - connect(luaRuntime, &LuaRuntime::urlOpenned, this, + connect(luaRuntime, &LuaRuntime::urlOpened, this, [this](QString url, OpenType openType) { browserManager->openUrl(QUrl(url), openType); }); @@ -53,21 +53,36 @@ void MainWindow::showInputLine() { inputLine->setInputFocus(true); } -void MainWindow::showURLInput(QString url) { - showInputLine(); +void MainWindow::showURLInput(QString url, OpenType openType) { + setEvaluationType(new UrlEval(openType)); inputLine->setAdapter(new UrlAdapter); inputLine->setInputText(url); + showInputLine(); } void MainWindow::showCommandInput(QString cmd) { - showInputLine(); + setEvaluationType(new CommandEval()); inputLine->setAdapter(new CommandsAdapter); inputLine->setInputText(cmd); + showInputLine(); +} +void MainWindow::setEvaluationType(EvaluationType *evalType) { + if (currentEvaluationType) + delete currentEvaluationType; + currentEvaluationType = evalType; } -void MainWindow::evaluateCommand(QString command) { +void MainWindow::onInputSubmit(QString input) { hideInputLine(); + if (dynamic_cast(currentEvaluationType)) { + evaluateCommand(input); + } else if (auto urlEval = dynamic_cast(currentEvaluationType)) { + browserManager->openUrl(input, urlEval->type()); + } +} + +void MainWindow::evaluateCommand(QString command) { CommandParser parser; auto cmd = parser.parse(command); @@ -76,14 +91,16 @@ void MainWindow::evaluateCommand(QString command) { luaRuntime->evaluate(cmd.argsString); break; case CommandType::Open: - if (cmd.argsString.trimmed().isEmpty()) { - showURLInput(); - } else { + if (cmd.argsString.trimmed().isEmpty()) + showURLInput("", OpenType::OpenUrl); + else browserManager->openUrl(cmd.argsString, OpenType::OpenUrl); - } break; case CommandType::TabOpen: - browserManager->openUrl(cmd.argsString, OpenType::OpenUrlInTab); + if (cmd.argsString.trimmed().isEmpty()) + showURLInput("", OpenType::OpenUrlInTab); + else + browserManager->openUrl(cmd.argsString, OpenType::OpenUrlInTab); break; case CommandType::TabNext: browserManager->nextWebView(); @@ -100,10 +117,10 @@ void MainWindow::keyPressEvent(QKeyEvent *event) { auto combo = event->keyCombination(); if (combo.key() == Qt::Key_L && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - showURLInput(browserManager->currentUrl().toString()); + showURLInput(browserManager->currentUrl().toString(), OpenType::OpenUrl); } else if (combo.key() == Qt::Key_Semicolon && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { - showCommandInput(); + showCommandInput(""); } else if (combo.key() == Qt::Key_T && combo.keyboardModifiers().testFlag(Qt::ControlModifier)) { browserManager->createNewWebView(QUrl("https://lite.duckduckgo.com"), true); -- cgit v1.3.1