mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
The *FilterModels had a number of of virtual functions, which only accessed members of the base class. Moreover, these functions were identical and generated with macros. Therefore, move these functions to the base class. The one excption is data(), which uses different count functions (passed as a macro parameter). Thus, introduce a virtual countDives() function and likewise move data() to the base class. A function pointer might be even more clear, but since the rest of the code/Qt relies heavily on runtime polymorphism, let's do the same here. The only macros left are those creating the singleton accessors. This could be more clearly realized by templates, but let's likewise keep it the way is. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
108 lines
2.8 KiB
C++
108 lines
2.8 KiB
C++
// SPDX-License-Identifier: GPL-2.0
|
|
#ifndef FILTERMODELS_H
|
|
#define FILTERMODELS_H
|
|
|
|
#include <QStringListModel>
|
|
#include <QSortFilterProxyModel>
|
|
#include <stdint.h>
|
|
#include <vector>
|
|
|
|
class FilterModelBase : public QStringListModel {
|
|
public:
|
|
virtual bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const = 0;
|
|
void clearFilter();
|
|
std::vector<char> checkState;
|
|
bool anyChecked;
|
|
protected:
|
|
explicit FilterModelBase(QObject *parent = 0);
|
|
void updateList(const QStringList &new_list);
|
|
virtual int countDives(const char *) const = 0;
|
|
private:
|
|
Qt::ItemFlags flags(const QModelIndex &index) const;
|
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
|
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
|
};
|
|
|
|
class TagFilterModel : public FilterModelBase {
|
|
Q_OBJECT
|
|
public:
|
|
static TagFilterModel *instance();
|
|
bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const;
|
|
public
|
|
slots:
|
|
void repopulate();
|
|
|
|
private:
|
|
explicit TagFilterModel(QObject *parent = 0);
|
|
int countDives(const char *) const;
|
|
};
|
|
|
|
class BuddyFilterModel : public FilterModelBase {
|
|
Q_OBJECT
|
|
public:
|
|
static BuddyFilterModel *instance();
|
|
bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const;
|
|
public
|
|
slots:
|
|
void repopulate();
|
|
|
|
private:
|
|
explicit BuddyFilterModel(QObject *parent = 0);
|
|
int countDives(const char *) const;
|
|
};
|
|
|
|
class LocationFilterModel : public FilterModelBase {
|
|
Q_OBJECT
|
|
public:
|
|
static LocationFilterModel *instance();
|
|
bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const;
|
|
public
|
|
slots:
|
|
void repopulate();
|
|
void changeName(const QString &oldName, const QString &newName);
|
|
void addName(const QString &newName);
|
|
|
|
private:
|
|
explicit LocationFilterModel(QObject *parent = 0);
|
|
int countDives(const char *) const;
|
|
};
|
|
|
|
class SuitsFilterModel : public FilterModelBase {
|
|
Q_OBJECT
|
|
public:
|
|
static SuitsFilterModel *instance();
|
|
bool doFilter(struct dive *d, QModelIndex &index0, QAbstractItemModel *sourceModel) const;
|
|
public
|
|
slots:
|
|
void repopulate();
|
|
|
|
private:
|
|
explicit SuitsFilterModel(QObject *parent = 0);
|
|
int countDives(const char *) const;
|
|
};
|
|
|
|
class MultiFilterSortModel : public QSortFilterProxyModel {
|
|
Q_OBJECT
|
|
public:
|
|
static MultiFilterSortModel *instance();
|
|
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const;
|
|
void addFilterModel(FilterModelBase *model);
|
|
void removeFilterModel(FilterModelBase *model);
|
|
int divesDisplayed;
|
|
public
|
|
slots:
|
|
void myInvalidate();
|
|
void clearFilter();
|
|
void startFilterDiveSite(uint32_t uuid);
|
|
void stopFilterDiveSite();
|
|
|
|
signals:
|
|
void filterFinished();
|
|
private:
|
|
MultiFilterSortModel(QObject *parent = 0);
|
|
QList<FilterModelBase *> models;
|
|
bool justCleared;
|
|
struct dive_site *curr_dive_site;
|
|
};
|
|
|
|
#endif
|