68 lines
1.7 KiB
C++
68 lines
1.7 KiB
C++
#ifndef BASE_SQL_TABLE_MODEL_H
|
|
#define BASE_SQL_TABLE_MODEL_H
|
|
|
|
#include "table_info_sqlite.h"
|
|
#include <QSqlRelationalTableModel>
|
|
|
|
class BaseSqlTableModel : public QSqlRelationalTableModel {
|
|
Q_OBJECT
|
|
|
|
private:
|
|
TableInfoSQLite tableInfo_;
|
|
|
|
public:
|
|
explicit BaseSqlTableModel(QObject *parent = nullptr,
|
|
QSqlDatabase database = QSqlDatabase());
|
|
|
|
virtual ~BaseSqlTableModel() = default;
|
|
|
|
virtual QVariant data(const QModelIndex &index,
|
|
int role = Qt::DisplayRole) const override;
|
|
|
|
virtual void setTable(const QString &databaseTableName) override;
|
|
|
|
virtual inline QString columnName(int index) const;
|
|
|
|
virtual inline QStringList columnNames() const;
|
|
|
|
virtual inline bool isCompleteDatabaseFiltering() const = 0;
|
|
|
|
virtual inline int columnIndex(const QString &columnName) const;
|
|
|
|
void resetFilter();
|
|
|
|
void setMultiColumnFilter(const QString &filter);
|
|
|
|
protected:
|
|
virtual QString createMultiColumnFilter(const QString &filter) const;
|
|
|
|
public slots:
|
|
// WARNING: I was too lazy and decided that I could do with one slot
|
|
|
|
// Refreshes the whole table
|
|
bool refreshAll();
|
|
|
|
// Here can be additional slots
|
|
// refreshByRowNumber(int row) = 0;
|
|
// refreshRange(int from, int to) = 0;
|
|
// refreshByFilter(QString filter) = 0;
|
|
// etc
|
|
|
|
private:
|
|
QString createUpdateFilterMessage(const QString &filter) const;
|
|
};
|
|
|
|
QString BaseSqlTableModel::columnName(int index) const {
|
|
return tableInfo_.columnName(index);
|
|
}
|
|
|
|
QStringList BaseSqlTableModel::columnNames() const {
|
|
return tableInfo_.columnNames();
|
|
}
|
|
|
|
int BaseSqlTableModel::columnIndex(const QString &columnName) const {
|
|
return tableInfo_.columnIndex(columnName);
|
|
}
|
|
|
|
#endif // BASE_SQL_TABLE_MODEL_H
|