diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-09-22 18:50:10 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-10-02 08:04:49 -0700 |
commit | 30b384cebd3d488c24c211ccbb4511566d00d4f1 (patch) | |
tree | 17756cd357cf2725104e15c2b95eccbefc2ad0fc /qt-models/diveimportedmodel.cpp | |
parent | ad7ffa0af03718829c62621aceaaac959932ac14 (diff) | |
download | subsurface-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.cpp | 28 |
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); |