[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