RSS: Use SharedPtr everywhere

This commit is contained in:
Christophe Dumez 2012-02-19 18:53:10 +02:00
parent a13bb06ec3
commit 50a3e4e776
18 changed files with 313 additions and 316 deletions

View file

@ -33,7 +33,7 @@
#include "rssfeed.h"
#include "iconprovider.h"
FeedListWidget::FeedListWidget(QWidget *parent, RssManager *rssmanager): QTreeWidget(parent), m_rssManager(rssmanager) {
FeedListWidget::FeedListWidget(QWidget *parent, const RssManagerPtr& rssmanager): QTreeWidget(parent), m_rssManager(rssmanager) {
setContextMenuPolicy(Qt::CustomContextMenu);
setDragDropMode(QAbstractItemView::InternalMove);
setSelectionMode(QAbstractItemView::ExtendedSelection);
@ -51,20 +51,20 @@ FeedListWidget::~FeedListWidget() {
delete m_unreadStickyItem;
}
void FeedListWidget::itemAdded(QTreeWidgetItem *item, IRssFile* file) {
void FeedListWidget::itemAdded(QTreeWidgetItem *item, const RssFilePtr& file) {
m_rssMapping[item] = file;
if(file->type() == IRssFile::FEED) {
m_feedsItems[file->id()] = item;
if (RssFeedPtr feed = qSharedPointerDynamicCast<RssFeed>(file)) {
m_feedsItems[feed->id()] = item;
}
}
void FeedListWidget::itemAboutToBeRemoved(QTreeWidgetItem *item) {
IRssFile* file = m_rssMapping.take(item);
if(file->type() == IRssFile::FEED) {
m_feedsItems.remove(file->id());
} else {
QList<RssFeed*> feeds = ((RssFolder*)file)->getAllFeeds();
foreach(RssFeed* feed, feeds) {
RssFilePtr file = m_rssMapping.take(item);
if (RssFeedPtr feed = qSharedPointerDynamicCast<RssFeed>(file)) {
m_feedsItems.remove(feed->id());
} if (RssFolderPtr folder = qSharedPointerDynamicCast<RssFolder>(file)) {
RssFeedList feeds = folder->getAllFeeds();
foreach(const RssFeedPtr& feed, feeds) {
m_feedsItems.remove(feed->id());
}
}
@ -105,7 +105,7 @@ QList<QTreeWidgetItem*> FeedListWidget::getAllOpenFolders(QTreeWidgetItem *paren
item = parent->child(i);
else
item = topLevelItem(i);
if(getItemType(item) == IRssFile::FOLDER && item->isExpanded()) {
if(isFolder(item) && item->isExpanded()) {
QList<QTreeWidgetItem*> open_subfolders = getAllOpenFolders(item);
if(!open_subfolders.empty()) {
open_folders << open_subfolders;
@ -122,7 +122,7 @@ QList<QTreeWidgetItem*> FeedListWidget::getAllFeedItems(QTreeWidgetItem* folder)
const int nbChildren = folder->childCount();
for(int i=0; i<nbChildren; ++i) {
QTreeWidgetItem *item = folder->child(i);
if(getItemType(item) == IRssFile::FEED) {
if(isFeed(item)) {
feeds << item;
} else {
feeds << getAllFeedItems(item);
@ -131,12 +131,18 @@ QList<QTreeWidgetItem*> FeedListWidget::getAllFeedItems(QTreeWidgetItem* folder)
return feeds;
}
IRssFile* FeedListWidget::getRSSItem(QTreeWidgetItem *item) const {
return m_rssMapping.value(item, 0);
RssFilePtr FeedListWidget::getRSSItem(QTreeWidgetItem *item) const {
return m_rssMapping.value(item, RssFilePtr());
}
IRssFile::FileType FeedListWidget::getItemType(QTreeWidgetItem *item) const {
return m_rssMapping.value(item)->type();
bool FeedListWidget::isFeed(QTreeWidgetItem *item) const
{
return (qSharedPointerDynamicCast<RssFeed>(m_rssMapping.value(item)) != NULL);
}
bool FeedListWidget::isFolder(QTreeWidgetItem *item) const
{
return (qSharedPointerDynamicCast<RssFolder>(m_rssMapping.value(item)) != NULL);
}
QString FeedListWidget::getItemID(QTreeWidgetItem *item) const {
@ -147,8 +153,8 @@ QTreeWidgetItem* FeedListWidget::getTreeItemFromUrl(const QString &url) const{
return m_feedsItems.value(url, 0);
}
RssFeed* FeedListWidget::getRSSItemFromUrl(const QString &url) const {
return dynamic_cast<RssFeed*>(getRSSItem(getTreeItemFromUrl(url)));
RssFeedPtr FeedListWidget::getRSSItemFromUrl(const QString &url) const {
return qSharedPointerDynamicCast<RssFeed>(getRSSItem(getTreeItemFromUrl(url)));
}
QTreeWidgetItem* FeedListWidget::currentItem() const {
@ -162,7 +168,7 @@ QTreeWidgetItem* FeedListWidget::currentFeed() const {
void FeedListWidget::updateCurrentFeed(QTreeWidgetItem* new_item) {
if(!new_item) return;
if(!m_rssMapping.contains(new_item)) return;
if((getItemType(new_item) == IRssFile::FEED) || new_item == m_unreadStickyItem)
if(isFeed(new_item) || new_item == m_unreadStickyItem)
m_currentFeed = new_item;
}
@ -171,7 +177,7 @@ void FeedListWidget::dragMoveEvent(QDragMoveEvent * event) {
if(item == m_unreadStickyItem) {
event->ignore();
} else {
if(item && getItemType(item) != IRssFile::FOLDER)
if(item && isFolder(item))
event->ignore();
else {
if(selectedItems().contains(m_unreadStickyItem)) {
@ -187,9 +193,9 @@ void FeedListWidget::dropEvent(QDropEvent *event) {
qDebug("dropEvent");
QList<QTreeWidgetItem*> folders_altered;
QTreeWidgetItem *dest_folder_item = itemAt(event->pos());
RssFolder *dest_folder;
RssFolderPtr dest_folder;
if(dest_folder_item) {
dest_folder = (RssFolder*)getRSSItem(dest_folder_item);
dest_folder = qSharedPointerCast<RssFolder>(getRSSItem(dest_folder_item));
folders_altered << dest_folder_item;
} else {
dest_folder = m_rssManager;
@ -197,7 +203,7 @@ void FeedListWidget::dropEvent(QDropEvent *event) {
QList<QTreeWidgetItem *> src_items = selectedItems();
// Check if there is not going to overwrite another file
foreach(QTreeWidgetItem *src_item, src_items) {
IRssFile *file = getRSSItem(src_item);
RssFilePtr file = getRSSItem(src_item);
if(dest_folder->hasChild(file->id())) {
emit overwriteAttempt(file->id());
return;
@ -209,7 +215,7 @@ void FeedListWidget::dropEvent(QDropEvent *event) {
if(parent_folder && !folders_altered.contains(parent_folder))
folders_altered << parent_folder;
// Actually move the file
IRssFile *file = getRSSItem(src_item);
RssFilePtr file = getRSSItem(src_item);
m_rssManager->moveFile(file, dest_folder);
}
QTreeWidget::dropEvent(event);