aboutsummaryrefslogtreecommitdiff
path: root/src/addressbar
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-04-17 01:38:07 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-04-17 01:38:07 +0200
commit74a7ea3732853f954fcab7088acaa2413fc3e7c1 (patch)
tree02ca9dd6f0dd4ea1b18346d4c6004c74c504d04f /src/addressbar
parentMultiple subwindows interface (diff)
downloadsmolbote-74a7ea3732853f954fcab7088acaa2413fc3e7c1.tar.xz
Enabled address bar suggestions
Also fixed occasional bug when showing the completer.
Diffstat (limited to 'src/addressbar')
-rw-r--r--src/addressbar/completer.cpp11
-rw-r--r--src/addressbar/completer.h4
-rw-r--r--src/addressbar/urllineedit.cpp42
-rw-r--r--src/addressbar/urllineedit.h17
4 files changed, 43 insertions, 31 deletions
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<QTreeWidgetItem *> &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<QTreeWidgetItem *> &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 <QShortcut>
#include <QTimer>
#include <QWidgetAction>
-#include <bookmarks/bookmarksview.h>
+#include <bookmarks/bookmarkswidget.h>
UrlLineEdit::UrlLineEdit(const QHash<QString, QString> &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<QString, QString> &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<QTreeWidgetItem *> 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 <QLineEdit>
#include <QTextLayout>
-class BookmarksView;
class QMenu;
-class QLabel;
+class QTimer;
+class BookmarksWidget;
class WebView;
class UrlLineEdit : public QLineEdit
{
Q_OBJECT
public:
explicit UrlLineEdit(const QHash<QString, QString> &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;