rssguard/src/librssguard/core/messagesproxymodel.h
2022-04-22 20:34:30 +02:00

69 lines
2.2 KiB
C++

// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef MESSAGESPROXYMODEL_H
#define MESSAGESPROXYMODEL_H
#include <QSortFilterProxyModel>
class MessagesModel;
class Message;
class MessagesProxyModel : public QSortFilterProxyModel {
Q_OBJECT
public:
// Enum which describes basic filtering schemes
// for messages.
enum class MessageListFilter {
NoFiltering = 100,
ShowUnread = 101,
ShowImportant = 102,
ShowToday = 103,
ShowYesterday = 104,
ShowLast24Hours = 105,
ShowLast48Hours = 106,
ShowThisWeek = 107,
ShowLastWeek = 108,
ShowOnlyWithAttachments = 109,
ShowOnlyWithScore = 110
};
explicit MessagesProxyModel(MessagesModel* source_model, QObject* parent = nullptr);
virtual ~MessagesProxyModel();
QModelIndex getNextPreviousImportantItemIndex(int default_row);
QModelIndex getNextPreviousUnreadItemIndex(int default_row);
// Maps list of indexes.
QModelIndexList mapListToSource(const QModelIndexList& indexes) const;
QModelIndexList mapListFromSource(const QModelIndexList& indexes, bool deep = false) const;
void setMessageListFilter(MessageListFilter filter);
// Fix for matching indexes with respect to specifics of the message model.
virtual QModelIndexList match(const QModelIndex& start,
int role,
const QVariant& entered_value,
int hits,
Qt::MatchFlags flags) const;
// Performs sort of items.
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
private:
QModelIndex getNextImportantItemIndex(int default_row, int max_row) const;
QModelIndex getNextUnreadItemIndex(int default_row, int max_row) const;
bool filterAcceptsMessage(const Message& current_message) const;
virtual bool lessThan(const QModelIndex& left, const QModelIndex& right) const;
virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
// Source model pointer.
MessagesModel* m_sourceModel;
MessageListFilter m_filter;
};
Q_DECLARE_METATYPE(MessagesProxyModel::MessageListFilter)
#endif // MESSAGESPROXYMODEL_H