summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mobile-widgets/qml/DownloadFromDiveComputer.qml2
-rw-r--r--qt-models/divelistmodel.cpp14
-rw-r--r--qt-models/divelistmodel.h2
3 files changed, 13 insertions, 5 deletions
diff --git a/mobile-widgets/qml/DownloadFromDiveComputer.qml b/mobile-widgets/qml/DownloadFromDiveComputer.qml
index 48fd816d8..51c96c044 100644
--- a/mobile-widgets/qml/DownloadFromDiveComputer.qml
+++ b/mobile-widgets/qml/DownloadFromDiveComputer.qml
@@ -391,7 +391,7 @@ Kirigami.Page {
manager.appendTextToLog("Save downloaded dives that were selected")
importModel.recordDives()
manager.saveChangesLocal()
- diveModel.reload()
+ diveModel.resetInternaData()
pageStack.pop();
download.text = qsTr("Download")
divesDownloaded = false
diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp
index 6f7d69412..9aa78f344 100644
--- a/qt-models/divelistmodel.cpp
+++ b/qt-models/divelistmodel.cpp
@@ -73,7 +73,7 @@ int DiveListSortModel::getIdxForId(int id)
void DiveListSortModel::reload()
{
DiveListModel *mySourceModel = qobject_cast<DiveListModel *>(sourceModel());
- mySourceModel->reload();
+ mySourceModel->resetInternalData();
}
// In QtQuick ListView, section headings can only be strings. To identify dives
@@ -180,8 +180,16 @@ void DiveListModel::clear()
void DiveListModel::reload()
{
- beginResetModel();
- endResetModel();
+ // Note: instead of doing a (logical) beginResetModel()/endResetModel(),
+ // we add the rows (if any). The reason is that a beginResetModel()/endResetModel()
+ // pair resulted in the DiveDetailsPage being renedered for *every* dive in
+ // the list. It is unclear whether this is a Qt-bug or intended insanity.
+ // Therefore, this function must only be called after having called clear().
+ // Otherwise the model will become inconsistent!
+ if (dive_table.nr > 0) {
+ beginInsertRows(QModelIndex(), 0, dive_table.nr - 1);
+ endInsertRows();
+ }
}
void DiveListModel::resetInternalData()
diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h
index 686dcd1c3..19838f468 100644
--- a/qt-models/divelistmodel.h
+++ b/qt-models/divelistmodel.h
@@ -53,7 +53,7 @@ public:
void removeDive(int i);
void removeDiveById(int id);
void updateDive(int i, dive *d);
- void reload();
+ void reload(); // Only call after clearing the model!
struct dive *getDive(int i);
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int getDiveIdx(int id) const;