diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-04-17 13:36:08 +0200 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-04-17 13:36:08 +0200 |
commit | 1e99b19616f102b57f52dfc01ea3ccdb6a24a607 (patch) | |
tree | 120672a1635e3bc2110b780d93afbfe0a9f30216 /src/addressbar | |
parent | Address bar searches work again (diff) | |
download | smolbote-1e99b19616f102b57f52dfc01ea3ccdb6a24a607.tar.xz |
Add loading progess bar to the address bar
Diffstat (limited to 'src/addressbar')
-rw-r--r-- | src/addressbar/addressbar.cpp | 55 | ||||
-rw-r--r-- | src/addressbar/addressbar.h | 39 | ||||
-rw-r--r-- | src/addressbar/completer.cpp | 2 | ||||
-rw-r--r-- | src/addressbar/completer.h | 2 | ||||
-rw-r--r-- | src/addressbar/urllineedit.cpp | 21 | ||||
-rw-r--r-- | src/addressbar/urllineedit.h | 16 |
6 files changed, 100 insertions, 35 deletions
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 <QProgressBar> +#include <QVBoxLayout> +#include <QShortcut> + +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(); + }); + 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(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 <QWidget> +#include <functional> + +class WebView; +class UrlLineEdit; +class QProgressBar; +class AddressBar : public QWidget +{ + Q_OBJECT + +public: + AddressBar(const QHash<QString, QString> &config, QWidget *parent = nullptr); + ~AddressBar() override; + +signals: + void complete(const QString &term, std::function<void(QStringList&)> 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 <QWidgetAction> #include <bookmarks/bookmarkswidget.h> -UrlLineEdit::UrlLineEdit(const QHash<QString, QString> &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<QString, QString> &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 <QTextLayout> class QMenu; -class QTimer; -class BookmarksWidget; class WebView; class UrlLineEdit : public QLineEdit { Q_OBJECT public: - explicit UrlLineEdit(const QHash<QString, QString> &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; |