diff options
| -rw-r--r-- | src/urlbar/lineedit.cpp | 197 | ||||
| -rw-r--r-- | src/urlbar/urlbar.cpp | 6 | ||||
| -rw-r--r-- | src/urlbar/urlbar.h | 5 | ||||
| -rw-r--r-- | src/urlbar/urlresolver.h | 5 | ||||
| -rw-r--r-- | src/webtab.cpp | 96 | ||||
| -rw-r--r-- | src/webtab.h | 4 | 
6 files changed, 274 insertions, 39 deletions
| diff --git a/src/urlbar/lineedit.cpp b/src/urlbar/lineedit.cpp new file mode 100644 index 00000000..29d07e16 --- /dev/null +++ b/src/urlbar/lineedit.cpp @@ -0,0 +1,197 @@ +/* ============================================================ +* +* 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); +} + +void IconButton::mouseReleaseEvent(QMouseEvent* event) +{ +    emit clicked(event->globalPos()); +} + +// ----------------------------------------------------------------------------------------------------------- + + +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("Search Bookmarks, History, Web.. just start typing here!") +                        ); +    } +} + + +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/urlbar.cpp b/src/urlbar/urlbar.cpp index 6d255c02..d7fc7199 100644 --- a/src/urlbar/urlbar.cpp +++ b/src/urlbar/urlbar.cpp @@ -63,6 +63,10 @@ IconButton::IconButton(QWidget *parent)      setCursor(Qt::ArrowCursor);  } +void IconButton::mouseReleaseEvent(QMouseEvent* event) +{ +    emit clicked(event->globalPos()); +}  // ----------------------------------------------------------------------------------------------------------- @@ -282,7 +286,7 @@ void UrlBar::loadFinished()      if(_tab->hasRSSInfo())      {          IconButton *bt = addRightIcon(UrlBar::RSS); -        connect(bt, SIGNAL(clicked()), _tab, SLOT(showRSSInfo())); +        connect(bt, SIGNAL(clicked(QPoint)), _tab, SLOT(showRSSInfo(QPoint)));      }      // show SSL diff --git a/src/urlbar/urlbar.h b/src/urlbar/urlbar.h index 0be1ecf9..91b38e23 100644 --- a/src/urlbar/urlbar.h +++ b/src/urlbar/urlbar.h @@ -53,9 +53,12 @@ class WebTab;  class IconButton : public QToolButton  {      Q_OBJECT -  public:      IconButton(QWidget *parent = 0); +signals: +    void clicked(QPoint); +protected: +    void mouseReleaseEvent(QMouseEvent *event);  }; diff --git a/src/urlbar/urlresolver.h b/src/urlbar/urlresolver.h index 22a9de4f..5200a401 100644 --- a/src/urlbar/urlresolver.h +++ b/src/urlbar/urlresolver.h @@ -37,9 +37,8 @@  class UrlSearchItem  { - -    public: - +public: +          enum types       {           Search          = 0x00000001, diff --git a/src/webtab.cpp b/src/webtab.cpp index 62de6299..83532a65 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -50,6 +50,7 @@  #include <KWebView>  #include <kwebwallet.h>  #include <KDE/KMessageBox> +#include <KProcess>  // Qt Includes  #include <QContextMenuEvent> @@ -179,43 +180,76 @@ void WebTab::createPreviewSelectorBar(int index)  bool WebTab::hasRSSInfo()  { -    _rssList.clear(); -    QWebElementCollection col = page()->mainFrame()->findAllElements("link"); -    foreach(QWebElement el, col) -    { -        if( el.attribute("type") == QL1S("application/rss+xml") || el.attribute("type") == QL1S("application/rss+xml") ) -        { -            if( el.attribute("href").startsWith( QL1S("http") ) ) -            { -                _rssList << KUrl( el.attribute("href") ); -            } -            else -            { -                KUrl u = url(); -                // NOTE -                // cd() is probably better than setPath() here,  -                // for all those url sites just having a path -                if(u.cd( el.attribute("href") )) -                    _rssList << u; -            } -        } -    } +    QWebElementCollection col = page()->mainFrame()->findAllElements("link[type=\"application/rss+xml\"]"); +    col.append(page()->mainFrame()->findAllElements("link[type=\"application/atom+xml\"]")); +    if(col.count() != 0) +        return true; -    return !_rssList.isEmpty(); +    return false;  } -void WebTab::showRSSInfo() +void WebTab::showRSSInfo(QPoint menuPos)  { -    QString urlList = QString(i18n("The following RSS feeds were found:<br /><br />")); -    foreach(const KUrl &url, _rssList) +    KMenu *menu = new KMenu(); +    menu->addTitle(KIcon("application-rss+xml"), i18n("Add Streams to Akregator")); +     +    QWebElementCollection col = page()->mainFrame()->findAllElements("link[type=\"application/rss+xml\"]"); +    col.append(page()->mainFrame()->findAllElements("link[type=\"application/atom+xml\"]")); +    foreach(QWebElement el, col)      { -        urlList += QString("<a href=\"") + url.url() + QString("\">") + url.url() + QString("</a><br />"); +        QString urlString; +        if( el.attribute("href").startsWith( QL1S("http") ) ) +            urlString = el.attribute("href"); +        else +        { +            KUrl u = url(); +            // NOTE +            // cd() is probably better than setPath() here,  +            // for all those url sites just having a path +            if(u.cd( el.attribute("href") )) +                    urlString = u.toMimeDataString(); +        } +         +        QString title = el.attribute("title"); +        if(title.isEmpty()) +            title= el.attribute("href"); +         +        KAction *action = new KAction(title, menu); +        action->setData(urlString); +         +        menu->addAction(action);      } -    urlList += QString(i18n("<br />Enough for now... Waiting for some cool Akonadi based feeds management :)")); -    KMessageBox::information( view(),  -                              urlList, -                              i18n("RSS Management") -                            ); +    QAction *action = menu->exec(menuPos); +    if(action == 0) +        return; +     +    // Akregator is running +    if(QDBusConnection::sessionBus().interface()->isServiceRegistered("org.kde.akregator")) +    { +        QDBusInterface akregator("org.kde.akregator", "/Akregator", "org.kde.akregator.part"); +        QDBusReply<void> reply = akregator.call("addFeedsToGroup", action->data().toStringList(), i18n("Imported Feeds")); +         +        if(!reply.isValid())  +        { +            KMessageBox::error( 0, QString(i18n("Could not add stream to akregator, Please add it manually :") +                                            + "<br /><br /> <a href=\"" + action->data().toString() + "\">" +                                            + action->data().toString() + "</a>")); +        } +    } +    // Akregator is not running +    else +    { +        KProcess proc; +        proc << "akregator" << "-g" << i18n("Imported Feeds"); +        proc << "-a" << action->data().toString(); +        if(proc.startDetached() == 0) +        { +            KMessageBox::error( 0, QString(i18n("There was an error. Please verify Akregator is installed on your system.") +                                            + "<br /><br /> <a href=\"" + action->data().toString() + "\">" +                                            + action->data().toString() + "</a>")); +        } +         +    }  } diff --git a/src/webtab.h b/src/webtab.h index 9054a7c1..16e0a6b6 100644 --- a/src/webtab.h +++ b/src/webtab.h @@ -65,12 +65,10 @@ private slots:      void loadFinished(bool);      void createWalletBar(const QString &, const QUrl &); -    void showRSSInfo(); +    void showRSSInfo(QPoint menuPos);  private:      int m_progress; -     -    KUrl::List _rssList;  };  #endif | 
