diff options
Diffstat (limited to 'lib/addressbar/addressbar.cpp')
-rw-r--r-- | lib/addressbar/addressbar.cpp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/lib/addressbar/addressbar.cpp b/lib/addressbar/addressbar.cpp new file mode 100644 index 0000000..9b3970d --- /dev/null +++ b/lib/addressbar/addressbar.cpp @@ -0,0 +1,94 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "addressbar.h" +#include "urllineedit.h" +#include <QWebEngineView> +#include <QProgressBar> +#include <QShortcut> +#include <QVBoxLayout> + +AddressBar::AddressBar(const QHash<QString, QString> &config, QWidget *parent) + : QWidget(parent) +{ + setLayout(new QVBoxLayout()); + layout()->setContentsMargins(0, 0, 0, 0); + layout()->setSpacing(0); + + urlBar = new UrlLineEdit(this); + layout()->addWidget(urlBar); + + auto *focusShortcut = new QShortcut(QKeySequence(config.value("addressbar.shortcuts.focus")), parent); + connect(focusShortcut, &QShortcut::activated, urlBar, [=]() { + urlBar->setFocus(); + urlBar->selectAll(); + }); + + urlBar->pageMenu_action->setShortcut(QKeySequence(config.value("addressbar.shortcuts.pageMenu"))); + urlBar->pageMenu_action->setToolTip(tr("Page Actions (%1)").arg(urlBar->pageMenu_action->shortcut().toString())); + + urlBar->toolsMenu_action->setShortcut(QKeySequence(config.value("addressbar.shortcuts.toolsMenu"))); + urlBar->toolsMenu_action->setToolTip(tr("Tools (%1)").arg(urlBar->toolsMenu_action->shortcut().toString())); + + connect(urlBar, &UrlLineEdit::textEdited, [=](const QString &text) { + std::function<void(QStringList &)> callback = std::bind(&UrlLineEdit::updateCompleter, urlBar, std::placeholders::_1); + emit complete(text, callback); + }); + + progressBar = new QProgressBar(this); + progressBar->setMaximumHeight(5); + progressBar->setTextVisible(false); + layout()->addWidget(progressBar); +} + +AddressBar::~AddressBar() +{ + disconnect(urlChangedConnection); + disconnect(loadUrlConnection); + disconnect(progressBarConnection); +} + +void AddressBar::setView(QWebEngineView *view) +{ + disconnect(urlChangedConnection); + disconnect(loadUrlConnection); + disconnect(progressBarConnection); + + progressBar->setValue(100); + + if(view == nullptr) { + urlBar->clear(); + urlBar->pageMenu_action->setMenu(nullptr); + urlBar->toolsMenu_action->setMenu(nullptr); + return; + } + + urlBar->setUrl(view->url()); + urlChangedConnection = connect(view, &QWebEngineView::urlChanged, urlBar, &UrlLineEdit::setUrl); + loadUrlConnection = connect(urlBar, &UrlLineEdit::returnPressed, [=]() { + if(urlBar->text().startsWith('#')) { + emit search(urlBar->text().mid(1)); + } else { + view->load(QUrl::fromUserInput(urlBar->text())); + } + view->setFocus(); + }); + + //progressBar->setValue(view->loadProgress()); + progressBarConnection = connect(view, &QWebEngineView::loadProgress, progressBar, &QProgressBar::setValue); +} + +void AddressBar::setPageMenu(QMenu *menu) +{ + urlBar->pageMenu_action->setMenu(menu); +} + +void AddressBar::setToolsMenu(QMenu *menu) +{ + urlBar->toolsMenu_action->setMenu(menu); +} |