From 7e252d3fbd36eb33547a9eaff7e0563cea657994 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sat, 22 Aug 2009 02:19:40 +0000 Subject: [PATCH] - COSMETIC: Redesigned RSS tab to improve usability --- Changelog | 1 + src/Icons/oxygen/view-refresh.png | Bin 0 -> 2182 bytes src/Icons/refresh.png | Bin 948 -> 0 bytes src/icons.qrc | 2 +- src/rss.ui | 200 +++++++++++++++--------------- src/rss_imp.cpp | 128 +++++++++---------- src/rss_imp.h | 8 +- 7 files changed, 158 insertions(+), 181 deletions(-) create mode 100644 src/Icons/oxygen/view-refresh.png delete mode 100644 src/Icons/refresh.png diff --git a/Changelog b/Changelog index f3cdbd5ca..56d9e7cbf 100644 --- a/Changelog +++ b/Changelog @@ -8,6 +8,7 @@ - FEATURE: RSS Feeds URLs can now be copied to clipboard - FEATURE: If a torrent contains a torrent file, process downloaded torrent file too - BUGFIX: torrent resume code rewrited + - COSMETIC: Redesigned RSS tab to improve usability * Sun Aug 21 2009 - Christophe Dumez - v1.4.1 - BUGFIX: Fix problems when changing save path (if using temporary download folder) diff --git a/src/Icons/oxygen/view-refresh.png b/src/Icons/oxygen/view-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..afa2a9d77403a12cf6808fd4e551f8582e2599d6 GIT binary patch literal 2182 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 W+B)eg9y&Du0000Icons/gnome-shutdown.png Icons/rss32.png Icons/money.png - Icons/refresh.png Icons/sphere2.png Icons/downarrow.png Icons/url.png @@ -74,6 +73,7 @@ Icons/flags/italy.png Icons/flags/south_korea.png Icons/flags/japan.png + Icons/oxygen/view-refresh.png Icons/oxygen/file.png Icons/oxygen/time.png Icons/oxygen/edit-paste.png diff --git a/src/rss.ui b/src/rss.ui index fba0605a8..febb7d24f 100644 --- a/src/rss.ui +++ b/src/rss.ui @@ -13,110 +13,46 @@ Search - + Qt::Horizontal - - - - 6 - - - 0 - + + - - - Qt::CustomContextMenu - - - QAbstractItemView::ExtendedSelection - - - 2 - - - - RSS streams: - - - - - 2 - - - - - - - - 6 - - - 0 - + - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 55 - 32 - - - - Delete selected streams - + - + New subscription - - - 32 - 32 - + + + :/Icons/oxygen/subscribe.png:/Icons/oxygen/subscribe.png + + + Qt::ToolButtonTextUnderIcon - - - - 32 - 32 - - - - Refresh RSS streams - + - + Mark items read - - - 32 - 32 - + + + :/Icons/oxygen/button_ok.png:/Icons/oxygen/button_ok.png + + + Qt::ToolButtonTextUnderIcon - + 32 @@ -124,17 +60,24 @@ - Add a new RSS stream + Refresh RSS streams - + Update all + + + + :/Icons/oxygen/view-refresh.png:/Icons/oxygen/view-refresh.png - 55 - 32 + 24 + 24 + + Qt::ToolButtonTextUnderIcon + @@ -152,9 +95,30 @@ + + + + Qt::CustomContextMenu + + + QAbstractItemView::ExtendedSelection + + + 2 + + + + RSS streams: + + + + + 2 + + + + - listStreams - @@ -196,34 +160,64 @@ p, li { white-space: pre-wrap; } - + + + + :/Icons/oxygen/unsubscribe16.png:/Icons/oxygen/unsubscribe16.png + - Delete + Delete feed - + + + + :/Icons/oxygen/edit_clear.png:/Icons/oxygen/edit_clear.png + - Rename + Rename feed - + + + + :/Icons/oxygen/view-refresh.png:/Icons/oxygen/view-refresh.png + - Refresh + Update feed - + + + + :/Icons/oxygen/subscribe16.png:/Icons/oxygen/subscribe16.png + - Add RSS stream + New subscription - + + + + :/Icons/oxygen/view-refresh.png:/Icons/oxygen/view-refresh.png + - Refresh all streams + Update all feeds + + + Update all feeds - + + + + :/Icons/oxygen/button_ok.png:/Icons/oxygen/button_ok.png + - Mark all as read + Mark items read + + + Mark items read diff --git a/src/rss_imp.cpp b/src/rss_imp.cpp index c7a9e42ac..fdda79856 100644 --- a/src/rss_imp.cpp +++ b/src/rss_imp.cpp @@ -43,17 +43,21 @@ #include "bittorrent.h" // display a right-click menu -void RSSImp::displayRSSListMenu(const QPoint&){ +void RSSImp::displayRSSListMenu(const QPoint& pos){ + if(!listStreams->indexAt(pos).isValid()) { + // No item under the mouse, clear selection + listStreams->clearSelection(); + } QMenu myFinishedListMenu(this); QList selectedItems = listStreams->selectedItems(); if(selectedItems.size() > 0) { - myFinishedListMenu.addAction(actionRefresh); - myFinishedListMenu.addAction(actionMark_all_as_read); + myFinishedListMenu.addAction(actionUpdate_feed); + myFinishedListMenu.addAction(actionMark_items_read); myFinishedListMenu.addSeparator(); - myFinishedListMenu.addAction(actionDelete); if(selectedItems.size() == 1) { - myFinishedListMenu.addAction(actionRename); + myFinishedListMenu.addAction(actionRename_feed); } + myFinishedListMenu.addAction(actionDelete_feed); myFinishedListMenu.addSeparator(); myFinishedListMenu.addAction(actionCopy_feed_URL); if(selectedItems.size() == 1) { @@ -62,8 +66,8 @@ void RSSImp::displayRSSListMenu(const QPoint&){ } }else{ - myFinishedListMenu.addAction(actionCreate); - myFinishedListMenu.addAction(actionRefreshAll); + myFinishedListMenu.addAction(actionNew_subscription); + myFinishedListMenu.addAction(actionUpdate_all_feeds); } myFinishedListMenu.exec(QCursor::pos()); } @@ -79,8 +83,36 @@ void RSSImp::displayItemsListMenu(const QPoint&){ } // add a stream by a button -void RSSImp::on_addStream_button_clicked() { - createStream(); +void RSSImp::on_newFeedButton_clicked() { + bool ok; + QString clip_txt = qApp->clipboard()->text(); + QString default_url = "http://"; + if(clip_txt.startsWith("http://", Qt::CaseInsensitive) || clip_txt.startsWith("https://", Qt::CaseInsensitive) || clip_txt.startsWith("ftp://", Qt::CaseInsensitive)) { + default_url = clip_txt; + } + QString newUrl = QInputDialog::getText(this, tr("Please type a rss stream url"), tr("Stream URL:"), QLineEdit::Normal, default_url, &ok); + if(ok) { + newUrl = newUrl.trimmed(); + if(!newUrl.isEmpty()){ + RssStream *stream = rssmanager->addStream(newUrl); + if(stream == 0){ + // Already existing + QMessageBox::warning(this, tr("qBittorrent"), + tr("This rss feed is already in the list."), + QMessageBox::Ok); + return; + } + QTreeWidgetItem* item = new QTreeWidgetItem(listStreams); + item->setText(0, stream->getAliasOrUrl() + QString::fromUtf8(" (0)")); + item->setText(1, stream->getUrl()); + item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); + item->setToolTip(0, QString::fromUtf8("")+tr("Description:")+QString::fromUtf8(" ")+stream->getDescription()+QString::fromUtf8("
")+tr("url:")+QString::fromUtf8(" ")+stream->getUrl()+QString::fromUtf8("
")+tr("Last refresh:")+QString::fromUtf8(" ")+stream->getLastRefreshElapsedString()); + if(listStreams->topLevelItemCount() == 1) + selectFirstFeed(); + rssmanager->refresh(newUrl); + rssmanager->saveStreamList(); + } + } } // delete a stream by a button @@ -112,8 +144,12 @@ void RSSImp::on_delStream_button_clicked() { } // refresh all streams by a button -void RSSImp::on_refreshAll_button_clicked() { - refreshAllStreams(); +void RSSImp::on_updateAllButton_clicked() { + unsigned int nbFeeds = listStreams->topLevelItemCount(); + for(unsigned int i=0; itopLevelItem(i)->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); + rssmanager->refreshAll(); + updateLastRefreshedTimeForStreams(); } void RSSImp::downloadTorrent() { @@ -174,7 +210,7 @@ void RSSImp::showFeedDownloader() { new FeedDownloaderDlg(this, item->text(1), rssmanager->getFeed(item->text(1))->getAliasOrUrl(), BTSession); } -void RSSImp::on_actionMark_all_as_read_triggered() { +void RSSImp::on_markReadButton_clicked() { QList selectedItems = listStreams->selectedItems(); QTreeWidgetItem* item; foreach(item, selectedItems){ @@ -187,15 +223,6 @@ void RSSImp::on_actionMark_all_as_read_triggered() { refreshNewsList(listStreams->currentItem()); } -//right-click somewhere, refresh all the streams -void RSSImp::refreshAllStreams() { - unsigned int nbFeeds = listStreams->topLevelItemCount(); - for(unsigned int i=0; itopLevelItem(i)->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); - rssmanager->refreshAll(); - updateLastRefreshedTimeForStreams(); -} - void RSSImp::fillFeedsList() { QList feeds = rssmanager->getRssFeeds(); RssStream* stream; @@ -208,39 +235,6 @@ void RSSImp::fillFeedsList() { } } -//right-click, register a new stream -void RSSImp::createStream() { - bool ok; - QString clip_txt = qApp->clipboard()->text(); - QString default_url = "http://"; - if(clip_txt.startsWith("http://", Qt::CaseInsensitive) || clip_txt.startsWith("https://", Qt::CaseInsensitive) || clip_txt.startsWith("ftp://", Qt::CaseInsensitive)) { - default_url = clip_txt; - } - QString newUrl = QInputDialog::getText(this, tr("Please type a rss stream url"), tr("Stream URL:"), QLineEdit::Normal, default_url, &ok); - if(ok) { - newUrl = newUrl.trimmed(); - if(!newUrl.isEmpty()){ - RssStream *stream = rssmanager->addStream(newUrl); - if(stream == 0){ - // Already existing - QMessageBox::warning(this, tr("qBittorrent"), - tr("This rss feed is already in the list."), - QMessageBox::Ok); - return; - } - QTreeWidgetItem* item = new QTreeWidgetItem(listStreams); - item->setText(0, stream->getAliasOrUrl() + QString::fromUtf8(" (0)")); - item->setText(1, stream->getUrl()); - item->setData(0,Qt::DecorationRole, QVariant(QIcon(":/Icons/loading.png"))); - item->setToolTip(0, QString::fromUtf8("")+tr("Description:")+QString::fromUtf8(" ")+stream->getDescription()+QString::fromUtf8("
")+tr("url:")+QString::fromUtf8(" ")+stream->getUrl()+QString::fromUtf8("
")+tr("Last refresh:")+QString::fromUtf8(" ")+stream->getLastRefreshElapsedString()); - if(listStreams->topLevelItemCount() == 1) - selectFirstFeed(); - rssmanager->refresh(newUrl); - rssmanager->saveStreamList(); - } - } -} - void RSSImp::updateLastRefreshedTimeForStreams() { unsigned int nbFeeds = listStreams->topLevelItemCount(); for(unsigned int i=0; isetIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/subscribe.png"))); - delStream_button->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/unsubscribe.png"))); - refreshAll_button->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png"))); - actionMark_all_as_read->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/button_ok.png"))); - // icons of right-click menu - actionDelete->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/unsubscribe16.png"))); - actionRename->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/log.png"))); - actionRefresh->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png"))); - actionCreate->setIcon(QIcon(QString::fromUtf8(":/Icons/oxygen/subscribe16.png"))); - actionRefreshAll->setIcon(QIcon(QString::fromUtf8(":/Icons/refresh.png"))); - // Hide second column (url) listStreams->hideColumn(1); @@ -384,14 +366,16 @@ RSSImp::RSSImp(bittorrent *BTSession) : QWidget(), BTSession(BTSession){ connect(listStreams, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayRSSListMenu(const QPoint&))); connect(listNews, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(displayItemsListMenu(const QPoint&))); - connect(actionDelete, SIGNAL(triggered()), this, SLOT(on_delStream_button_clicked())); - connect(actionRename, SIGNAL(triggered()), this, SLOT(renameStream())); - connect(actionRefresh, SIGNAL(triggered()), this, SLOT(refreshSelectedStreams())); - connect(actionCreate, SIGNAL(triggered()), this, SLOT(createStream())); - connect(actionRefreshAll, SIGNAL(triggered()), this, SLOT(refreshAllStreams())); + // Feeds list actions + connect(actionDelete_feed, SIGNAL(triggered()), this, SLOT(on_delStream_button_clicked())); + connect(actionRename_feed, SIGNAL(triggered()), this, SLOT(renameStream())); + connect(actionUpdate_feed, SIGNAL(triggered()), this, SLOT(refreshSelectedStreams())); + connect(actionNew_subscription, SIGNAL(triggered()), this, SLOT(on_newFeedButton_clicked())); + connect(actionUpdate_all_feeds, SIGNAL(triggered()), this, SLOT(on_updateAllButton_clicked())); connect(actionCopy_feed_URL, SIGNAL(triggered()), this, SLOT(copySelectedFeedsURL())); connect(actionRSS_feed_downloader, SIGNAL(triggered()), this, SLOT(showFeedDownloader())); - + connect(actionMark_items_read, SIGNAL(triggered()), this, SLOT(on_markReadButton_clicked())); + // News list actions connect(actionOpen_news_URL, SIGNAL(triggered()), this, SLOT(openNewsUrl())); connect(actionDownload_torrent, SIGNAL(triggered()), this, SLOT(downloadTorrent())); diff --git a/src/rss_imp.h b/src/rss_imp.h index f36358a81..f8177663e 100644 --- a/src/rss_imp.h +++ b/src/rss_imp.h @@ -51,15 +51,14 @@ class RSSImp : public QWidget, public Ui::RSS{ void on_delStream_button_clicked(); protected slots: - void on_addStream_button_clicked(); - void on_refreshAll_button_clicked(); + void on_newFeedButton_clicked(); + void on_updateAllButton_clicked(); + void on_markReadButton_clicked(); void displayRSSListMenu(const QPoint&); void displayItemsListMenu(const QPoint&); void renameStream(); void refreshSelectedStreams(); void copySelectedFeedsURL(); - void createStream(); - void refreshAllStreams(); void refreshNewsList(QTreeWidgetItem* item); void refreshTextBrowser(QListWidgetItem *); void updateLastRefreshedTimeForStreams(); @@ -70,7 +69,6 @@ class RSSImp : public QWidget, public Ui::RSS{ void fillFeedsList(); void selectFirstFeed(); void updateFeedNbNews(QString url); - void on_actionMark_all_as_read_triggered(); void saveSlidersPosition(); void restoreSlidersPosition(); void showFeedDownloader();