From kde-commits Wed Oct 31 23:42:22 2007 From: Frerich Raabe Date: Wed, 31 Oct 2007 23:42:22 +0000 To: kde-commits Subject: KDE/kdenetwork/knewsticker Message-Id: <1193874142.816851.15055.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=119387415128503 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 @@ - + --- trunk/KDE/kdenetwork/knewsticker/feedsettingswidget.cpp #731540:731541 @@ -1,10 +1,109 @@ #include "feedsettingswidget.h" +#include "newsfeedmanager.h" +#include "settings.h" +#include +#include + +#include + 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 availableFeeds = NewsFeedManager::self()->availableFeeds(); + QMap::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 +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 &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 );