/** * @RDE_HEADER@ * DBUpdate - Exercises updates model * $Id$ * $HeadURL$ * $Author$ * Created by Iuliana Ojog, 2021-02-17 */ #pragma once #include "logger.h" #include #include #include namespace DBUpdate { struct ExerciseUpdate { qint32 id = 0; QString name; qint64 startTime = 0; qint64 endTime = 0; qint32 stateId = 0; QString schema; QString version = QStringLiteral("0.000"); QString description = QStringLiteral("no available information"); qint64 updated = 0; bool isChecked = false; }; class ExercisesModel : public QAbstractTableModel { Q_OBJECT public: enum Columns { Id = 0, Schema, Name, StartTime, EndTime, StateId, Version, Description, Updated }; explicit ExercisesModel(QObject *parent = nullptr); ~ExercisesModel(); bool initModel(const QSqlDatabase &db, const QString &version = QStringLiteral("0.00"), const QStringList &schemas = {}); QVariant data(const QModelIndex &, int) const override final; Qt::ItemFlags flags(const QModelIndex &index) const override final; bool setData(const QModelIndex &index, const QVariant &value, int role) override final; int rowCount(const QModelIndex &parent) const override final; int columnCount(const QModelIndex &parent) const override final; QVariant headerData(int section, Qt::Orientation orientation, int role) const override final; ExerciseUpdate getRowData(int row) const; bool insertRow(const ExerciseUpdate &item); QString toString(int stateId) const; QStringList getSchemasToUpdate(); const QString getLastUpdate() { return m_lastUpdate; } friend class ExercisesProxyModel; protected: private: QString m_lastUpdate = QStringLiteral("0.00"); QVector m_vecData; LOGGER_T m_logger; }; class ExercisesProxyModel final : public QSortFilterProxyModel { Q_OBJECT public: using QSortFilterProxyModel::QSortFilterProxyModel; void setSourceModel(QAbstractItemModel *sourceModel) override; protected: bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; private: ExercisesModel *m_sourceModel = nullptr; }; }