/* * 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 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); }); connect(urlBar, &UrlLineEdit::returnPressed, [=]() { const QUrl url = QUrl::fromUserInput(urlBar->text()); // check if url contains \w+:// (matches protocol://) or contains a '.' (matches site.domain) // this is because single words are valid URLs for QUrl (searchterm becomes http://searchterm) // check for protocol://site because \. wouldn't match it (localhost is a search term; http://localhost is an address) if(urlBar->text().contains(QRegularExpression("\\w+://|\\.")) && url.isValid()) { emit load(url); } else { emit search(urlBar->text()); } }); progressBar = new QProgressBar(this); progressBar->setObjectName("LoadingBar"); progressBar->setMaximumHeight(5); progressBar->setTextVisible(false); layout()->addWidget(progressBar); } AddressBar::~AddressBar() { disconnect(this); } void AddressBar::setUrl(const QUrl &url) { if(url.isEmpty()) urlBar->clear(); else urlBar->setUrl(url); } void AddressBar::setProgress(int value) { progressBar->setValue(std::min(value, 100)); } void AddressBar::setPageMenu(QMenu *menu) { urlBar->pageMenu = menu; } void AddressBar::setToolsMenu(QMenu *menu) { urlBar->toolsMenu = menu; }