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 | 
