diff options
| author | Andrea Diamantini <adjam7@gmail.com> | 2010-04-22 02:15:35 +0200 | 
|---|---|---|
| committer | Andrea Diamantini <adjam7@gmail.com> | 2010-04-22 02:15:35 +0200 | 
| commit | f958e654e4374cd969cc6d025f01432beb092dec (patch) | |
| tree | 972d7420aebf914c8d54d69e3567d29f6ea731dd /src/urlbar | |
| parent | Merge commit 'refs/merge-requests/2249' of git://gitorious.org/rekonq/mainlin... (diff) | |
| download | rekonq-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.cpp | 193 | ||||
| -rw-r--r-- | src/urlbar/lineedit.h | 97 | ||||
| -rw-r--r-- | src/urlbar/urlbar.cpp | 146 | ||||
| -rw-r--r-- | src/urlbar/urlbar.h | 50 | 
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 | 
