mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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:
parent
28800622f0
commit
e0b60167f2
5 changed files with 86 additions and 19 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue