[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdenetwork/knewsticker
From:       Frerich Raabe <raabe () kde ! org>
Date:       2007-10-31 23:42:22
Message-ID: 1193874142.816851.15055.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 731541 by raabe:

- A bit of news feed management, you can add and remove feeds. It's pretty \
ugly  at the moment and it doesn't work very well in some cases. I'm just \
not sure  whether I will go on like this or whether I will decide on a \
totally different  configuration GUI. Decisions, decisions!


 M  +1 -1      feedsettings.ui  
 M  +100 -1    feedsettingswidget.cpp  
 M  +12 -0     feedsettingswidget.h  
 M  +9 -1      knewsticker.cpp  
 M  +8 -3      newsfeedmanager.cpp  
 M  +1 -0      newsfeedmanager.h  


--- trunk/KDE/kdenetwork/knewsticker/feedsettings.ui #731540:731541
@@ -13,7 +13,7 @@
    <item rowspan="5" row="0" column="0" >
     <layout class="QGridLayout" >
      <item row="0" column="0" colspan="3" >
-      <widget class="QListWidget" name="listWidget" />
+      <widget class="QListWidget" name="feedListWidget" />
      </item>
      <item row="1" column="0" >
       <widget class="QPushButton" name="addButton" >
--- trunk/KDE/kdenetwork/knewsticker/feedsettingswidget.cpp #731540:731541
@@ -1,10 +1,109 @@
 #include "feedsettingswidget.h"
+#include "newsfeedmanager.h"
+#include "settings.h"
 
+#include <QInputDialog>
+#include <QMessageBox>
+
+#include <QProgressDialog>
+
 FeedSettingsWidget::FeedSettingsWidget( QWidget *parent )
-    : QWidget( parent )
+    : QWidget( parent ),
+    m_downloadMessageBox( 0 )
 {
     ui.setupUi( this );
+    ui.feedListWidget->addItems( Settings::feedUrls() );
+    connect( ui.feedListWidget, SIGNAL( itemSelectionChanged() ),
+             this, SLOT( feedItemChanged() ) );
+    connect( ui.addButton, SIGNAL( clicked() ),
+             this, SLOT( addButtonClicked() ) );
+    connect( ui.removeButton, SIGNAL( clicked() ),
+             this, SLOT( removeButtonClicked() ) );
+
+    connect( NewsFeedManager::self(), SIGNAL( feedLoaded( const QUrl & ) \
), +             this, SLOT( feedLoaded( const QUrl & ) ) );
+
+    if ( ui.feedListWidget->count() > 0 ) {
+        ui.feedListWidget->setCurrentRow( 0 );
+        feedItemChanged();
+    }
 }
 
+QStringList FeedSettingsWidget::feedUrls() const
+{
+    QStringList urls;
+    for ( int i = 0; i < ui.feedListWidget->count(); ++i ) {
+        urls.append( ui.feedListWidget->item( i )->text() );
+    }
+    return urls;
+}
+
+void FeedSettingsWidget::feedItemChanged()
+{
+    QListWidgetItem *item = ui.feedListWidget->currentItem();
+    ui.removeButton->setEnabled( item != 0 );
+    if ( item == 0 ) {
+        return;
+    }
+
+    QMap<QUrl, Syndication::FeedPtr> availableFeeds = \
NewsFeedManager::self()->availableFeeds(); +    QMap<QUrl, \
Syndication::FeedPtr>::ConstIterator it = availableFeeds.find( item->text() \
); +    if ( it == availableFeeds.end() ) {
+        kDebug( 500 ) << "Don't have this item " << item->text();
+        return;
+    }
+
+    Syndication::FeedPtr feed = *it;
+    ui.feedTitleLabel->setText( feed->title() );
+    ui.feedUrlLabel->setText( feed->link() );
+    ui.feedDescriptionLabel->setText( feed->description() );
+
+}
+
+void FeedSettingsWidget::addButtonClicked()
+{
+     bool ok;
+     QString url = QInputDialog::getText( this, i18n( "New Newsfeed" ),
+                                          i18n( "Enter the Address (URL) \
of the Newsfeed to be added:" ), +                                          \
QLineEdit::Normal, +                                          QString(),
+                                          &ok );
+
+     if ( ok && !url.isEmpty() ) {
+         NewsFeedManager::self()->updateFeed( url );
+         m_downloadMessageBox = new QProgressDialog( i18n( "Please wait \
while the newsfeed is downloaded..." ), +                                   \
i18n( "Cancel" ), +                                                     0,
+                                                     0,
+                                                     this );
+         m_downloadMessageBox->exec();
+     }
+}
+
+void FeedSettingsWidget::removeButtonClicked()
+{
+    int row = ui.feedListWidget->currentRow();
+    delete ui.feedListWidget->takeItem( row );
+
+    const int remainingItems = ui.feedListWidget->count();
+    if ( remainingItems > 0 ) {
+        if ( row == remainingItems ) {
+            row = remainingItems - 1;
+        }
+        ui.feedListWidget->setCurrentRow( row );
+    }
+}
+
+
+void FeedSettingsWidget::feedLoaded( const QUrl &url )
+{
+    delete m_downloadMessageBox;
+    m_downloadMessageBox = 0;
+
+    QListWidgetItem *item = new QListWidgetItem( url.toString() );
+    ui.feedListWidget->addItem( item );
+    ui.feedListWidget->setCurrentItem( item );
+}
+
 #include "feedsettingswidget.moc"
 
--- trunk/KDE/kdenetwork/knewsticker/feedsettingswidget.h #731540:731541
@@ -5,14 +5,26 @@
 
 #include <QWidget>
 
+class QProgressDialog;
+class QListWidgetItem;
+
 class FeedSettingsWidget : public QWidget
 {
     Q_OBJECT
 public:
     FeedSettingsWidget( QWidget *parent );
 
+    QStringList feedUrls() const;
+
+private Q_SLOTS:
+    void feedItemChanged();
+    void addButtonClicked();
+    void removeButtonClicked();
+    void feedLoaded( const QUrl &url );
+
 private:
     Ui::FeedSettings ui;
+    QProgressDialog *m_downloadMessageBox;
 };
 
 #endif // !defined(FEEDSETTINGSWIDGET_H)
--- trunk/KDE/kdenetwork/knewsticker/knewsticker.cpp #731540:731541
@@ -168,11 +168,19 @@
     }
     dlg.addPage( page, i18n( "Appearance" ) );
 
-    dlg.addPage( new FeedSettingsWidget( 0 ), i18n( "Feed Access" ) );
+    FeedSettingsWidget *feedSettingsWidget = new FeedSettingsWidget( 0 );
+    dlg.addPage( feedSettingsWidget, i18n( "Feed Access" ) );
 
     QFont origFont = Settings::font();
+    const QStringList origFeedUrls = Settings::feedUrls();
 
     if ( dlg.exec() == QDialog::Accepted ) {
+        Settings::setFeedUrls( feedSettingsWidget->feedUrls() );
+
+        if ( Settings::feedUrls() != origFeedUrls ) {
+            updateFeeds();
+        }
+
         if ( Settings::font() != origFont ) {
             relayoutItems();
         }
--- trunk/KDE/kdenetwork/knewsticker/newsfeedmanager.cpp #731540:731541
@@ -39,12 +39,17 @@
 {
     m_availableFeeds.clear();
     foreach ( const QUrl &url, m_subscriptions ) {
-        Loader *loader = Loader::create( this, SLOT( loaderFinished( \
                Syndication::Loader *, Syndication::FeedPtr, \
                Syndication::ErrorCode ) ) );
-        m_activeLoaders[ loader ] = url;
-        loader->loadFrom( url );
+        updateFeed( url );
     }
 }
 
+void NewsFeedManager::updateFeed( const QUrl &url )
+{
+    Loader *loader = Loader::create( this, SLOT( loaderFinished( \
Syndication::Loader *, Syndication::FeedPtr, Syndication::ErrorCode ) ) ); \
+    m_activeLoaders[ loader ] = url; +    loader->loadFrom( url );
+}
+
 const QMap<QUrl, FeedPtr> &NewsFeedManager::availableFeeds() const
 {
     return m_availableFeeds;
--- trunk/KDE/kdenetwork/knewsticker/newsfeedmanager.h #731540:731541
@@ -29,6 +29,7 @@
 
 public Q_SLOTS:
     void update();
+    void updateFeed( const QUrl &url );
 
 Q_SIGNALS:
     void feedLoaded( const QUrl &url );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic