From 1bc3c311551d53759ffdfb11904c45f1cc2f91ce Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 26 Jan 2018 00:41:09 +0100 Subject: UrlLineEdit rework - moved UrlLineEdit to src/addressbar - added UrlLineEdit::connectWebView - removed UrlLineEdit::pageAction - UrlLineEdit restores the text format when losing focus - Split off completer code into Completer class - WebPage now displays a warning message box instead on certificate errors --- src/addressbar/completer.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/addressbar/completer.cpp (limited to 'src/addressbar/completer.cpp') diff --git a/src/addressbar/completer.cpp b/src/addressbar/completer.cpp new file mode 100644 index 0000000..4c95bce --- /dev/null +++ b/src/addressbar/completer.cpp @@ -0,0 +1,74 @@ +/* + * 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 "completer.h" +#include + +Completer::Completer(QWidget *parent) + : QListView(parent) +{ + setWindowFlags(Qt::ToolTip); +} + +bool Completer::updateItems(const QModelIndexList &list) +{ + if(list.isEmpty()) + return false; + + // list is not empty + QStringList l; + for(const QModelIndex &idx : list) { + l.append(idx.data(Qt::EditRole).toString()); + } + + auto *model = new QStringListModel(l, this); + setModel(model); + + delete completionModel; + completionModel = model; + + return true; +} + +bool Completer::keyPressed(QKeyEvent *event) +{ + if(isHidden()) + return false; + + Q_CHECK_PTR(completionModel); + + int count = completionModel->rowCount(); + const QModelIndex currentIndex = this->currentIndex(); + + switch(event->key()) { + case Qt::Key_Down: + if(currentIndex.row() + 1 >= count) { + setCurrentIndex(completionModel->index(0, 0)); + } else { + setCurrentIndex(completionModel->index(currentIndex.row() + 1, 0)); + } + break; + + case Qt::Key_Up: + if(currentIndex.row() == 0) { + setCurrentIndex(completionModel->index(count - 1, 0)); + } else { + setCurrentIndex(completionModel->index(currentIndex.row() - 1, 0)); + } + break; + + case Qt::Key_Escape: + hide(); + break; + + default: + break; + } + + return true; +} -- cgit v1.2.1