subsurface/qt-models
Berthold Stoeger cbcddaa396 Dive list: cache shown flag in model (quick-fix for undo-crash)
We have a very fundamental problem with data-duplication in
core and qt-models. In a particular case, this led to an easily
reproducible crash:
1) An undo command moved the last dive of a trip to another.
2) When an undo-command removed the last dive of
   a trip to a different trip, the dive was removed from the
   trip in the core. Then, the model was updated.
3) That lead at first to a rearrangement of the trips, because
   the trip with the added dive is moved before the trip with
   the removed dive.
4) In such a case, the filter-model checks the visibility of
   the trip.
5) Since the trip with the removed dive has no dives in the core,
   visibility was determined as false.
6) From this point on the mappings of the QSortFilterProxyModel
   were messed up. Accesses led to crashes. It is unclear
   whether this is a Qt bug or only a QOI issue.

As a quick-fix, cache the visibility flag of trips directly
in the Qt-models. Don't set the visibility directly in the
core, but go via the Qt-models. Thus, a more clear layering
is achieved.

In the long run, we can hopefully get rid of the data-duplication
in the models.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2019-06-23 20:08:46 +02:00
..
cleanertablemodel.cpp Cleanup: return directly from data() methods 2019-06-19 13:11:10 -07:00
cleanertablemodel.h Icons: cache small edit icon 2019-04-12 18:19:07 +03:00
CMakeLists.txt Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
completionmodels.cpp Cleanup: move tag functions into own translation unit 2019-06-19 13:11:10 -07:00
completionmodels.h Add SPDX header to Qt models 2017-04-29 13:32:55 -07:00
cylindermodel.cpp Cleanup: return directly from data() methods 2019-06-19 13:11:10 -07:00
cylindermodel.h Undo: update cylinder and weight models on paste 2019-04-12 18:19:07 +03:00
divecomputerextradatamodel.cpp qt-models: Change Q_UNUSED to no parameter name 2018-05-21 12:48:04 -07:00
divecomputerextradatamodel.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
divecomputermodel.cpp Dive computers: turn QMultiMap into sorted vector 2018-06-17 06:53:13 +09:00
divecomputermodel.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
diveimportedmodel.cpp Undo: make undo-system dive site-aware 2019-04-12 18:19:07 +03:00
diveimportedmodel.h Dive sites: prepare for dive site ref-counting 2019-04-12 18:19:07 +03:00
divelistmodel.cpp Cleanup: move trip-related functions into own translation unit 2019-06-19 13:11:10 -07:00
divelistmodel.h get rid of some foreach and Q_FOREACH constructs 2019-04-12 12:59:17 +03:00
divelocationmodel.cpp Dive site: add proximity field to dive site list 2019-04-12 18:19:07 +03:00
divelocationmodel.h Dive sites: show dives at selected dive sites 2019-04-12 18:19:07 +03:00
divepicturemodel.cpp Write dive data as video subtitles 2019-04-16 20:38:19 +02:00
divepicturemodel.h Write dive data as video subtitles 2019-04-16 20:38:19 +02:00
diveplannermodel.cpp Undo: remove ADD mode from main tab 2019-04-12 18:19:07 +03:00
diveplannermodel.h Add UI element for final surface segment in planner 2019-03-29 06:51:12 -07:00
diveplotdatamodel.cpp qt-models: Change Q_UNUSED to no parameter name 2018-05-21 12:48:04 -07:00
diveplotdatamodel.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
divesiteimportmodel.cpp Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
divesiteimportmodel.h Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
divetripmodel.cpp Dive list: cache shown flag in model (quick-fix for undo-crash) 2019-06-23 20:08:46 +02:00
divetripmodel.h Dive list: cache shown flag in model (quick-fix for undo-crash) 2019-06-23 20:08:46 +02:00
filtermodels.cpp Dive list: cache shown flag in model (quick-fix for undo-crash) 2019-06-23 20:08:46 +02:00
filtermodels.h Filter: add reference counting for dive-site mode 2019-05-11 12:06:19 -07:00
gpslistmodel.cpp Add 'location_t' data structure 2018-10-21 19:55:09 +03:00
gpslistmodel.h Unused code: GpsListModel::addGpsFix() 2018-01-10 16:45:42 +01:00
maplocationmodel.cpp Map: automatically update names on the map 2019-05-11 12:06:19 -07:00
maplocationmodel.h Map: automatically update names on the map 2019-05-11 12:06:19 -07:00
messagehandlermodel.cpp qt-models: Change Q_UNUSED to no parameter name 2018-05-21 12:48:04 -07:00
messagehandlermodel.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
models.cpp Icons: cache small edit icon 2019-04-12 18:19:07 +03:00
models.h Icons: cache small edit icon 2019-04-12 18:19:07 +03:00
tankinfomodel.cpp Cleanup: implement proper Qt-model semantics in TankInfoModel 2019-04-29 13:06:39 -07:00
tankinfomodel.h Cleanup: remove biggerString() functions 2019-04-29 13:06:39 -07:00
treemodel.cpp Cleanup: make DiveTripModel a global object 2018-09-01 07:48:43 -07:00
treemodel.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
weightmodel.cpp Cleanup: return directly from data() methods 2019-06-19 13:11:10 -07:00
weightmodel.h Undo: update cylinder and weight models on paste 2019-04-12 18:19:07 +03:00
weightsysteminfomodel.cpp Cleanup: implement proper Qt-model semantics in WeightInfoModel 2019-04-29 13:06:39 -07:00
weightsysteminfomodel.h Cleanup: implement proper Qt-model semantics in WeightInfoModel 2019-04-29 13:06:39 -07:00
yearlystatisticsmodel.cpp Cleanup: make argument to YearStatisticsItem constructor a reference 2019-03-19 16:06:14 -07:00
yearlystatisticsmodel.h Show average max depth in yearly statistics 2018-12-17 12:18:26 +01:00