diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/urlbar/rsswidget.cpp | 143 | ||||
| -rw-r--r-- | src/urlbar/rsswidget.h | 54 | ||||
| -rw-r--r-- | src/webtab.cpp | 48 | ||||
| -rw-r--r-- | src/webtab.h | 2 | 
5 files changed, 208 insertions, 40 deletions
| diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 119b7f3e..e2bcbdb9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -52,6 +52,7 @@ SET( rekonq_KDEINIT_SRCS      urlbar/completionwidget.cpp      urlbar/urlresolver.cpp      urlbar/listitem.cpp +    urlbar/rsswidget.cpp  ) diff --git a/src/urlbar/rsswidget.cpp b/src/urlbar/rsswidget.cpp new file mode 100644 index 00000000..16e52ccf --- /dev/null +++ b/src/urlbar/rsswidget.cpp @@ -0,0 +1,143 @@ +/* +    <one line to give the program's name and a brief idea of what it does.> +    Copyright (C) <year>  <name of author> + +    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 3 of the License, or +    (at your option) any later version. + +    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/>. + +*/ + +// Auto Includes +#include "rsswidget.h" +#include "rsswidget.moc" + +// Local includes +#include "application.h" +#include "mainwindow.h" +#include "webtab.h" +#include "webview.h" + +// Qt Includes +#include <QFormLayout> +#include <QDialogButtonBox> +#include <QDBusInterface> +#include <QDBusConnectionInterface> +#include <QLabel> + +// KDE Includes +#include <KLocalizedString> +#include <KComboBox> +#include <KIcon> +#include <KProcess> +#include <KMessageBox> + + +RSSWidget::RSSWidget(QMap< KUrl, QString > map, QWidget *parent)  +        : QFrame(parent, Qt::Popup) +        , m_map(map) +{ +    setAttribute(Qt::WA_DeleteOnClose); +    setFixedWidth(250); +    setFrameStyle(Panel); +     +    QFormLayout *layout = new QFormLayout(this); +    setLayout(layout); +     +     +    QLabel *agregator = new QLabel(this); +    agregator->setText(i18n("Agregator")); +     +    m_agregators = new KComboBox(this); +    m_agregators->addItem(KIcon("application-rss+xml"), QString("Akregator")); +    m_agregators->addItem(Application::icon(KUrl("http://google.com/reader")), i18n("Google Reader")); +     +    layout->addRow(agregator, m_agregators); +     +     +    QLabel *feed = new QLabel(this); +    feed->setText(i18n("Feed")); +     +    m_feeds = new KComboBox(this); +    foreach(QString title, m_map) +        m_feeds->addItem(title); +     +    layout->addRow(feed, m_feeds); +     +     +    QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); +    buttonBox->button(QDialogButtonBox::Ok)->setText(i18n("Add Feed")); +    connect(buttonBox, SIGNAL(accepted()), this, SLOT(accepted())); +    connect(buttonBox, SIGNAL(rejected()), this, SLOT(close())); +     +    layout->addWidget(buttonBox); +} + + +void RSSWidget::showAt(QPoint pos) +{ +    pos.setX(pos.x() - 200); +    pos.setY(pos.y() + 10); +    move(pos); +    show(); +} + + +void RSSWidget::accepted() +{ +    QString url = m_map.key(m_feeds->currentText()).toMimeDataString(); +     +    if(m_agregators->currentIndex() == 0) +        addWithAkregator(url); +    else +        addWithGoogleReader(url); +     +    close(); +} + + +void RSSWidget::addWithGoogleReader(QString url) +{ +    KUrl toLoad = KUrl("http://www.google.com/ig/add?feedurl=" + url); +    Application::instance()->mainWindow()->currentTab()->view()->load(toLoad); +} + + +void RSSWidget::addWithAkregator(QString url) +{ +    // 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", QStringList(url) , 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=\"" + url + "\">" + url + "</a>")); +        } +    } +    // Akregator is not running +    else +    { +        KProcess proc; +        proc << "akregator" << "-g" << i18n("Imported Feeds"); +        proc << "-a" << url; +        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=\"" + url + "\">" + url + "</a>")); +        } +         +    } +} + diff --git a/src/urlbar/rsswidget.h b/src/urlbar/rsswidget.h new file mode 100644 index 00000000..5c1ca736 --- /dev/null +++ b/src/urlbar/rsswidget.h @@ -0,0 +1,54 @@ +/* +    <one line to give the program's name and a brief idea of what it does.> +    Copyright (C) <year>  <name of author> + +    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 3 of the License, or +    (at your option) any later version. + +    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 RSSWIDGET_H +#define RSSWIDGET_H + +// Qt Includes +#include <QFrame> +#include <KUrl> + +// KDE Includes +#include <KComboBox> + + +class RSSWidget : public QFrame +{ +    Q_OBJECT +     +public: +    // QMap< feedUrl, feedTitle> +    RSSWidget(QMap<KUrl, QString> map, QWidget *parent); +     +    void showAt(QPoint pos); +     +public slots: +    void accepted(); +     +private: +    void addWithAkregator(QString url); +    void addWithGoogleReader(QString url); +     +    QMap<KUrl, QString> m_map; +     +    KComboBox *m_agregators; +    KComboBox *m_feeds; +}; + +#endif // RSSWIDGET_H diff --git a/src/webtab.cpp b/src/webtab.cpp index 83532a65..02511d39 100644 --- a/src/webtab.cpp +++ b/src/webtab.cpp @@ -40,6 +40,7 @@  #include "bookmarksmanager.h"  #include "walletbar.h"  #include "previewselectorbar.h" +#include "rsswidget.h"  // KDE Includes  #include <KService> @@ -50,7 +51,6 @@  #include <KWebView>  #include <kwebwallet.h>  #include <KDE/KMessageBox> -#include <KProcess>  // Qt Includes  #include <QContextMenuEvent> @@ -189,13 +189,13 @@ bool WebTab::hasRSSInfo()  } -void WebTab::showRSSInfo(QPoint menuPos) +void WebTab::showRSSInfo(QPoint pos)  { -    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\"]")); +     +    QMap<KUrl, QString> map; +    int i = 0;      foreach(QWebElement el, col)      {          QString urlString; @@ -215,41 +215,11 @@ void WebTab::showRSSInfo(QPoint menuPos)          if(title.isEmpty())              title= el.attribute("href"); -        KAction *action = new KAction(title, menu); -        action->setData(urlString); +        map.insert(KUrl(urlString), title); -        menu->addAction(action); +        i++;      } -    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>")); -        } -         -    } +    RSSWidget *widget = new RSSWidget(map, window());  +    widget->showAt(pos);  } diff --git a/src/webtab.h b/src/webtab.h index 16e0a6b6..e3a8258a 100644 --- a/src/webtab.h +++ b/src/webtab.h @@ -65,7 +65,7 @@ private slots:      void loadFinished(bool);      void createWalletBar(const QString &, const QUrl &); -    void showRSSInfo(QPoint menuPos); +    void showRSSInfo(QPoint pos);  private:      int m_progress; | 
