aboutsummaryrefslogtreecommitdiff
path: root/lib/navigation
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-01-26 00:41:09 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-01-26 00:41:09 +0100
commit1bc3c311551d53759ffdfb11904c45f1cc2f91ce (patch)
treeca22cf2d17611dfe3aa0cfbf3ac825ecb014b9f4 /lib/navigation
parentConfiguration class rework (diff)
downloadsmolbote-1bc3c311551d53759ffdfb11904c45f1cc2f91ce.tar.xz
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
Diffstat (limited to 'lib/navigation')
-rw-r--r--lib/navigation/CMakeLists.txt7
-rw-r--r--lib/navigation/urllineedit.cpp195
-rw-r--r--lib/navigation/urllineedit.h62
3 files changed, 0 insertions, 264 deletions
diff --git a/lib/navigation/CMakeLists.txt b/lib/navigation/CMakeLists.txt
deleted file mode 100644
index 4f0208b..0000000
--- a/lib/navigation/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-cmake_minimum_required(VERSION 3.1.0)
-
-add_library(navigation
- urllineedit.cpp
- urllineedit.h)
-
-target_link_libraries(navigation Qt5::Widgets Qt5::WebEngineWidgets)
diff --git a/lib/navigation/urllineedit.cpp b/lib/navigation/urllineedit.cpp
deleted file mode 100644
index fdbfc63..0000000
--- a/lib/navigation/urllineedit.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * 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 "urllineedit.h"
-#include <QMenu>
-#include <QStyle>
-#include <QTimer>
-#include <QWidgetAction>
-
-// ssl menu
-#include <QLabel>
-
-// completer
-#include <QListView>
-#include <QStringListModel>
-
-UrlLineEdit::UrlLineEdit(QWidget *parent)
- : QLineEdit(parent)
- , m_listView(new QListView(this))
-{
- setPlaceholderText(tr("Enter address"));
-
- m_listView->setWindowFlags(Qt::ToolTip);
- m_listView->setVisible(false);
- connect(this, &UrlLineEdit::textEdited, this, &UrlLineEdit::updateCompleter);
-
- // ssl menu
- m_sslMenu = new QMenu(this);
- m_sslLabel = new QLabel(m_sslMenu);
- QWidgetAction *sslErrorAction = new QWidgetAction(m_sslMenu);
- sslErrorAction->setDefaultWidget(m_sslLabel);
- m_sslMenu->addAction(sslErrorAction);
-
- m_sslAction = addAction(style()->standardIcon(QStyle::SP_DriveNetIcon), QLineEdit::LeadingPosition);
- m_sslAction->setToolTip(tr("TODO: Display SSL Status popup here"));
- m_sslAction->setMenu(m_sslMenu);
-
- connect(m_sslAction, &QAction::triggered, this, [this]() {
- m_sslMenu->exec(this->mapToGlobal(QPoint(0, height())));
- });
-
- m_pageAction = addAction(style()->standardIcon(QStyle::SP_FileIcon), QLineEdit::TrailingPosition);
- m_pageAction->setShortcut(QKeySequence("F10"));
- m_pageAction->setToolTip(tr("Page Actions"));
- connect(m_pageAction, &QAction::triggered, m_pageAction, [&]() {
- //this->deselect();
- if(m_pageAction->menu() != nullptr) {
- m_pageAction->menu()->exec(this->mapToGlobal(QPoint(width(), height())));
- }
- });
-
- QTextCharFormat hostnameFormat;
- hostnameFormat.setFontWeight(QFont::Bold);
- m_hostFormat.format = hostnameFormat;
-
- // connect signals
- connect(this, &QLineEdit::returnPressed, [this]() {
- if(this->text().startsWith('#')) {
- emit searchTermEntered(this->text().mid(1));
- } else {
- emit addressEntered(QUrl::fromUserInput(this->text()));
- }
- this->clearFocus();
- });
-}
-
-QAction *UrlLineEdit::pageAction()
-{
- Q_CHECK_PTR(m_pageAction);
- return m_pageAction;
-}
-
-void UrlLineEdit::setCompleterModel(QAbstractItemModel *model)
-{
- Q_CHECK_PTR(model);
- m_bookmarksModel = model;
-}
-
-void UrlLineEdit::setUrl(const QUrl &url)
-{
- QString urlText = url.toString();
- QString domain = url.host();
-
- m_hostFormat.start = urlText.indexOf(domain);
- m_hostFormat.length = domain.length();
-
- clear();
- clearTextFormat();
- setTextFormat(m_hostFormat);
- setText(urlText);
-}
-
-void UrlLineEdit::showSslError(const QString &message)
-{
- m_sslLabel->setText(message);
- m_sslAction->trigger();
-}
-
-void UrlLineEdit::updateCompleter(const QString &text)
-{
- if(m_bookmarksModel == nullptr) {
- return;
- }
-
- const QModelIndexList res = m_bookmarksModel->match(QModelIndex(), Qt::EditRole, text, 7);
- if(res.isEmpty()) {
- m_listView->hide();
- return;
- }
-
- QStringList l;
- for(const QModelIndex &idx : res) {
- l.append(idx.data(Qt::EditRole).toString());
- }
-
- auto *m = new QStringListModel(l, this);
-
- m_listView->setModel(m);
-
- // positioning
- m_listView->setFixedWidth(width());
- m_listView->move(mapToGlobal(QPoint(0, height())));
- m_listView->show();
-}
-
-void UrlLineEdit::focusInEvent(QFocusEvent *event)
-{
- clearTextFormat();
-
- QLineEdit::focusInEvent(event);
-
- // select the contents when receiving focus
- // http://stackoverflow.com/a/35725950/1054406
- // mousePressEvent triggers right after focusInEvent so text selected in focusInEvent unselects by mousePressEvent
- //QTimer::singleShot(0, this, SLOT(selectAll()));
-}
-
-void UrlLineEdit::keyPressEvent(QKeyEvent *event)
-{
- if(!m_listView->isHidden()) {
- int key = event->key();
- int count = m_listView->model()->rowCount();
- QModelIndex currentIndex = m_listView->currentIndex();
-
- switch(key) {
- case Qt::Key_Down:
- if(currentIndex.row() + 1 >= count) {
- m_listView->setCurrentIndex(m_listView->model()->index(0, 0));
- } else {
- m_listView->setCurrentIndex(m_listView->model()->index(currentIndex.row() + 1, 0));
- }
- break;
- case Qt::Key_Up:
- if(currentIndex.row() == 0) {
- m_listView->setCurrentIndex(m_listView->model()->index(count - 1, 0));
- } else {
- m_listView->setCurrentIndex(m_listView->model()->index(currentIndex.row() - 1, 0));
- }
- break;
-
- case Qt::Key_Enter:
- case Qt::Key_Return:
- if(currentIndex.isValid()) {
- setText(currentIndex.data().toString());
- }
- m_listView->hide();
- return;
- case Qt::Key_Escape:
- m_listView->hide();
- break;
- default:
- break;
- }
- }
- QLineEdit::keyPressEvent(event);
-}
-
-// formatting taken from: https://forum.qt.io/topic/60962/setting-qlineedit-text-bold
-void UrlLineEdit::setTextFormat(const QTextLayout::FormatRange &format)
-{
- QList<QInputMethodEvent::Attribute> attributes;
- attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, format.start, format.length, format.format));
- QInputMethodEvent ev(QString(), attributes);
- event(&ev);
-}
-
-void UrlLineEdit::clearTextFormat()
-{
- setTextFormat(QTextLayout::FormatRange());
-}
diff --git a/lib/navigation/urllineedit.h b/lib/navigation/urllineedit.h
deleted file mode 100644
index 2d2a267..0000000
--- a/lib/navigation/urllineedit.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * 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 URLLINEEDIT_H
-#define URLLINEEDIT_H
-
-#include <QAction>
-#include <QLineEdit>
-#include <QTextLayout>
-
-class QAbstractItemModel;
-class QMenu;
-class QLabel;
-class QListView;
-class UrlLineEdit : public QLineEdit
-{
- Q_OBJECT
-public:
- explicit UrlLineEdit(QWidget *parent = nullptr);
-
- QAction *pageAction();
-
- void setCompleterModel(QAbstractItemModel *model);
-
-signals:
- void addressEntered(const QUrl &url);
- void searchTermEntered(const QString &term);
-
-public slots:
- void setUrl(const QUrl &url);
- void showSslError(const QString &message);
-
- void updateCompleter(const QString &text);
-
-protected:
- void focusInEvent(QFocusEvent *event);
- void keyPressEvent(QKeyEvent *event);
-
-private:
- void setTextFormat(const QTextLayout::FormatRange &format);
- void clearTextFormat();
-
- QTextLayout::FormatRange m_hostFormat;
-
- QAction *m_sslAction = nullptr;
- QAction *m_pageAction = nullptr;
-
- // ssl menu
- QMenu *m_sslMenu;
- QLabel *m_sslLabel;
-
- // completer
- QAbstractItemModel *m_bookmarksModel = nullptr;
- QListView *m_listView;
-};
-
-#endif // URLLINEEDIT_H