aboutsummaryrefslogtreecommitdiff
path: root/src/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/urllineedit.cpp184
-rw-r--r--src/widgets/urllineedit.h68
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