aboutsummaryrefslogtreecommitdiff
path: root/src/widgets/urllineedit.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2017-08-23 14:52:58 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2017-08-23 14:52:58 +0200
commit3810a2bff06a38c9d4098560cd94a17a24031e23 (patch)
treed3f079161dcd3b7a37f3d2a737c6c72f8a49e187 /src/widgets/urllineedit.cpp
parentAdded URL bar completer (diff)
downloadsmolbote-3810a2bff06a38c9d4098560cd94a17a24031e23.tar.xz
Split address bar off into static library
Diffstat (limited to 'src/widgets/urllineedit.cpp')
-rw-r--r--src/widgets/urllineedit.cpp184
1 files changed, 0 insertions, 184 deletions
diff --git a/src/widgets/urllineedit.cpp b/src/widgets/urllineedit.cpp
deleted file mode 100644
index 871cd53..0000000
--- a/src/widgets/urllineedit.cpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*******************************************************************************
- **
- ** smolbote: yet another qute browser
- ** Copyright (C) 2017 Xian Nox
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- **
- ******************************************************************************/
-
-#include "urllineedit.h"
-#include <QUrl>
-#include <QTimer>
-
-#include <QAction>
-#include <QStyle>
-#include "browser.h"
-
-#include <QWidgetAction>
-
-UrlLineEdit::UrlLineEdit(QWidget *parent) :
- QLineEdit(parent)
-{
- //setStyleSheet("color: #808080");
- setPlaceholderText(tr("Enter address"));
- setContextMenuPolicy(Qt::NoContextMenu);
-
- QTextCharFormat hostnameFormat;
- hostnameFormat.setFontWeight(QFont::Bold);
- m_hostFormat.format = hostnameFormat;
-
- m_contextMenu = new QMenu(this);
- m_contextMenu->addAction("Copy URL", this, SLOT(copyUrl()));
- m_contextMenu->addAction("Paste URL", this, SLOT(pasteUrl()));
- m_contextMenu->addAction("Paste URL and go", this, SLOT(pasteUrlAndGo()));
- m_contextMenu->addSeparator();
- m_contextMenu->addAction("Bookmark this page", this, SLOT(bookmarkUrl()))->setEnabled(false);
-
- QAction *contextAction = addAction(style()->standardIcon(QStyle::SP_TitleBarMinButton), ActionPosition::TrailingPosition);
- contextAction->setShortcut(QKeySequence::fromString("F3"));
- connect(contextAction, SIGNAL(triggered()), this, SLOT(showMenu()));
-
- m_menu = new QMenu(this);
- m_menu->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
-
- QListWidget *listWidget = new QListWidget();
- listWidget->addItem("start.duckduckgo.com");
- listWidget->addItem("neueland.iserlohn-fortress.net");
-
- connect(listWidget, &QListWidget::itemActivated, [this](QListWidgetItem *item){
- setUrl(urlFromUserInput(item->text()));
- this->m_menu->hide();
- });
-
- QWidgetAction *listAction = new QWidgetAction(m_menu);
- listAction->setDefaultWidget(listWidget);
- m_menu->addAction(listAction);
- QAction *closeAction = m_menu->addAction("Close");
- connect(closeAction, SIGNAL(triggered()), m_menu, SLOT(hide()));
-
- connect(this, SIGNAL(textEdited(QString)), this, SLOT(showCompleter(QString)));
-
-}
-
-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);
-}
-
-QUrl UrlLineEdit::url()
-{
- return urlFromUserInput(text());
-}
-
-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()));
-
- //QTimer::singleShot(0, this, SLOT(showCompleter()));
-}
-
-void UrlLineEdit::focusOutEvent(QFocusEvent *event)
-{
- wasFocused = false;
- setUrl(urlFromUserInput(text()));
- QLineEdit::focusOutEvent(event);
-}
-
-void UrlLineEdit::resizeEvent(QResizeEvent *event)
-{
- QLineEdit::resizeEvent(event);
- m_menu->setFixedWidth(width());
-}
-
-// 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());
-}
-
-QUrl UrlLineEdit::urlFromUserInput(const QString &input)
-{
- if(input.startsWith('#')) {
- return QUrl::fromUserInput(qApp->settings()->value("general.search").toString().replace("$term", input.mid(1)));
- }
- return QUrl::fromUserInput(input);
-}
-
-// Completer
-
-void UrlLineEdit::showCompleter(const QString &text)
-{
- m_menu->move(mapToGlobal(QPoint(0, height())));
- m_menu->exec();
-}
-
-// Menu
-
-void UrlLineEdit::showMenu()
-{
- m_contextMenu->exec(mapToGlobal(QPoint(width() - m_contextMenu->width(), height())));
-}
-
-void UrlLineEdit::copyUrl()
-{
- selectAll();
- copy();
- deselect();
-}
-
-void UrlLineEdit::pasteUrl()
-{
- clear();
- paste();
- setUrl(urlFromUserInput(text()));
-}
-
-void UrlLineEdit::pasteUrlAndGo()
-{
- clear();
- paste();
- setUrl(urlFromUserInput(text()));
- emit returnPressed();
-}
-
-void UrlLineEdit::bookmarkUrl()
-{
- qDebug("TODO: bookmarkUrl()");
-}