From f958e654e4374cd969cc6d025f01432beb092dec Mon Sep 17 00:00:00 2001 From: Andrea Diamantini Date: Thu, 22 Apr 2010 02:15:35 +0200 Subject: Bye Bye, LineEdit! Welcome, awesome bar.. Idea & patch from Johannes Zellner --- src/urlbar/lineedit.cpp | 193 ------------------------------------------------ src/urlbar/lineedit.h | 97 ------------------------ src/urlbar/urlbar.cpp | 146 ++++++++++++++++++++++++++++++++---- src/urlbar/urlbar.h | 50 +++++++++++-- 4 files changed, 174 insertions(+), 312 deletions(-) delete mode 100644 src/urlbar/lineedit.cpp delete mode 100644 src/urlbar/lineedit.h (limited to 'src/urlbar') diff --git a/src/urlbar/lineedit.cpp b/src/urlbar/lineedit.cpp deleted file mode 100644 index 93e65294..00000000 --- a/src/urlbar/lineedit.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Andrea Diamantini -* Copyright (C) 2009 by Paweł Prażak -* Copyright (C) 2009 by Lionel Chauvin -* -* -* 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 2 of -* the License or (at your option) version 3 or any later version -* accepted by the membership of KDE e.V. (or its successor approved -* by the membership of KDE e.V.), which shall act as a proxy -* defined in Section 14 of version 3 of the license. -* -* 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 . -* -* ============================================================ */ - - -// Self Includes -#include "lineedit.h" -#include "lineedit.moc" - -// KDE Includes -#include -#include -#include -#include - -// Qt Includes -#include -#include -#include -#include -#include - - -IconButton::IconButton(QWidget *parent) - : QToolButton(parent) -{ - setToolButtonStyle(Qt::ToolButtonIconOnly); - setStyleSheet("IconButton { background-color:transparent; border: none; padding: 0px}"); - setCursor(Qt::ArrowCursor); -} - - -// ----------------------------------------------------------------------------------------------------------- - - -LineEdit::LineEdit(QWidget* parent) - : KLineEdit(parent) - , _icon( new IconButton(this) ) -{ - // cosmetic - setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); - setMinimumWidth(200); - setMinimumHeight(26); - - // initial style - setStyleSheet( QString("LineEdit { padding: 0 0 0 %1px;} ").arg(_icon->sizeHint().width()) ); - - // doesn't show the clear button - setClearButtonShown(false); - - // trap Key_Enter & Key_Return events, while emitting the returnPressed signal - setTrapReturnKey(true); - - // insert decoded URLs - setUrlDropsEnabled(true); - - // accept focus, via tabbing, clicking & wheeling - setFocusPolicy(Qt::WheelFocus); - - // disable completion object (we have our own :) ) - setCompletionObject(0); -} - - -LineEdit::~LineEdit() -{ - delete _icon; -} - - -void LineEdit::keyPressEvent(QKeyEvent *event) -{ - if (event->key() == Qt::Key_Escape) - { - clearFocus(); - event->accept(); - } - - KLineEdit::keyPressEvent(event); -} - - -void LineEdit::mouseDoubleClickEvent(QMouseEvent *) -{ - selectAll(); -} - - -IconButton *LineEdit::iconButton() const -{ - return _icon; -} - - -void LineEdit::paintEvent(QPaintEvent *event) -{ - // you need this before our code to draw inside the line edit.. - KLineEdit::paintEvent(event); - - if (text().isEmpty()) - { - QStyleOptionFrame option; - initStyleOption(&option); - QRect textRect = style()->subElementRect(QStyle::SE_LineEditContents, &option, this); - QPainter painter(this); - painter.setPen(Qt::gray); - painter.drawText( textRect, - Qt::AlignCenter, - i18n("Start typing here to search your bookmarks, history and the web...") - ); - } -} - - -IconButton *LineEdit::addRightIcon(LineEdit::icon ic) -{ - IconButton *rightIcon = new IconButton(this); - - switch(ic) - { - case LineEdit::KGet: - rightIcon->setIcon( KIcon("download") ); - rightIcon->setToolTip( i18n("List all links with KGet") ); - break; - case LineEdit::RSS: - rightIcon->setIcon( KIcon("application-rss+xml") ); - rightIcon->setToolTip( i18n("List all available RSS feeds") ); - break; - case LineEdit::SSL: - rightIcon->setIcon( KIcon("object-locked") ); - rightIcon->setToolTip( i18n("Show SSL Infos") ); - break; - default: - kDebug() << "ERROR.. default non extant case!!"; - break; - } - - _rightIconsList << rightIcon; - int iconsCount = _rightIconsList.count(); - rightIcon->move( width() - 23*iconsCount, 6); - rightIcon->show(); - - return rightIcon; -} - - -void LineEdit::clearRightIcons() -{ - qDeleteAll(_rightIconsList); - _rightIconsList.clear(); -} - - -void LineEdit::resizeEvent(QResizeEvent *event) -{ - int newHeight = ( height() - 19 )/2; - _icon->move(4, newHeight ); - - int iconsCount = _rightIconsList.count(); - int w = width(); - - for(int i = 0; i < iconsCount; ++i) - { - IconButton *bt = _rightIconsList.at(i); - bt->move( w - 25*(i+1), newHeight ); - } - - KLineEdit::resizeEvent(event); - -} diff --git a/src/urlbar/lineedit.h b/src/urlbar/lineedit.h deleted file mode 100644 index 68cdc7d1..00000000 --- a/src/urlbar/lineedit.h +++ /dev/null @@ -1,97 +0,0 @@ -/* ============================================================ -* -* This file is a part of the rekonq project -* -* Copyright (C) 2009 by Andrea Diamantini -* Copyright (C) 2009 by Paweł Prażak -* Copyright (C) 2009 by Lionel Chauvin -* -* -* 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 2 of -* the License or (at your option) version 3 or any later version -* accepted by the membership of KDE e.V. (or its successor approved -* by the membership of KDE e.V.), which shall act as a proxy -* defined in Section 14 of version 3 of the license. -* -* 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 . -* -* ============================================================ */ - - -#ifndef LINEEDIT_H -#define LINEEDIT_H - - -// KDE Includes -#include -#include - -// Qt Includes -#include - -// Forward Declarations -class QContextMenuEvent; -class QFocusEvent; -class QKeyEvent; -class QStyleOptionFrameV2; - - -class IconButton : public QToolButton -{ - Q_OBJECT - -public: - IconButton(QWidget *parent = 0); -}; - - -// ------------------------------------------------------------------------------------ - - -// Definitions -typedef QList IconButtonPointerList; - - -class LineEdit : public KLineEdit -{ - Q_OBJECT - -public: - - enum icon - { - KGet = 0x00000001, - RSS = 0x00000010, - SSL = 0x00000100, - }; - - explicit LineEdit(QWidget *parent = 0); - virtual ~LineEdit(); - - IconButton *iconButton() const; - -protected: - virtual void keyPressEvent(QKeyEvent *); - virtual void mouseDoubleClickEvent(QMouseEvent *); - virtual void paintEvent(QPaintEvent *); - virtual void resizeEvent(QResizeEvent *); - - IconButton *addRightIcon(LineEdit::icon ); - -private slots: - void clearRightIcons(); - -private: - IconButton *_icon; - IconButtonPointerList _rightIconsList; -}; - -#endif // LINEEDIT_H diff --git a/src/urlbar/urlbar.cpp b/src/urlbar/urlbar.cpp index 6d1b19c9..6d255c02 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -35,8 +35,6 @@ #include "rekonq.h" // Local Includes -#include "application.h" -#include "lineedit.h" #include "mainwindow.h" #include "webtab.h" #include "webview.h" @@ -45,7 +43,6 @@ // KDE Includes #include #include -#include // Qt Includes #include @@ -58,11 +55,47 @@ #define QL1S(x) QLatin1String(x) +IconButton::IconButton(QWidget *parent) + : QToolButton(parent) +{ + setToolButtonStyle(Qt::ToolButtonIconOnly); + setStyleSheet("IconButton { background-color:transparent; border: none; padding: 0px}"); + setCursor(Qt::ArrowCursor); +} + + +// ----------------------------------------------------------------------------------------------------------- + + UrlBar::UrlBar(QWidget *parent) - : LineEdit(parent) + : KLineEdit(parent) , _tab(0) , _privateMode(false) + , _icon( new IconButton(this) ) { + // initial style + setStyleSheet( QString("UrlBar { padding: 0 0 0 %1px;} ").arg(_icon->sizeHint().width()) ); + + // cosmetic + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + setMinimumWidth(200); + setMinimumHeight(26); + + // doesn't show the clear button + setClearButtonShown(false); + + // trap Key_Enter & Key_Return events, while emitting the returnPressed signal + setTrapReturnKey(true); + + // insert decoded URLs + setUrlDropsEnabled(true); + + // accept focus, via tabbing, clicking & wheeling + setFocusPolicy(Qt::WheelFocus); + + // disable completion object (we have our own :) ) + setCompletionObject(0); + _tab = qobject_cast(parent); connect(_tab->view(), SIGNAL(urlChanged(const QUrl &)), this, SLOT(setQUrl(const QUrl &))); @@ -79,6 +112,7 @@ UrlBar::UrlBar(QWidget *parent) UrlBar::~UrlBar() { activateSuggestions(false); + delete _icon; _box.clear(); } @@ -87,16 +121,16 @@ void UrlBar::setQUrl(const QUrl& url) { if(url.scheme() == QL1S("about") ) { - iconButton()->setIcon( KIcon("arrow-right") ); + _icon->setIcon( KIcon("arrow-right") ); clear(); setFocus(); } else { clearFocus(); - LineEdit::setUrl(url); + KLineEdit::setUrl(url); setCursorPosition(0); - iconButton()->setIcon( Application::icon(url) ); + _icon->setIcon( Application::icon(url) ); } } @@ -146,7 +180,21 @@ void UrlBar::paintEvent(QPaintEvent *event) } setPalette(p); - LineEdit::paintEvent(event); + // you need this before our code to draw inside the line edit.. + KLineEdit::paintEvent(event); + + if (text().isEmpty()) + { + QStyleOptionFrame option; + initStyleOption(&option); + QRect textRect = style()->subElementRect(QStyle::SE_LineEditContents, &option, this); + QPainter painter(this); + painter.setPen(Qt::gray); + painter.drawText( textRect, + Qt::AlignCenter, + i18n("Start typing here to search your bookmarks, history and the web...") + ); + } } @@ -181,7 +229,13 @@ void UrlBar::keyPressEvent(QKeyEvent *event) } } - LineEdit::keyPressEvent(event); + if (event->key() == Qt::Key_Escape) + { + clearFocus(); + event->accept(); + } + + KLineEdit::keyPressEvent(event); } @@ -189,7 +243,7 @@ void UrlBar::focusInEvent(QFocusEvent *event) { activateSuggestions(true); - LineEdit::focusInEvent(event); + KLineEdit::focusInEvent(event); } @@ -201,7 +255,7 @@ void UrlBar::setPrivateMode(bool on) void UrlBar::dropEvent(QDropEvent *event) { - LineEdit::dropEvent(event); + KLineEdit::dropEvent(event); activated(text()); } @@ -220,21 +274,21 @@ void UrlBar::loadFinished() // show KGet downloads?? if(ReKonfig::kgetList()) { - IconButton *bt = addRightIcon(LineEdit::KGet); + IconButton *bt = addRightIcon(UrlBar::KGet); connect(bt, SIGNAL(clicked()), _tab->page(), SLOT(downloadAllContentsWithKGet())); } // show RSS if(_tab->hasRSSInfo()) { - IconButton *bt = addRightIcon(LineEdit::RSS); + IconButton *bt = addRightIcon(UrlBar::RSS); connect(bt, SIGNAL(clicked()), _tab, SLOT(showRSSInfo())); } // show SSL if(_tab->url().scheme() == QL1S("https") ) { - IconButton *bt = addRightIcon(LineEdit::SSL); + IconButton *bt = addRightIcon(UrlBar::SSL); connect(bt, SIGNAL(clicked()), _tab->page(), SLOT(showSSLInfo())); } @@ -268,3 +322,67 @@ void UrlBar::activateSuggestions(bool b) _box.data()->deleteLater(); } } + + +void UrlBar::mouseDoubleClickEvent(QMouseEvent *) +{ + selectAll(); +} + + +IconButton *UrlBar::addRightIcon(UrlBar::icon ic) +{ + IconButton *rightIcon = new IconButton(this); + + switch(ic) + { + case UrlBar::KGet: + rightIcon->setIcon( KIcon("download") ); + rightIcon->setToolTip( i18n("List all links with KGet") ); + break; + case UrlBar::RSS: + rightIcon->setIcon( KIcon("application-rss+xml") ); + rightIcon->setToolTip( i18n("List all available RSS feeds") ); + break; + case UrlBar::SSL: + rightIcon->setIcon( KIcon("object-locked") ); + rightIcon->setToolTip( i18n("Show SSL Infos") ); + break; + default: + kDebug() << "ERROR.. default non extant case!!"; + break; + } + + _rightIconsList << rightIcon; + int iconsCount = _rightIconsList.count(); + rightIcon->move( width() - 23*iconsCount, 6); + rightIcon->show(); + + return rightIcon; +} + + +void UrlBar::clearRightIcons() +{ + qDeleteAll(_rightIconsList); + _rightIconsList.clear(); +} + + +void UrlBar::resizeEvent(QResizeEvent *event) +{ + int newHeight = ( height() - 19 )/2; + _icon->move(4, newHeight ); + + int iconsCount = _rightIconsList.count(); + int w = width(); + + for(int i = 0; i < iconsCount; ++i) + { + IconButton *bt = _rightIconsList.at(i); + bt->move( w - 25*(i+1), newHeight ); + } + + KLineEdit::resizeEvent(event); + +} diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h index 28afc21e..0be1ecf9 100644 --- a/src/urlbar/urlbar.h +++ b/src/urlbar/urlbar.h @@ -33,14 +33,15 @@ // Local Includes #include "rekonqprivate_export.h" -#include "lineedit.h" #include "application.h" // KDE Includes #include +#include // Qt Includes #include +#include // Forward Declarations class QLinearGradient; @@ -49,12 +50,36 @@ class CompletionWidget; class WebTab; -class REKONQ_TESTS_EXPORT UrlBar : public LineEdit +class IconButton : public QToolButton { Q_OBJECT public: - UrlBar(QWidget *parent = 0); + IconButton(QWidget *parent = 0); +}; + + +// Definitions +typedef QList IconButtonPointerList; + + +// ------------------------------------------------------------------------------------ + + +class REKONQ_TESTS_EXPORT UrlBar : public KLineEdit +{ + Q_OBJECT + +public: + + enum icon + { + KGet = 0x00000001, + RSS = 0x00000010, + SSL = 0x00000100, + }; + + explicit UrlBar(QWidget *parent = 0); ~UrlBar(); void setPrivateMode(bool on); @@ -65,19 +90,28 @@ private slots: void loadFinished(); void loadTyped(const QString &); - + + void clearRightIcons(); + protected: - virtual void paintEvent(QPaintEvent *event); - virtual void keyPressEvent(QKeyEvent *event); - virtual void focusInEvent(QFocusEvent *event); - virtual void dropEvent(QDropEvent *event); + void paintEvent(QPaintEvent *event); + void keyPressEvent(QKeyEvent *event); + void focusInEvent(QFocusEvent *event); + void dropEvent(QDropEvent *event); + void mouseDoubleClickEvent(QMouseEvent *); + void resizeEvent(QResizeEvent *); private: + IconButton *addRightIcon(UrlBar::icon ); void activateSuggestions(bool); QWeakPointer _box; WebTab *_tab; bool _privateMode; + + IconButton *_icon; + IconButtonPointerList _rightIconsList; }; + #endif -- cgit v1.2.1