#ifndef BASE_SQL_TABLE_MODEL_H #define BASE_SQL_TABLE_MODEL_H #include "table_info_sqlite.h" #include 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