diff options
Diffstat (limited to 'qt-models/mobilelistmodel.h')
-rw-r--r-- | qt-models/mobilelistmodel.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/qt-models/mobilelistmodel.h b/qt-models/mobilelistmodel.h new file mode 100644 index 000000000..92a12960d --- /dev/null +++ b/qt-models/mobilelistmodel.h @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: GPL-2.0 +#ifndef MOBILELISTMODEL_H +#define MOBILELISTMODEL_H + +#include "divetripmodel.h" + +class MobileListModel : public QAbstractItemModel { + Q_OBJECT +public: + enum Roles { + IsTopLevelRole = DiveTripModelBase::LAST_ROLE + 1, + DiveDateRole, + TripIdRole, + TripNrDivesRole, + DateTimeRole, + IdRole, + NumberRole, + LocationRole, + DepthRole, + DurationRole, + DepthDurationRole, + RatingRole, + VizRole, + SuitRole, + AirTempRole, + WaterTempRole, + SacRole, + SumWeightRole, + DiveMasterRole, + BuddyRole, + NotesRole, + GpsDecimalRole, + GpsRole, + NoDiveRole, + DiveSiteRole, + CylinderRole, + GetCylinderRole, + CylinderListRole, + SingleWeightRole, + StartPressureRole, + EndPressureRole, + FirstGasRole, + SelectedRole, + }; + MobileListModel(DiveTripModelBase *source); + static MobileListModel *instance(); + void resetModel(); + void expand(int row); + void unexpand(); + void toggle(int row); + Q_PROPERTY(int shown READ shown NOTIFY shownChanged); +signals: + void shownChanged(); +private: + struct IndexRange { + bool visible; + int first, last; + }; + void connectSignals(); + std::vector<IndexRange> rangeStack; + QModelIndex sourceIndex(int row, int col, int parentRow = -1) const; + int numSubItems() const; + int mapRowFromSourceTopLevel(int row) const; + int mapRowFromSourceTopLevelForInsert(int row) const; + int mapRowFromSourceTrip(const QModelIndex &parent, int parentRow, int row) const; + int mapRowFromSource(const QModelIndex &parent, int row) const; + int invertRow(const QModelIndex &parent, int row) const; + IndexRange mapRangeFromSource(const QModelIndex &parent, int first, int last) const; + IndexRange mapRangeFromSourceForInsert(const QModelIndex &parent, int first, int last) const; + QModelIndex mapFromSource(const QModelIndex &idx) const; + QModelIndex mapToSource(const QModelIndex &idx) const; + static void updateRowAfterRemove(const IndexRange &range, int &row); + static void updateRowAfterMove(const IndexRange &range, const IndexRange &dest, int &row); + QVariant data(const QModelIndex &index, int role) const override; + QModelIndex index(int row, int column, const QModelIndex &parent) const override; + QModelIndex parent(const QModelIndex &index) const override; + int rowCount(const QModelIndex &parent) const override; + int columnCount(const QModelIndex &parent) const override; + QHash<int, QByteArray> roleNames() const override; + int shown() const; + + DiveTripModelBase *source; + int expandedRow; +private slots: + void prepareRemove(const QModelIndex &parent, int first, int last); + void doneRemove(const QModelIndex &parent, int first, int last); + void prepareInsert(const QModelIndex &parent, int first, int last); + void doneInsert(const QModelIndex &parent, int first, int last); + void prepareMove(const QModelIndex &parent, int first, int last, const QModelIndex &dest, int destRow); + void doneMove(const QModelIndex &parent, int first, int last, const QModelIndex &dest, int destRow); + void changed(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles); +}; + +#endif |