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/urlbar.cpp | 146 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 132 insertions(+), 14 deletions(-) (limited to 'src/urlbar/urlbar.cpp') 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); + +} -- cgit v1.2.1