summaryrefslogtreecommitdiffstats
path: root/qt-models/diveimportedmodel.cpp
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-09-22 18:50:10 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-10-02 08:04:49 -0700
commit30b384cebd3d488c24c211ccbb4511566d00d4f1 (patch)
tree17756cd357cf2725104e15c2b95eccbefc2ad0fc /qt-models/diveimportedmodel.cpp
parentad7ffa0af03718829c62621aceaaac959932ac14 (diff)
downloadsubsurface-30b384cebd3d488c24c211ccbb4511566d00d4f1.tar.gz
Import: keep model state consistent when deleting unselected dives
In DiveImportedModel::deleteDeselected(), unselected dives were deleted from the dive-table. But this left the model in an inconsistent state and the frontend was not informed of the missing dives. Fix this by invoking the appropriate beginRemoveRows()/ endRemoveRows() pairs. Move the functionality into its own function so that it can be reused by the desktop version. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'qt-models/diveimportedmodel.cpp')
-rw-r--r--qt-models/diveimportedmodel.cpp28
1 files changed, 19 insertions, 9 deletions
diff --git a/qt-models/diveimportedmodel.cpp b/qt-models/diveimportedmodel.cpp
index 504931b85..34c247c0c 100644
--- a/qt-models/diveimportedmodel.cpp
+++ b/qt-models/diveimportedmodel.cpp
@@ -155,22 +155,32 @@ void DiveImportedModel::repopulate(dive_table_t *table, struct dive_site_table *
endResetModel();
}
-// Note: this function is only used from mobile - perhaps move it there or unify.
-void DiveImportedModel::recordDives()
+// Delete non-selected dives
+void DiveImportedModel::deleteDeselected()
{
- if (diveTable->nr == 0)
- // nothing to do, just exit
- return;
-
- // delete non-selected dives
int total = diveTable->nr;
int j = 0;
for (int i = 0; i < total; i++) {
- if (checkStates[i])
+ if (checkStates[i]) {
j++;
- else
+ } else {
+ beginRemoveRows(QModelIndex(), j, j);
delete_dive_from_table(diveTable, j);
+ endRemoveRows();
+ }
}
+ checkStates.resize(diveTable->nr);
+ std::fill(checkStates.begin(), checkStates.end(), true);
+}
+
+// Note: this function is only used from mobile - perhaps move it there or unify.
+void DiveImportedModel::recordDives()
+{
+ if (diveTable->nr == 0)
+ // nothing to do, just exit
+ return;
+
+ deleteDeselected();
// TODO: Might want to let the user select IMPORT_ADD_TO_NEW_TRIP
add_imported_dives(diveTable, nullptr, sitesTable, IMPORT_PREFER_IMPORTED | IMPORT_IS_DOWNLOADED);