From 1e99b19616f102b57f52dfc01ea3ccdb6a24a607 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 17 Apr 2018 13:36:08 +0200 Subject: Add loading progess bar to the address bar --- src/addressbar/addressbar.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++ src/addressbar/addressbar.h | 39 ++++++++++++++++++++++++++++++ src/addressbar/completer.cpp | 2 +- src/addressbar/completer.h | 2 +- src/addressbar/urllineedit.cpp | 21 ++-------------- src/addressbar/urllineedit.h | 16 ++---------- 6 files changed, 100 insertions(+), 35 deletions(-) create mode 100644 src/addressbar/addressbar.cpp create mode 100644 src/addressbar/addressbar.h (limited to 'src/addressbar') diff --git a/src/addressbar/addressbar.cpp b/src/addressbar/addressbar.cpp new file mode 100644 index 0000000..4f2ae6a --- /dev/null +++ b/src/addressbar/addressbar.cpp @@ -0,0 +1,55 @@ +/* + * 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); + 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->setMaximumHeight(5); + progressBar->setTextVisible(false); + layout()->addWidget(progressBar); +} + +AddressBar::~AddressBar() +{ + disconnect(progressBarConnection); +} + +void AddressBar::connectWebView(WebView* view) +{ + disconnect(progressBarConnection); + urlBar->connectWebView(view); + + if(view != nullptr) { + progressBar->setValue(view->loadProgress()); + progressBarConnection = connect(view, &QWebEngineView::loadProgress, progressBar, &QProgressBar::setValue); + } +} diff --git a/src/addressbar/addressbar.h b/src/addressbar/addressbar.h new file mode 100644 index 0000000..0010bfe --- /dev/null +++ b/src/addressbar/addressbar.h @@ -0,0 +1,39 @@ +/* + * 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 + */ + +#ifndef ADDRESSBAR_H +#define ADDRESSBAR_H + +#include +#include + +class WebView; +class UrlLineEdit; +class QProgressBar; +class AddressBar : public QWidget +{ + Q_OBJECT + +public: + AddressBar(const QHash &config, QWidget *parent = nullptr); + ~AddressBar() override; + +signals: + void complete(const QString &term, std::function callback); + +public slots: + void connectWebView(WebView *view); + +private: + UrlLineEdit *urlBar; + QProgressBar *progressBar; + + QMetaObject::Connection progressBarConnection; +}; + +#endif // ADDRESSBAR_H diff --git a/src/addressbar/completer.cpp b/src/addressbar/completer.cpp index e02610a..9b95ac0 100644 --- a/src/addressbar/completer.cpp +++ b/src/addressbar/completer.cpp @@ -15,7 +15,7 @@ Completer::Completer(QWidget *parent) setWindowFlags(Qt::ToolTip); } -bool Completer::updateItems(QStringList &list) +bool Completer::updateItems(const QStringList &list) { if(list.isEmpty()) return false; diff --git a/src/addressbar/completer.h b/src/addressbar/completer.h index 4e338c8..03ff317 100644 --- a/src/addressbar/completer.h +++ b/src/addressbar/completer.h @@ -21,7 +21,7 @@ class Completer : public QListView public: explicit Completer(QWidget *parent = nullptr); - bool updateItems(QStringList &list); + bool updateItems(const QStringList &list); bool keyPressed(QKeyEvent *event); diff --git a/src/addressbar/urllineedit.cpp b/src/addressbar/urllineedit.cpp index e2cb7a5..4e8d930 100644 --- a/src/addressbar/urllineedit.cpp +++ b/src/addressbar/urllineedit.cpp @@ -15,21 +15,13 @@ #include #include -UrlLineEdit::UrlLineEdit(const QHash &config, QWidget *parent) +UrlLineEdit::UrlLineEdit(QWidget *parent) : QLineEdit(parent) - , suggestionTimer(new QTimer(this)) , m_listView(new Completer(this)) { setPlaceholderText(tr("Enter address")); - suggestionTimer->setSingleShot(true); - connect(suggestionTimer, &QTimer::timeout, this, &UrlLineEdit::search); m_listView->setVisible(false); - connect(this, &QLineEdit::textEdited, this, [this]() { - if(suggestionTimer->isActive()) - suggestionTimer->stop(); - suggestionTimer->start(100); - }); m_pageMenuAction = addAction(style()->standardIcon(QStyle::SP_DriveNetIcon), QLineEdit::LeadingPosition); m_pageMenuAction->setShortcut(QKeySequence("F2")); @@ -70,10 +62,8 @@ UrlLineEdit::UrlLineEdit(const QHash &config, QWidget *parent) UrlLineEdit::~UrlLineEdit() { - suggestionTimer->stop(); } - void UrlLineEdit::connectWebView(WebView *view) { disconnect(urlChangedConnection); @@ -108,14 +98,7 @@ void UrlLineEdit::setUrl(const QUrl &url) setText(urlText); } -void UrlLineEdit::search() -{ - Q_ASSERT_X(bookmarks != nullptr, "UrlLineEdit::search", "bookmarks is nullptr"); - updateCompleter(bookmarks->search(text())); -} - - -void UrlLineEdit::updateCompleter(QStringList l) +void UrlLineEdit::updateCompleter(const QStringList &l) { if(!m_listView->updateItems(l)) { m_listView->hide(); diff --git a/src/addressbar/urllineedit.h b/src/addressbar/urllineedit.h index d3753f4..8f77357 100644 --- a/src/addressbar/urllineedit.h +++ b/src/addressbar/urllineedit.h @@ -16,29 +16,19 @@ #include class QMenu; -class QTimer; -class BookmarksWidget; class WebView; class UrlLineEdit : public QLineEdit { Q_OBJECT public: - explicit UrlLineEdit(const QHash &config, QWidget *parent = nullptr); + explicit UrlLineEdit(QWidget *parent = nullptr); ~UrlLineEdit() override; - void setBookmarksManager(BookmarksWidget *w) { - bookmarks = w; - }; - -signals: - void complete(const QString &term); - public slots: void connectWebView(WebView *view); void setUrl(const QUrl &url); - void search(); - void updateCompleter(QStringList l); + void updateCompleter(const QStringList &l); protected: void focusInEvent(QFocusEvent *event) override; @@ -49,7 +39,6 @@ private: void setTextFormat(const QTextLayout::FormatRange &format); void clearTextFormat(); - BookmarksWidget *bookmarks = nullptr; WebView *m_view = nullptr; QTextLayout::FormatRange m_hostFormat; @@ -60,7 +49,6 @@ private: QAction *m_toolsMenuAction = nullptr; // completer - QTimer *suggestionTimer; Completer *m_listView; QMetaObject::Connection urlChangedConnection; -- cgit v1.2.1