summaryrefslogtreecommitdiff
path: root/src/urlbar
diff options
context:
space:
mode:
authorAndrea Diamantini <adjam7@gmail.com>2010-04-22 02:15:35 +0200
committerAndrea Diamantini <adjam7@gmail.com>2010-04-22 02:15:35 +0200
commitf958e654e4374cd969cc6d025f01432beb092dec (patch)
tree972d7420aebf914c8d54d69e3567d29f6ea731dd /src/urlbar
parentMerge commit 'refs/merge-requests/2249' of git://gitorious.org/rekonq/mainlin... (diff)
downloadrekonq-f958e654e4374cd969cc6d025f01432beb092dec.tar.xz
Bye Bye, LineEdit!
Welcome, awesome bar.. Idea & patch from Johannes Zellner
Diffstat (limited to 'src/urlbar')
-rw-r--r--src/urlbar/lineedit.cpp193
-rw-r--r--src/urlbar/lineedit.h97
-rw-r--r--src/urlbar/urlbar.cpp146
-rw-r--r--src/urlbar/urlbar.h50
4 files changed, 174 insertions, 312 deletions
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 <adjam7 at gmail dot com>
-* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
-*
-*
-* 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 <http://www.gnu.org/licenses/>.
-*
-* ============================================================ */
-
-
-// Self Includes
-#include "lineedit.h"
-#include "lineedit.moc"
-
-// KDE Includes
-#include <klocalizedstring.h>
-#include <KDebug>
-#include <KStandardDirs>
-#include <KIconLoader>
-
-// Qt Includes
-#include <QtGui/QContextMenuEvent>
-#include <QtGui/QFocusEvent>
-#include <QtGui/QKeyEvent>
-#include <QStyleOptionFrameV2>
-#include <QPainter>
-
-
-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 <adjam7 at gmail dot com>
-* Copyright (C) 2009 by Paweł Prażak <pawelprazak at gmail dot com>
-* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr>
-*
-*
-* 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 <http://www.gnu.org/licenses/>.
-*
-* ============================================================ */
-
-
-#ifndef LINEEDIT_H
-#define LINEEDIT_H
-
-
-// KDE Includes
-#include <KLineEdit>
-#include <KIcon>
-
-// Qt Includes
-#include <QToolButton>
-
-// Forward Declarations
-class QContextMenuEvent;
-class QFocusEvent;
-class QKeyEvent;
-class QStyleOptionFrameV2;
-
-
-class IconButton : public QToolButton
-{
- Q_OBJECT
-
-public:
- IconButton(QWidget *parent = 0);
-};
-
-
-// ------------------------------------------------------------------------------------
-
-
-// Definitions
-typedef QList<IconButton *> 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 <KDebug>
#include <KCompletionBox>
-#include <KUrl>
// Qt Includes
#include <QPainter>
@@ -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<WebTab *>(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 <KUrl>
+#include <KLineEdit>
// Qt Includes
#include <QWeakPointer>
+#include <QToolButton>
// 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<IconButton *> 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<CompletionWidget> _box;
WebTab *_tab;
bool _privateMode;
+
+ IconButton *_icon;
+ IconButtonPointerList _rightIconsList;
};
+
#endif