rssguard/src/librssguard/core/feedsproxymodel.h
2023-11-10 12:29:27 +01:00

84 lines
2.8 KiB
C++

// For license of this file, see <project-root-folder>/LICENSE.md.
#ifndef FEEDSPROXYMODEL_H
#define FEEDSPROXYMODEL_H
#include <QSortFilterProxyModel>
#include "services/abstract/rootitem.h"
class FeedsModel;
class FeedsView;
class FeedsProxyModel : public QSortFilterProxyModel {
Q_OBJECT
public:
explicit FeedsProxyModel(FeedsModel* source_model, QObject* parent = nullptr);
virtual ~FeedsProxyModel();
virtual bool canDropMimeData(const QMimeData* data,
Qt::DropAction action,
int row,
int column,
const QModelIndex& parent) const;
virtual bool dropMimeData(const QMimeData* data,
Qt::DropAction action,
int row,
int column,
const QModelIndex& parent);
virtual void sort(int column, Qt::SortOrder order = Qt::SortOrder::AscendingOrder);
// Returns index list of items which "match" given value.
// Used for finding items according to entered title text.
virtual QModelIndexList match(const QModelIndex& start,
int role,
const QVariant& value,
int hits,
Qt::MatchFlags flags) const;
// Maps list of indexes.
QModelIndexList mapListToSource(const QModelIndexList& indexes) const;
bool showUnreadOnly() const;
void setShowUnreadOnly(bool show_unread_only);
const RootItem* selectedItem() const;
void setSelectedItem(const RootItem* selected_item);
void setView(FeedsView* newView);
bool sortAlphabetically() const;
void setSortAlphabetically(bool sort_alphabetically);
public slots:
void invalidateReadFeedsFilter(bool set_new_value = false, bool show_unread_only = false);
signals:
void expandAfterFilterIn(QModelIndex source_idx) const;
// There was some drag/drop operation, notify view about this.
void requireItemValidationAfterDragDrop(const QModelIndex& source_index);
protected:
virtual bool lessThan(const QModelIndex& left, const QModelIndex& right) const;
virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
private:
virtual bool filterAcceptsRowInternal(int source_row, const QModelIndex& source_parent) const;
// Source model pointer.
FeedsModel* m_sourceModel;
FeedsView* m_view;
const RootItem* m_selectedItem;
bool m_showUnreadOnly;
bool m_sortAlphabetically;
bool m_showNodeUnread;
bool m_showNodeProbes;
bool m_showNodeLabels;
bool m_showNodeImportant;
QList<RootItem::Kind> m_priorities;
};
#endif // FEEDSPROXYMODEL_H