Feeds/categories can be sorted by "item" counts/alphabetically + sorting is dynamic for feeds/categories.

This commit is contained in:
Martin Rotter 2013-12-19 11:35:17 +01:00
parent 11d28da3bd
commit 4f6cf19e3f
6 changed files with 39 additions and 7 deletions

View File

@ -31,6 +31,17 @@ QVariant FeedsModelStandardCategory::data(int column, int role) const {
return QVariant();
}
case Qt::EditRole:
if (column == FDS_MODEL_TITLE_INDEX) {
return m_title;
}
else if (column == FDS_MODEL_COUNTS_INDEX) {
return countOfUnreadMessages();
}
else {
return QVariant();
}
case Qt::DisplayRole:
if (column == FDS_MODEL_TITLE_INDEX) {
return QString("%1%2").arg(m_title, "-C");

View File

@ -80,6 +80,20 @@ QVariant FeedsModelStandardFeed::data(int column, int role) const {
else if (column == FDS_MODEL_COUNTS_INDEX) {
return QString("(%1)").arg(QString::number(countOfUnreadMessages()));
}
else {
return QVariant();
}
case Qt::EditRole:
if (column == FDS_MODEL_TITLE_INDEX) {
return m_title;
}
else if (column == FDS_MODEL_COUNTS_INDEX) {
return countOfUnreadMessages();
}
else {
return QVariant();
}
case Qt::DecorationRole:
return column == FDS_MODEL_TITLE_INDEX ?

View File

@ -3,6 +3,7 @@
#include "core/feedsmodelcategory.h"
#include "core/feedsmodelfeed.h"
#include "core/feedsmodelrootitem.h"
#include "core/defs.h"
FeedsProxyModel::FeedsProxyModel(QObject *parent)
@ -37,12 +38,20 @@ bool FeedsProxyModel::lessThan(const QModelIndex &left,
// NOTE: Here we want to accomplish that ALL
// categories are queued one after another and all
// feeds are queued one after another too.
// Moreover, sort everything alphabetically.
// Moreover, sort everything alphabetically or
// by item counts, depending on the sort column.
if (left_item->kind() == right_item->kind()) {
// Both items are feeds or both items are categories.
if (left.column() == FDS_MODEL_COUNTS_INDEX) {
// User wants to sort according to counts.
return left_item->countOfUnreadMessages() < right_item->countOfUnreadMessages();
}
else {
// In other cases, sort by title.
return left_item->title() < right_item->title();
}
}
else if (left_item->kind() == FeedsModelRootItem::Feed) {
// Left item is feed, right item is category.
return false;

View File

@ -418,10 +418,6 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
}
}
bool MessagesModel::switchAllMessageImportance() {
return false;
}
bool MessagesModel::setAllMessagesDeleted(int deleted) {
QSqlDatabase db_handle = database();

View File

@ -70,7 +70,6 @@ class MessagesModel : public QSqlTableModel {
// of many messages via DIRECT SQL calls.
// List of loaded feed ids is used for WHERE clause.
// Model is reset after one of these methods is applied.
bool switchAllMessageImportance();
bool setAllMessagesDeleted(int deleted);
bool setAllMessagesRead(int read);

View File

@ -30,16 +30,19 @@ class MessagesView : public QTreeView {
void openSelectedSourceMessagesInternally();
void openSelectedMessagesInternally();
// Works with SELECTED messages only.
void setSelectedMessagesReadStatus(int read);
void markSelectedMessagesRead();
void markSelectedMessagesUnread();
void deleteSelectedMessages();
void switchSelectedMessagesImportance();
// Sets ALL (unfiltered) messages read.
void setAllMessagesReadStatus(int read);
void setAllMessagesRead();
void setAllMessagesUnread();
// Sets ALL (unfiltered) messages deleted.
void setAllMessagesDeleteStatus(int deleted);
void setAllMessagesDeleted();