119 lines
4.2 KiB
C++
119 lines
4.2 KiB
C++
#ifndef FEEDSMODEL_H
|
|
#define FEEDSMODEL_H
|
|
|
|
#include <QAbstractItemModel>
|
|
|
|
#include "core/messagesmodel.h"
|
|
|
|
#include <QIcon>
|
|
|
|
|
|
class FeedsModelRootItem;
|
|
class FeedsModelCategory;
|
|
class FeedsModelFeed;
|
|
|
|
typedef QList<QPair<int, FeedsModelCategory*> > CategoryAssignment;
|
|
typedef QPair<int, FeedsModelCategory*> CategoryAssignmentItem;
|
|
typedef QList<QPair<int, FeedsModelFeed*> > FeedAssignment;
|
|
typedef QPair<int, FeedsModelFeed*> FeedAssignmentItem;
|
|
|
|
class FeedsModel : public QAbstractItemModel {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
// Constructors and destructors.
|
|
explicit FeedsModel(QObject *parent = 0);
|
|
virtual ~FeedsModel();
|
|
|
|
// Model implementation.
|
|
QVariant data(const QModelIndex &index, int role) const;
|
|
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
|
QModelIndex index(int row, int column, const QModelIndex &parent) const;
|
|
QModelIndex parent(const QModelIndex &child) const;
|
|
int columnCount(const QModelIndex &parent) const;
|
|
int rowCount(const QModelIndex &parent) const;
|
|
|
|
// Feed/category manipulators.
|
|
bool removeItems(const QModelIndexList &indexes);
|
|
|
|
// Returns all (undeleted) messages for given feeds.
|
|
QList<Message> messagesForFeeds(const QList<FeedsModelFeed*> &feeds);
|
|
|
|
// Returns all categories, each pair
|
|
// consists of ID of parent item and pointer to category.
|
|
QHash<int, FeedsModelCategory*> allCategories();
|
|
|
|
// Returns categories from the subtree with given root node, each pair
|
|
// consists of ID of parent item and pointer to category.
|
|
QHash<int, FeedsModelCategory*> categoriesForItem(FeedsModelRootItem *root);
|
|
|
|
// Returns list of all feeds contained in the model.
|
|
QList<FeedsModelFeed*> allFeeds();
|
|
|
|
// Get list of feeds from tree with particular item
|
|
// as root. If root itself is a feed, then it is returned.
|
|
QList<FeedsModelFeed*> feedsForItem(FeedsModelRootItem *root);
|
|
|
|
// Returns list of feeds which belong to given indexes.
|
|
// NOTE: If index is "category", then all child feeds are contained in the
|
|
// result.
|
|
// NOTE: This is particularly useful for displaying messages of
|
|
// selected feeds.
|
|
QList<FeedsModelFeed*> feedsForIndexes(const QModelIndexList &indexes);
|
|
|
|
// Returns ALL CHILD feeds contained within single index.
|
|
QList<FeedsModelFeed*> feedsForIndex(const QModelIndex &index);
|
|
|
|
// Returns pointer to feed if it lies in given index
|
|
// or NULL if no feed lies in given index.
|
|
FeedsModelFeed *feedForIndex(const QModelIndex &index);
|
|
|
|
// Returns pointer to category if it lies in given index
|
|
// or NULL if no category lies in given index.
|
|
FeedsModelCategory *categoryForIndex(const QModelIndex &index) const;
|
|
|
|
// Returns feed/category which lies at the specified index or
|
|
// root item if index is invalid.
|
|
FeedsModelRootItem *itemForIndex(const QModelIndex &index) const;
|
|
|
|
// Returns QModelIndex on which lies given item.
|
|
QModelIndex indexForItem(FeedsModelRootItem *item) const;
|
|
|
|
// Access to root item.
|
|
FeedsModelRootItem *rootItem() const;
|
|
|
|
public slots:
|
|
// Feeds operations.
|
|
bool markFeedsRead(const QList<FeedsModelFeed*> &feeds, int read);
|
|
bool markFeedsDeleted(const QList<FeedsModelFeed*> &feeds, int deleted);
|
|
|
|
// Signals that properties (probably counts)
|
|
// of ALL items have changed.
|
|
void reloadWholeLayout();
|
|
|
|
// Signals that SOME data of this model need
|
|
// to be reloaded by ALL attached views.
|
|
// NOTE: This reloads all parent valid indexes too.
|
|
void reloadChangedLayout(QModelIndexList list);
|
|
|
|
protected:
|
|
// Returns converted ids of given feeds
|
|
// which are suitable as IN clause for SQL queries.
|
|
QStringList textualFeedIds(const QList<FeedsModelFeed*> &feeds);
|
|
|
|
// Loads feed/categories from the database.
|
|
void loadFromDatabase();
|
|
|
|
// Takes lists of feeds/categories and assembles
|
|
// them into the tree structure.
|
|
void assembleCategories(CategoryAssignment categories);
|
|
void assembleFeeds(FeedAssignment feeds);
|
|
|
|
private:
|
|
FeedsModelRootItem *m_rootItem;
|
|
QList<QString> m_headerData;
|
|
QList<QString> m_tooltipData;
|
|
QIcon m_countsIcon;
|
|
};
|
|
|
|
#endif // FEEDSMODEL_H
|