subsurface/desktop-widgets
Berthold Stoeger 396598430b desktop: fix saving of column-widths of device and site tables
Qt's memory management scheme is completely broken and messes
with common expectations.

QObjects are organized as a tree. The children are destroyed
in the destructor of QObject. This means that they are destructed
after the destructor of the parent object has run and its
sub-object were destructed. Obviously, this makes no sense as
the child objects should be able to access their parent at
any time.

To restore the commonly expected deterministic order of
construction and destruction, one might simply do away with
Qt's silly object tree and organise things using classical
subobjects. However, that breaks with the Qt-generated UI
classes: The objects generated by these classes are *not*
destructed with the UI class. Instead, they are attached
to the widget's QObject tree. Thus these are again destructed
*after* the widget! Who comes up with such a scheme?

In our case this means that we cannot have models used for
TableViews as subobjects, because the TableView needs the
model to save the column widths in the destructor. Which,
as detailed above is called *after* the desctructor of the
widget! Thus, turn these models into heap-allocated objects
and add them to the QObject tree.

Funilly, this exposes another insanity of Qt's QObject tree:
Children are destructed in order of construction! One would
expect that if objects are constructed in the sequence
A, B, C one can expect that C can, at any time, access B and A.
Not so in Qt: The destruction order is likewise A, B, C!

Thus, take care to init the widgets before the model. Jeez.

Finally, print a warning in the column-saving code of
TableWidget, so that these kind of subtleties are caught
in the future.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2020-11-07 11:37:51 -08:00
..
css Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
preferences revert preference settings for title color 2020-11-04 14:51:55 -08:00
statistics cleanup: remove empty files in desktop-widgets/statistics 2020-09-12 08:36:10 -07:00
tab-widgets desktop: fix saving of column-widths of device and site tables 2020-11-07 11:37:51 -08:00
about.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
about.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
about.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
addfilterpreset.ui filter: create a primitive "create filter preset" dialog 2020-09-29 16:13:03 -07:00
btdeviceselectiondialog.cpp core/BLE: don't insist on pairing of pure BLE devices 2020-08-22 19:35:58 -07:00
btdeviceselectiondialog.h Bluetooth: use standard Qt code on Windows 2018-09-30 08:09:37 -07:00
btdeviceselectiondialog.ui Desktop: add checkbox to show all BT devices 2019-02-14 09:05:58 -08:00
CMakeLists.txt desktop: remove DiveComputerManagementDialog 2020-10-25 13:59:04 -07:00
configuredivecomputerdialog.cpp cleanup: use safe connect() in ConfigureDiveComputerDialog 2020-10-06 10:38:45 -07:00
configuredivecomputerdialog.h cleanup: use safe connect() in ConfigureDiveComputerDialog 2020-10-06 10:38:45 -07:00
configuredivecomputerdialog.ui Configure ostc3: Remove obsoleted setting 2018-04-27 21:33:47 +03:00
divecomponentselection.ui Add various enhancements to profile export and dive data copy 2019-02-07 16:06:43 +01:00
divelistview.cpp cleanup: fix deprecated QVector constructor 2020-10-26 19:27:03 -07:00
divelistview.h desktop: allow moving dives to arbitrary trips 2020-10-03 10:01:13 -07:00
divelogexportdialog.cpp Increase event icon size in print mode 2020-09-03 11:46:18 -07:00
divelogexportdialog.h desktop-widgets: move export functions to shared class 2019-12-03 21:30:39 -08:00
divelogexportdialog.ui Reorganise and reword divelog export panel 2020-04-18 12:08:48 -07:00
divelogimportdialog.cpp cleanup: fix deprecated role 2020-10-26 19:27:03 -07:00
divelogimportdialog.h parser: replace params[] code by new xml_params struct 2020-10-23 18:17:02 -07:00
divelogimportdialog.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
divepicturewidget.cpp media: don't send dive-id in drag&drop event 2020-05-06 13:58:09 -07:00
divepicturewidget.h Cleanup: remove DivePictureThumbnailThread 2020-05-06 13:58:09 -07:00
diveplanner.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
diveplanner.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
diveplanner.ui Choose water presets from a qcombobox in planner, custom value possible 2018-03-02 08:38:22 -08:00
diveshareexportdialog.cpp desktop-widgets: diveDiveShareExportDialog add signal handling 2019-12-11 11:08:51 -05:00
diveshareexportdialog.h desktop-widgets: diveDiveShareExportDialog add signal handling 2019-12-11 11:08:51 -05:00
diveshareexportdialog.ui Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
divesiteimportdialog.cpp code cleanup: add empty table structures 2020-01-10 02:37:03 +09:00
divesiteimportdialog.h Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
divesiteimportdialog.ui Create DivesiteImportDialog to select sites to import 2019-05-06 10:48:44 +02:00
downloadfromdivecomputer.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
downloadfromdivecomputer.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
downloadfromdivecomputer.ui Desktop/remember DCs: avoid highlighted button 2018-09-23 11:49:30 -07:00
filterconstraintwidget.cpp filter: use 64-bit integer literal for generating bit fields 2020-10-25 16:23:46 -07:00
filterconstraintwidget.h filter: add a filter constraint widget 2020-09-29 16:13:03 -07:00
filterwidget.cpp desktop: maximize size of last column in filter-preset table 2020-11-07 11:37:51 -08:00
filterwidget.h cleanup: rename FilterWidget2 to FilterWidget 2020-09-29 16:14:31 -07:00
filterwidget.ui cleanup: rename FilterWidget2 to FilterWidget 2020-09-29 16:14:31 -07:00
findmovedimagesdialog.cpp media: move picture function from dive.c to picture.c 2020-04-10 10:53:03 -07:00
findmovedimagesdialog.h Dive pictures: implement FindMovedImagesDialog 2018-07-04 02:27:36 +08:00
findmovedimagesdialog.ui UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -07:00
groupedlineedit.cpp desktop: avoid crashes on drag&drop in GroupedLineEdit 2020-10-24 09:49:36 -07:00
groupedlineedit.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
importgps.cpp cleanup: move declaration of utc_mk* functions to new subsurface-time.h header 2020-05-01 09:42:31 -07:00
importgps.h core: move GPX parsing into core 2020-01-24 09:51:02 -08:00
importgps.ui Typo: UCT to UTC 2020-03-19 08:37:59 -07:00
kmessagewidget.cpp Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
kmessagewidget.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
listfilter.ui Start to implement a simplified version of the filter widget 2018-12-14 01:05:18 +08:00
locationinformation.cpp [Bug #2934] Geo Lookup - support for remote dive sites 2020-09-05 17:34:15 +02:00
locationinformation.h cleanup: fix compiler warning 2020-08-24 08:31:38 -07:00
locationinformation.ui Desktop: Import dive coordinates directly from GPS 2020-01-24 09:51:02 -08:00
mainwindow.cpp cleanup: remove MainWindow::setFileClean() 2020-10-25 13:59:04 -07:00
mainwindow.h cleanup: remove MainWindow::setFileClean() 2020-10-25 13:59:04 -07:00
mainwindow.ui desktop: remove DiveComputerManagementDialog 2020-10-25 13:59:04 -07:00
mapwidget.cpp cleanup: invert control-flow when resetting the core structures 2020-05-07 08:43:27 -07:00
mapwidget.h Cleanup: lower-case filenames in core/subsurface-qt/ 2020-02-04 02:16:46 +01:00
modeldelegates.cpp cleanup: replace deprecated signal 2020-10-26 19:27:03 -07:00
modeldelegates.h cleanup: use pointer-to-member style connect for ComboBoxDelegate 2020-05-16 10:09:35 -07:00
notificationwidget.cpp Use queued connection to thread-safe MainWindow error handling 2018-01-31 14:47:26 +01:00
notificationwidget.h Use queued connection to thread-safe MainWindow error handling 2018-01-31 14:47:26 +01:00
plannerDetails.ui Bring back style sheet HTML for planner output 2017-02-24 01:06:09 -08:00
plannerSettings.ui Planner: Add option to treat O2 as narcotic 2019-10-31 00:30:38 -07:00
printdialog.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
printdialog.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
printer.cpp profile: don't interpret NULL as current_dive in plotDive() 2020-05-03 14:47:49 -07:00
printer.h Add the ability to export print template as html 2019-09-11 17:21:50 +01:00
printoptions.cpp Set printer resolution 2020-09-03 11:46:16 -07:00
printoptions.h Set printer resolution 2020-09-03 11:46:16 -07:00
printoptions.ui Set printer resolution 2020-09-03 11:46:16 -07:00
qtwaitingspinner.cpp Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
qtwaitingspinner.h Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
renumber.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
searchbar.ui Use better aliases for icons. 2017-11-30 23:14:46 -08:00
setpoint.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
shiftimagetimes.ui UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -07:00
shifttimes.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
simplewidgets.cpp desktop: move MinMaxAvgWidget to TabDiveStatistics 2020-10-26 20:56:56 -07:00
simplewidgets.h desktop: move MinMaxAvgWidget to TabDiveStatistics 2020-10-26 20:56:56 -07:00
starwidget.cpp cleanup: remove reference to deprecated enum value 2020-10-26 19:27:03 -07:00
starwidget.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
subsurfacewebservices.cpp cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
subsurfacewebservices.h cleanup: fix deprecated QFlags use 2020-10-26 19:27:03 -07:00
tableview.cpp desktop: fix saving of column-widths of device and site tables 2020-11-07 11:37:51 -08:00
tableview.h Desktop: don't connect to remove() slot of model from TableModel 2019-12-05 10:14:25 -08:00
tableview.ui Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
tagwidget.cpp cleanup: SkipEmptyParts syntax has changed 2020-10-26 19:27:03 -07:00
tagwidget.h cleanup: remove TagWidget::fixPopupPosition() 2020-10-24 09:50:39 -07:00
templateedit.cpp Warnings: replace memcpy by assignment 2018-11-19 13:51:03 -08:00
templateedit.h Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
templateedit.ui templateedit.ui: give the layout for "Border width" unique name 2017-03-12 09:19:03 -07:00
templatelayout.cpp Remove code references to Grantlee 2020-10-08 12:19:39 -07:00
templatelayout.h Remove code references to Grantlee 2020-10-08 12:19:39 -07:00
textedit.cpp Desktop: create new custom TextEdit widget for notes-field 2019-04-12 18:19:07 +03:00
textedit.h Desktop: create new custom TextEdit widget for notes-field 2019-04-12 18:19:07 +03:00
tripselectiondialog.cpp desktop: add trip selection dialog 2020-10-03 10:01:13 -07:00
tripselectiondialog.h desktop: add trip selection dialog 2020-10-03 10:01:13 -07:00
tripselectiondialog.ui desktop: add trip selection dialog 2020-10-03 10:01:13 -07:00
updatemanager.cpp core: move updatecheck to its own domain 2019-02-09 10:37:55 -08:00
updatemanager.h Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
urldialog.ui UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -07:00
usermanual.cpp cleanup: don't initialize flags with just an integer 2020-10-26 19:27:03 -07:00
usermanual.h Remove partial support for QWebEngine 2019-03-20 08:45:02 -07:00
webservices.ui Use icons relative path. 2017-11-30 23:14:46 -08:00