rssguard/src/gui/feedsview.cpp
2013-12-28 11:22:00 +01:00

123 lines
3.5 KiB
C++

#include "gui/feedsview.h"
#include "core/defs.h"
#include "core/feedsmodelfeed.h"
#include "core/feedsmodel.h"
#include "core/feedsproxymodel.h"
#include "core/feedsmodelrootitem.h"
#include <QHeaderView>
FeedsView::FeedsView(QWidget *parent) : QTreeView(parent) {
m_proxyModel = new FeedsProxyModel(this);
m_sourceModel = m_proxyModel->sourceModel();
setModel(m_proxyModel);
setupAppearance();
}
FeedsView::~FeedsView() {
qDebug("Destroying FeedsView instance.");
}
void FeedsView::setSortingEnabled(bool enable) {
QTreeView::setSortingEnabled(enable);
header()->setSortIndicatorShown(false);
}
QList<FeedsModelFeed *> FeedsView::selectedFeeds() const {
QModelIndexList selection = selectionModel()->selectedRows();
QModelIndexList mapped_selection = m_proxyModel->mapListToSource(selection);
return m_sourceModel->feedsForIndexes(mapped_selection);
}
QList<FeedsModelFeed *> FeedsView::allFeeds() const {
return m_sourceModel->getAllFeeds();
}
void FeedsView::setSelectedFeedsClearStatus(int clear) {
m_sourceModel->markFeedsDeleted(selectedFeeds(), clear);
updateCountsOfSelectedFeeds();
emit feedsNeedToBeReloaded(1);
}
void FeedsView::clearSelectedFeeds() {
setSelectedFeedsClearStatus(1);
}
void FeedsView::markSelectedFeedsReadStatus(int read) {
m_sourceModel->markFeedsRead(selectedFeeds(), read);
updateCountsOfSelectedFeeds(false);
emit feedsNeedToBeReloaded(read);
}
void FeedsView::markSelectedFeedsRead() {
markSelectedFeedsReadStatus(1);
}
void FeedsView::markSelectedFeedsUnread() {
markSelectedFeedsReadStatus(0);
}
void FeedsView::updateCountsOfSelectedFeeds(bool update_total_too) {
foreach (FeedsModelFeed *feed, selectedFeeds()) {
feed->updateCounts(update_total_too);
}
// Make sure that selected view reloads changed indexes.
m_sourceModel->reloadChangedLayout(m_proxyModel->mapListToSource(selectionModel()->selectedRows()));
}
void FeedsView::updateCountsOfAllFeeds(bool update_total_too) {
foreach (FeedsModelFeed *feed, allFeeds()) {
feed->updateCounts(update_total_too);
}
// Make sure that all views reloads its data.
m_sourceModel->reloadWholeLayout();
}
void FeedsView::setupAppearance() {
#if QT_VERSION >= 0x050000
// Setup column resize strategies.
header()->setSectionResizeMode(FDS_MODEL_TITLE_INDEX, QHeaderView::Stretch);
header()->setSectionResizeMode(FDS_MODEL_COUNTS_INDEX, QHeaderView::ResizeToContents);
#else
// Setup column resize strategies.
header()->setResizeMode(FDS_MODEL_TITLE_INDEX, QHeaderView::Stretch);
header()->setResizeMode(FDS_MODEL_COUNTS_INDEX, QHeaderView::ResizeToContents);
#endif
header()->setStretchLastSection(false);
setUniformRowHeights(true);
setAcceptDrops(false);
setDragEnabled(false);
setSortingEnabled(true);
setIndentation(10);
sortByColumn(0, Qt::AscendingOrder);
setDragDropMode(QAbstractItemView::NoDragDrop);
setAllColumnsShowFocus(true);
setSelectionMode(QAbstractItemView::ExtendedSelection);
// TODO: Check if stylesheets or drawBranches(...) reimplementation
// is better for hiding the branches of the view.
setRootIsDecorated(false);
}
void FeedsView::selectionChanged(const QItemSelection &selected,
const QItemSelection &deselected) {
QTreeView::selectionChanged(selected, deselected);
m_selectedFeeds.clear();
foreach (FeedsModelFeed *feed, selectedFeeds()) {
m_selectedFeeds << feed->id();
}
emit feedsSelected(m_selectedFeeds);
}