[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