From 74a7ea3732853f954fcab7088acaa2413fc3e7c1 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 17 Apr 2018 01:38:07 +0200 Subject: Enabled address bar suggestions Also fixed occasional bug when showing the completer. --- src/addressbar/completer.cpp | 11 ++--------- src/addressbar/completer.h | 4 ++-- src/addressbar/urllineedit.cpp | 42 ++++++++++++++++++++++++++++-------------- src/addressbar/urllineedit.h | 17 +++++++++++------ 4 files changed, 43 insertions(+), 31 deletions(-) (limited to 'src/addressbar') diff --git a/src/addressbar/completer.cpp b/src/addressbar/completer.cpp index 5d64dd7..e02610a 100644 --- a/src/addressbar/completer.cpp +++ b/src/addressbar/completer.cpp @@ -15,19 +15,12 @@ Completer::Completer(QWidget *parent) setWindowFlags(Qt::ToolTip); } -bool Completer::updateItems(const QList &list) +bool Completer::updateItems(QStringList &list) { if(list.isEmpty()) return false; - // list is not empty - QStringList l; - for(QTreeWidgetItem *item : list) { - if(!item->text(1).isEmpty()) - l.append(item->text(1)); - } - - auto *model = new QStringListModel(l, this); + auto *model = new QStringListModel(list, this); setModel(model); delete completionModel; diff --git a/src/addressbar/completer.h b/src/addressbar/completer.h index daef67c..4e338c8 100644 --- a/src/addressbar/completer.h +++ b/src/addressbar/completer.h @@ -21,12 +21,12 @@ class Completer : public QListView public: explicit Completer(QWidget *parent = nullptr); - bool updateItems(const QList &list); + bool updateItems(QStringList &list); bool keyPressed(QKeyEvent *event); private: - QStringListModel *completionModel; + QStringListModel *completionModel = nullptr; }; #endif //SMOLBOTE_COMPLETER_H diff --git a/src/addressbar/urllineedit.cpp b/src/addressbar/urllineedit.cpp index 8aa03c7..d38acdc 100644 --- a/src/addressbar/urllineedit.cpp +++ b/src/addressbar/urllineedit.cpp @@ -13,16 +13,23 @@ #include #include #include -#include +#include UrlLineEdit::UrlLineEdit(const QHash &config, 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, &UrlLineEdit::textEdited, this, &UrlLineEdit::updateCompleter); + 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")); @@ -61,19 +68,25 @@ UrlLineEdit::UrlLineEdit(const QHash &config, QWidget *parent) }); } -void UrlLineEdit::setCompleterModel(BookmarksView *model) +UrlLineEdit::~UrlLineEdit() { - Q_CHECK_PTR(model); - m_bookmarksModel = model; + suggestionTimer->stop(); } + void UrlLineEdit::connectWebView(WebView *view) { - Q_CHECK_PTR(view); - m_view = view; - disconnect(urlChangedConnection); + if(view == nullptr) { + clear(); + m_pageMenuAction->setMenu(nullptr); + m_toolsMenuAction->setMenu(nullptr); + return; + } + + m_view = view; + setUrl(view->url()); m_pageMenuAction->setMenu(view->pageMenu()); m_toolsMenuAction->setMenu(view->toolsMenu()); @@ -95,15 +108,16 @@ void UrlLineEdit::setUrl(const QUrl &url) setText(urlText); } -void UrlLineEdit::updateCompleter(const QString &text) +void UrlLineEdit::search() { - if(m_bookmarksModel == nullptr) { - return; - } + Q_ASSERT_X(bookmarks != nullptr, "UrlLineEdit::search", "bookmarks is nullptr"); + updateCompleter(bookmarks->search(text())); +} - const QList res = m_bookmarksModel->findItems(text, Qt::MatchContains | Qt::MatchRecursive, 1); - if(!m_listView->updateItems(res)) { +void UrlLineEdit::updateCompleter(QStringList l) +{ + if(!m_listView->updateItems(l)) { m_listView->hide(); return; } diff --git a/src/addressbar/urllineedit.h b/src/addressbar/urllineedit.h index 24ad403..1fe3d3c 100644 --- a/src/addressbar/urllineedit.h +++ b/src/addressbar/urllineedit.h @@ -15,27 +15,31 @@ #include #include -class BookmarksView; class QMenu; -class QLabel; +class QTimer; +class BookmarksWidget; class WebView; class UrlLineEdit : public QLineEdit { Q_OBJECT public: explicit UrlLineEdit(const QHash &config, QWidget *parent = nullptr); + ~UrlLineEdit() override; - void setCompleterModel(BookmarksView *model); + void setBookmarksManager(BookmarksWidget *w) { + bookmarks = w; + }; signals: - void addressEntered(const QUrl &url); void searchTermEntered(const QString &term); + void complete(const QString &term); public slots: void connectWebView(WebView *view); void setUrl(const QUrl &url); - void updateCompleter(const QString &text); + void search(); + void updateCompleter(QStringList l); protected: void focusInEvent(QFocusEvent *event) override; @@ -46,6 +50,7 @@ private: void setTextFormat(const QTextLayout::FormatRange &format); void clearTextFormat(); + BookmarksWidget *bookmarks = nullptr; WebView *m_view = nullptr; QTextLayout::FormatRange m_hostFormat; @@ -56,7 +61,7 @@ private: QAction *m_toolsMenuAction = nullptr; // completer - BookmarksView *m_bookmarksModel = nullptr; + QTimer *suggestionTimer; Completer *m_listView; QMetaObject::Connection urlChangedConnection; -- cgit v1.2.1