From 7e12ac262b35bcab05bc4a7e69d8572cba5b7ef1 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Wed, 11 Dec 2019 09:50:38 +0100 Subject: Dive list: implement DiveTripModelBase::reset() On desktop, resetting the model is realized by generating a new model object. This is due to the fact that we have two different models (tree and list) and for switching between those, we have to create a new object. On mobile, currently there are no plans to support the list-mode. Therefore, there is no reason the recreate the object. Instead, implement a reset() function that reloads the core data. Signed-off-by: Berthold Stoeger --- qt-models/divetripmodel.cpp | 20 +++++++++++++++++++- qt-models/divetripmodel.h | 6 ++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp index b76683175..eea4fcdba 100644 --- a/qt-models/divetripmodel.cpp +++ b/qt-models/divetripmodel.cpp @@ -379,6 +379,15 @@ void DiveTripModelBase::clear() endResetModel(); } +void DiveTripModelBase::reset() +{ + beginResetModel(); + clearData(); + populate(); + endResetModel(); + initSelection(); +} + DiveTripModelBase::DiveTripModelBase(QObject *parent) : QAbstractItemModel(parent) { } @@ -561,7 +570,11 @@ DiveTripModelTree::DiveTripModelTree(QObject *parent) : DiveTripModelBase(parent connect(&diveListNotifier, &DiveListNotifier::tripChanged, this, &DiveTripModelTree::tripChanged); connect(&diveListNotifier, &DiveListNotifier::filterReset, this, &DiveTripModelTree::filterReset); - // Fill model + populate(); +} + +void DiveTripModelTree::populate() +{ for (int i = 0; i < dive_table.nr ; ++i) { dive *d = get_dive(i); update_cylinder_related_info(d); @@ -1286,6 +1299,11 @@ DiveTripModelList::DiveTripModelList(QObject *parent) : DiveTripModelBase(parent connect(&diveListNotifier, &DiveListNotifier::divesSelected, this, &DiveTripModelList::divesSelected); connect(&diveListNotifier, &DiveListNotifier::filterReset, this, &DiveTripModelList::filterReset); + populate(); +} + +void DiveTripModelList::populate() +{ // Fill model items.reserve(dive_table.nr); for (int i = 0; i < dive_table.nr ; ++i) diff --git a/qt-models/divetripmodel.h b/qt-models/divetripmodel.h index eed6913cf..ff15893eb 100644 --- a/qt-models/divetripmodel.h +++ b/qt-models/divetripmodel.h @@ -63,6 +63,9 @@ public: // Clear all dives void clear(); + // Reload data + void reset(); + Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; @@ -91,6 +94,7 @@ protected: virtual dive *diveOrNull(const QModelIndex &index) const = 0; // Returns a dive if this index represents a dive, null otherwise virtual void clearData() = 0; + virtual void populate() = 0; }; class DiveTripModelTree : public DiveTripModelBase @@ -112,6 +116,7 @@ public: private: int rowCount(const QModelIndex &parent) const override; void clearData() override; + void populate() override; QModelIndex index(int row, int column, const QModelIndex &parent) const override; QModelIndex parent(const QModelIndex &index) const override; QVariant data(const QModelIndex &index, int role) const override; @@ -179,6 +184,7 @@ public: private: int rowCount(const QModelIndex &parent) const override; void clearData() override; + void populate() override; QModelIndex index(int row, int column, const QModelIndex &parent) const override; QModelIndex parent(const QModelIndex &index) const override; QVariant data(const QModelIndex &index, int role) const override; -- cgit v1.2.3-70-g09d2