mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
filter: add filter constraint model
Add a model that keeps track of a list of filter constraint and makes them accessible from Qt. Sadly, this is mostly repetitive boiler-plate code, but this is due to Qt's model/view-API, which is a perfect example of how *not* to design a reasonable modern API. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
634152ae43
commit
af9d379a41
6 changed files with 261 additions and 2 deletions
58
qt-models/filterconstraintmodel.h
Normal file
58
qt-models/filterconstraintmodel.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
#ifndef FILTERCONSTRAINTMODEL_H
|
||||
#define FILTERCONSTRAINTMODEL_H
|
||||
|
||||
#include "core/filterconstraint.h"
|
||||
#include <QAbstractTableModel>
|
||||
#include <vector>
|
||||
|
||||
class FilterConstraintModel : public QAbstractListModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum Roles {
|
||||
TYPE_ROLE = Qt::UserRole + 1, // enum filter_constraint_type cast to int
|
||||
IS_STAR_WIDGET_ROLE, // represent as a star widget
|
||||
HAS_DATE_WIDGET_ROLE, // has a date widget
|
||||
HAS_TIME_WIDGET_ROLE, // has a time widget
|
||||
NUM_DECIMALS_ROLE, // number of decimal places for numeric data
|
||||
NEGATE_COMBO_ROLE, // combo box entries for negate
|
||||
STRING_MODE_COMBO_ROLE, // combo box entries for string mode or empty list if no string mode
|
||||
RANGE_MODE_COMBO_ROLE, // combo box entries for range mode or empty list if no range mode
|
||||
MULTIPLE_CHOICE_LIST_ROLE, // list of translated multiple-choice items
|
||||
STRING_MODE_ROLE, // enum filter_constraint_string_mode_role cast to int
|
||||
RANGE_MODE_ROLE, // enum filter_constraint_range_mode cast to int
|
||||
TYPE_DISPLAY_ROLE, // type for display (i.e. translated)
|
||||
NEGATE_DISPLAY_ROLE, // negate flag for display (i.e. translated)
|
||||
STRING_MODE_DISPLAY_ROLE, // string mode for display (i.e. translated)
|
||||
RANGE_MODE_DISPLAY_ROLE, // range mode for display (i.e. translated)
|
||||
NEGATE_INDEX_ROLE, // negate index in combo box
|
||||
TYPE_INDEX_ROLE, // type index in combo box
|
||||
STRING_MODE_INDEX_ROLE, // string mode index in combo box
|
||||
RANGE_MODE_INDEX_ROLE, // range mode index in combo box
|
||||
UNIT_ROLE, // unit, if any
|
||||
STRING_ROLE, // string data
|
||||
INTEGER_FROM_ROLE,
|
||||
INTEGER_TO_ROLE,
|
||||
FLOAT_FROM_ROLE,
|
||||
FLOAT_TO_ROLE,
|
||||
TIMESTAMP_FROM_ROLE,
|
||||
TIMESTAMP_TO_ROLE,
|
||||
TIME_FROM_ROLE,
|
||||
TIME_TO_ROLE,
|
||||
MULTIPLE_CHOICE_ROLE
|
||||
};
|
||||
private:
|
||||
QVariant data(const QModelIndex &index, int role) const override;
|
||||
std::vector<filter_constraint> constraints;
|
||||
public:
|
||||
using QAbstractListModel::QAbstractListModel;
|
||||
~FilterConstraintModel();
|
||||
void reload(const std::vector<filter_constraint> &);
|
||||
std::vector<filter_constraint> getConstraints() const; // filters out constraints with no user input
|
||||
void addConstraint(filter_constraint_type type);
|
||||
void deleteConstraint(int row);
|
||||
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
|
||||
int rowCount(const QModelIndex &parent) const override;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue