/* * 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 #include #include #include AddressBar::AddressBar(const QHash &config, QWidget *parent) : QWidget(parent) { setLayout(new QVBoxLayout()); layout()->setContentsMargins(0, 0, 0, 0); layout()->setSpacing(0); urlBar = new UrlLineEdit(this); urlBar->menuAction->setShortcut(QKeySequence(config.value("addressbar.shortcuts.menu"))); layout()->addWidget(urlBar); auto *focusShortcut = new QShortcut(QKeySequence(config.value("addressbar.shortcuts.focus")), parent); connect(focusShortcut, &QShortcut::activated, urlBar, [=]() { urlBar->setFocus(); urlBar->selectAll(); }); connect(urlBar, &UrlLineEdit::textEdited, [=](const QString &text) { std::function callback = std::bind(&UrlLineEdit::updateCompleter, urlBar, std::placeholders::_1); emit complete(text, callback); }); progressBar = new QProgressBar(this); progressBar->setObjectName("LoadingBar"); 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 = nullptr; urlBar->toolsMenu = 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(100); progressBarConnection = connect(view, &QWebEngineView::loadProgress, progressBar, &QProgressBar::setValue); } void AddressBar::setPageMenu(QMenu *menu) { urlBar->pageMenu = menu; } void AddressBar::setToolsMenu(QMenu *menu) { urlBar->toolsMenu = menu; }