subsurface/core
Berthold Stoeger 403dd5a891 Undo: fix multi-level undo of delete-dive and remove-dive-from-trip
The original undo-code was fundamentally broken. Not only did it leak
resources (copied trips were never freed), it also kept references
to trips or dives that could be changed by other commands. Thus,
anything more than a single undo could lead to crashes.

Two ways of fixing this were considered
1) Don't store pointers, but unique dive-ids and trip-ids.
   Whereas such unique ids exist for dives, they would have to be
   implemented for trips.
2) Don't free objects in the backend.
   Instead, take ownership of deleted objects in the undo-object.
   Thus, all references in previous undo-objects are guaranteed to
   still exist (unless the objects are deleted elsewhere).

After some contemplation, the second method was chosen, because
it is significantly less intrusive. While touching the undo-objects,
clearly separate backend from ui-code, such that they can ultimately
be reused for mobile.

Note that if other parts of the code delete dives, crashes can still
be provoked. Notable examples are split/merge dives. These will have
to be fixed later. Nevertheless, the new code is a significant
improvement over the old state.

While touching the code, implement proper translation string based
on Qt's plural-feature (using %n).

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-10-11 16:22:27 -07:00
..
settings Prefs: add bool preference cloud_auto_sync [1/3] 2018-10-09 10:03:21 -07:00
subsurface-qt Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
android.cpp Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
btdiscovery.cpp BT OSTC 3 should be reported as OSTC Plus 2018-10-09 21:04:23 -07:00
btdiscovery.h
checkcloudconnection.cpp prefs: git_local_only is not a preference 2018-09-10 16:26:49 -07:00
checkcloudconnection.h
cloudstorage.cpp core/settings ... : remove qPref* includes in qPref.h 2018-09-11 17:25:00 -07:00
cloudstorage.h prefs: cloud_new_password is not a preference 2018-09-10 16:26:49 -07:00
CMakeLists.txt Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00
cochran.c Core: remove dive->downloaded flag 2018-10-06 19:47:06 -07:00
cochran.h
color.cpp Cleanup: silence clang missing braces warning in core/color.cpp 2018-09-01 11:31:18 -07:00
color.h Cleanups to core/color.[c|hpp] 2018-07-18 02:09:15 +03:00
compressibility.r
configuredivecomputer.cpp Actually tie in the new libdivecomputer IO model to open the dive computer device 2018-04-24 17:54:08 -07:00
configuredivecomputer.h
configuredivecomputerthreads.cpp libdivecomputer: remove ifdefs for ancient versions 2018-10-08 23:06:09 +03:00
configuredivecomputerthreads.h
connectionlistmodel.cpp Substring match BT address 2018-10-09 21:04:23 -07:00
connectionlistmodel.h core: add indexOf member to ConnectionListModel 2018-08-11 11:14:22 -07:00
datatrak.c Parser: parse text-based files into arbitrary table 2018-09-28 15:06:00 -07:00
datatrak.h Cleanup: const-ify functions taking dives and divecomputers 2018-08-23 14:41:01 -07:00
deco.c Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
deco.h Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
device.c core: replace (void) with UNUSED(x) and include ssrf.h 2018-05-24 08:34:14 -07:00
device.h Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
devicedetails.cpp
devicedetails.h
display.h Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
dive.c Import: remove dive->downloaded logic 2018-10-06 19:47:06 -07:00
dive.h Undo: fix multi-level undo of delete-dive and remove-dive-from-trip 2018-10-11 16:22:27 -07:00
divecomputer.cpp core: remove SettingsObjectWrapper and update qPref calls 2018-08-15 16:11:39 -07:00
divecomputer.h Dive computers: turn QMultiMap into sorted vector 2018-06-17 06:53:13 +09:00
divelist.c Undo: fix multi-level undo of delete-dive and remove-dive-from-trip 2018-10-11 16:22:27 -07:00
divelist.h Undo: fix multi-level undo of delete-dive and remove-dive-from-trip 2018-10-11 16:22:27 -07:00
divelogexportlogic.cpp Statistics: only consider selected dives in HTML export statistics 2018-10-07 17:50:51 +03:00
divelogexportlogic.h
divesite-helper.cpp Translations: unify gettextFromC::tr() and QObject::tr() 2018-07-04 05:33:31 +08:00
divesite.c Leak fix: free taxonomy data in delete_dive_site() 2018-10-07 23:40:37 +03:00
divesite.h Dive sites: don't add dummy entries to LocationInformationModel 2018-10-09 21:00:44 -07:00
divesitehelpers.cpp Cleanup: fold core/helpers.h into core/qthelper.h 2018-06-04 08:50:10 -07:00
divesitehelpers.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
downloadfromdcthread.cpp QML UI: do not try to download from DC with empty vendor/product 2018-10-10 06:27:21 -07:00
downloadfromdcthread.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
equipment.c Cleanup: user properly typed pointers 2018-08-23 05:21:08 -07:00
errorhelper.c
exif.cpp
exif.h
file.c Parser: parse text-based files into arbitrary table 2018-09-28 15:06:00 -07:00
file.h Parser: parse text-based files into arbitrary table 2018-09-28 15:06:00 -07:00
format.cpp Cleanup: Slightly shorten code in vqasprintf_loc() 2018-04-09 11:29:43 -07:00
format.h Cleanup: Move *_loc formatting functions into new format.cpp file 2018-04-09 11:29:43 -07:00
gas-model.c Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
gaspressures.c Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
gaspressures.h
gettext.h
gettextfromc.cpp Localization: make cache thread safe and robust against use-after-free 2018-06-24 20:31:14 +02:00
gettextfromc.h Localization: remove gettextFromC::instance() 2018-06-24 20:31:14 +02:00
git-access.c prefs: git_local_only is not a preference 2018-09-10 16:26:49 -07:00
git-access.h prefs: git_local_only is not a preference 2018-09-10 16:26:49 -07:00
gpslocation.cpp cleanup: remove more GPS webservice code 2018-09-24 07:20:25 -07:00
gpslocation.h core: fix connect call 2018-09-24 07:20:25 -07:00
imagedownloader.cpp Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
imagedownloader.h Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
import-cobalt.c core: replace (void) with UNUSED(x) and include ssrf.h 2018-05-24 08:34:14 -07:00
import-csv.c Import: remove unnecessary processing of dives in DAN import 2018-10-04 07:37:28 +02:00
import-csv.h Parser: parse text-based files into arbitrary table 2018-09-28 15:06:00 -07:00
import-divinglog.c Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
import-shearwater.c Remove unnecessary {} 2018-05-27 23:18:01 +03:00
import-suunto.c DM5 import: support for larger sample size 2018-06-15 17:45:33 -07:00
ios.cpp Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
isocialnetworkintegration.cpp
isocialnetworkintegration.h
libdivecomputer.c libdivecomputer: remove ifdefs for ancient versions 2018-10-08 23:06:09 +03:00
libdivecomputer.h qt-ble: add 'get_name()' function to expose the BLE name to libdivecomputer 2018-10-08 00:10:29 +03:00
liquivision.c Core: remove dive->downloaded flag 2018-10-06 19:47:06 -07:00
load-git.c cleanup[1/6]: do not set userid/save_userid_local from storage 2018-09-11 15:38:20 -07:00
macos.c macOS: always list 'FTDI' as a serial connection 2018-09-24 18:51:21 +02:00
membuffer.c
membuffer.h Add usage documentation for membuffer helper functions 2018-04-10 08:18:32 -07:00
metadata.cpp Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00
metadata.h Metadata: extract duration fom QuickTime/MP4-style containers 2018-07-14 08:32:30 +02:00
metrics.cpp
metrics.h
ostctools.c Core: introduce new subsurface-string header 2018-05-14 10:13:39 -07:00
parse-xml.c Allow XML sample times to have hh:mm:sec format 2018-09-26 12:13:20 -07:00
parse.c cleanup[1/6]: do not set userid/save_userid_local from storage 2018-09-11 15:38:20 -07:00
parse.h Parser: move match() into core/parse-xml.c 2018-08-30 13:32:09 -07:00
planner.c Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
planner.h Cleanup: pass gasmix by value 2018-08-23 05:16:38 -07:00
plannernotes.c Planner: fix display of "overlapping dives" message 2018-09-12 14:17:55 -07:00
pluginmanager.cpp
pluginmanager.h
pref.h Prefs: add bool preference cloud_auto_sync [1/3] 2018-10-09 10:03:21 -07:00
profile.c Profile: fix SAC calculation for air dives 2018-09-10 14:23:59 -07:00
profile.h Cleanup: const-ify functions taking pointers to events 2018-08-23 05:16:38 -07:00
qt-ble.cpp qt-ble: add 'get_name()' function to expose the BLE name to libdivecomputer 2018-10-08 00:10:29 +03:00
qt-ble.h qt-ble: add 'get_name()' function to expose the BLE name to libdivecomputer 2018-10-08 00:10:29 +03:00
qt-gui.h core,tests: change qml register function 2018-09-11 17:22:58 -07:00
qt-init.cpp Set desktop file name to avoid a broken icon under KDE Wayland 2018-09-09 18:44:40 -07:00
qthelper.cpp core: remove QSettings from qthelper 2018-08-25 11:49:47 -07:00
qthelper.h For media file open dialog add different file filters 2018-07-15 09:38:12 -07:00
qtserialbluetooth.cpp qt-ble: add 'get_name()' function to expose the BLE name to libdivecomputer 2018-10-08 00:10:29 +03:00
save-git.c cleanup[3/6]: do not save the userid any more 2018-09-11 15:38:20 -07:00
save-html.c Cleanup: constify get_units() 2018-09-07 11:03:30 -07:00
save-html.h
save-xml.c Optional anonymization upon export 2018-09-13 08:16:54 -07:00
serial_ftdi.c ftdi: make the timeout be based on actual real time 2018-10-08 00:10:29 +03:00
sha1.c
sha1.h
ssrf.h mobile: add timer to measure startup. 2018-05-30 21:47:07 -07:00
statistics.c Statistics: only consider selected dives in HTML export statistics 2018-10-07 17:50:51 +03:00
statistics.h Statistics: only consider selected dives in HTML export statistics 2018-10-07 17:50:51 +03:00
strndup.h
strtod.c Core: introduce new subsurface-string header 2018-05-14 10:13:39 -07:00
subsurface-string.h Core: don't inline rarely used function 2018-05-14 10:13:39 -07:00
subsurfacestartup.c qPref: add mobile_scale preference 2018-09-25 15:58:17 +02:00
subsurfacestartup.h
subsurfacesysinfo.cpp
subsurfacesysinfo.h
taxonomy.c
taxonomy.h
time.c
uemis-downloader.c Core: remove dive->downloaded flag 2018-10-06 19:47:06 -07:00
uemis.c Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
uemis.h
units.h core: removed clang warnings from units.h 2018-05-18 21:27:37 +03:00
unix.c Make device enumeration use the device transport data 2018-08-27 22:10:38 -07:00
version.c
version.h
videoframeextractor.cpp Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
videoframeextractor.h Dive media: Extract thumbnails from videos with ffmpeg 2018-07-28 15:31:25 -07:00
webservice.h
windows.c core/windows.c: write logs to the user path 2018-09-03 13:29:03 -07:00
windowtitleupdate.cpp Cleanup: Make WindowsTitleUpdate a global object 2018-07-30 13:55:23 -07:00
windowtitleupdate.h Cleanup: Make WindowsTitleUpdate a global object 2018-07-30 13:55:23 -07:00
worldmap-options.h
worldmap-save.c Core: remove dive.h from files that don't need it 2018-05-14 10:13:39 -07:00
worldmap-save.h
xmp_parser.cpp Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00
xmp_parser.h Metadata: rudimentary support for XMP metadataa in MP4-based videos 2018-09-25 14:59:14 -07:00