Add possibility to filter by more than one criteria at a time

This new version of the TagFilterSortModel actually accepts
*any* new MultiFilterInterface.

So, how to use it to create a new filter:

Implement a class that inherits from MultiFilterInterface

Implement the filterRow method

TagFilterSortModel::instance->add( myClass );

and you are done.

[Dirk Hohndel: removed some debug code and did whitespace cleanup]

Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Tomaz Canabrava 2014-10-01 16:23:02 -03:00 committed by Dirk Hohndel
parent 28800622f0
commit e0b60167f2
5 changed files with 86 additions and 19 deletions

View file

@ -417,13 +417,19 @@ private:
QStringList languages;
};
class TagFilterModel : public QStringListModel {
class MultiFilterInterface {
public:
virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const = 0;
};
class TagFilterModel : public QStringListModel, public MultiFilterInterface{
Q_OBJECT
public:
static TagFilterModel *instance();
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual bool filterRow(int source_row, const QModelIndex &source_parent, QAbstractItemModel *sourceModel) const;
bool *checkState;
bool anyChecked;
public
@ -437,7 +443,14 @@ private:
class TagFilterSortModel : public QSortFilterProxyModel {
Q_OBJECT
public:
TagFilterSortModel(QObject *parent = 0);
static TagFilterSortModel *instance();
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
void addFilterModel(MultiFilterInterface *model);
void removeFilterModel(MultiFilterInterface *model);
public slots:
void myInvalidate();
private:
TagFilterSortModel(QObject *parent = 0);
QList<MultiFilterInterface*> models;
};
#endif // MODELS_H