diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-03-11 22:56:07 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-03-11 22:56:21 +0530 |
| commit | 0d5b7cb2a8bea5d91c58dd40f80d60bca384b766 (patch) | |
| tree | 4a0a9296d7dd4542afd21d5c37cdab0cc1aa74b7 /src | |
| parent | 12d0ce37db7323e8efd56d6a698a98abcb8d680b (diff) | |
| download | null-browser-0d5b7cb2a8bea5d91c58dd40f80d60bca384b766.tar.gz null-browser-0d5b7cb2a8bea5d91c58dd40f80d60bca384b766.zip | |
Add command+url evaluation
Diffstat (limited to '')
| -rw-r--r-- | src/LuaRuntime.cpp | 4 | ||||
| -rw-r--r-- | src/widgets/InputLine.cpp | 8 | ||||
| -rw-r--r-- | src/widgets/MainWindow.cpp | 43 |
3 files changed, 37 insertions, 18 deletions
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<CommandEval *>(currentEvaluationType)) { + evaluateCommand(input); + } else if (auto urlEval = dynamic_cast<UrlEval *>(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); |
