diff options
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/urllineedit.cpp | 184 | ||||
-rw-r--r-- | src/widgets/urllineedit.h | 68 |
2 files changed, 0 insertions, 252 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()"); -} diff --git a/src/widgets/urllineedit.h b/src/widgets/urllineedit.h deleted file mode 100644 index 548000a..0000000 --- a/src/widgets/urllineedit.h +++ /dev/null @@ -1,68 +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/>. - ** - ******************************************************************************/ - -#ifndef URLLINEEDIT_H -#define URLLINEEDIT_H - -#include <QLineEdit> -#include <QTextLayout> -#include <QMenu> - -#include <QListWidget> - -class UrlLineEdit : public QLineEdit -{ - Q_OBJECT -public: - explicit UrlLineEdit(QWidget *parent = 0); - -signals: - -public slots: - void setUrl(const QUrl &url); - QUrl url(); - -protected: - void focusInEvent(QFocusEvent *event); - void focusOutEvent(QFocusEvent *event); - void resizeEvent(QResizeEvent *event); - -private slots: - void showCompleter(const QString &text); - void showMenu(); - void copyUrl(); - void pasteUrl(); - void pasteUrlAndGo(); - void bookmarkUrl(); - -private: - void setTextFormat(const QTextLayout::FormatRange &format); - void clearTextFormat(); - - QUrl urlFromUserInput(const QString &input); - - QTextLayout::FormatRange m_hostFormat; - QMenu *m_contextMenu; - - bool wasFocused = false; - QMenu *m_menu; -}; - -#endif // URLLINEEDIT_H |