subsurface/desktop-widgets
Berthold Stoeger 23db0ba68d Dive list view: replace signal-magic by flag
In DiveListView, we have a very fundamental problem: When
On the one hand, we get informed of user-selection in the
DiveListView::selectionChanged() slot. This has to set the
correct flags in the C-backend.

On the other hand, sometimes we have to set the selection
programatically, e.g. when selecting a trip. This is done
by calling QItemSelectionModel::select().

But: this will *also* call into the above slot, in which
we can't tell whether it was a user interaction or an
internal call. This can lead to either infinite loops or
very inefficient behavior, because the current dive
is set numerous times.

The current code is aware of that and disconnects the
corresponding signal. This is scary, as these signals are
set internally by the model and view. Replace this
by a global "command executing" flag in DiveListNotifier.
The flag is set using a "marker" class, which resets the flag
once it goes out of scope (cf. RAII pattern).

In DiveListView, only process a selection if the flag is not
set. Otherwise simply call the QTreeView base class, to reflect
the new selection in the UI.

To have a common point for notifications of selection changes,
add such a signal to DiveListNotifier. This signal will be
used by the DiveListView as well as the Command-objects.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-10-11 16:22:27 -07:00
..
css Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
plugins Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
preferences Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
statistics Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
tab-widgets Undo: implement autogrouping of trips in DiveAdd 2018-10-11 16:22:27 -07:00
about.cpp Get ready for 2018 2017-12-30 08:23:22 -08:00
about.h Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
about.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
btdeviceselectiondialog.cpp Bluetooth: use standard Qt code on Windows 2018-09-30 08:09:37 -07:00
btdeviceselectiondialog.h Bluetooth: use standard Qt code on Windows 2018-09-30 08:09:37 -07:00
btdeviceselectiondialog.ui Introduce mode field in Bluetooth device selection dialog 2017-11-16 14:26:51 +01:00
CMakeLists.txt Undo: isolate undo-commands 2018-10-11 16:22:27 -07:00
command.cpp Undo: use dive * instead of unique index in renumber-dives 2018-10-11 16:22:27 -07:00
command.h Undo: use dive * instead of unique index in renumber-dives 2018-10-11 16:22:27 -07:00
command_base.cpp Undo: isolate undo-commands 2018-10-11 16:22:27 -07:00
command_base.h Undo: isolate undo-commands 2018-10-11 16:22:27 -07:00
command_divelist.cpp Dive list view: replace signal-magic by flag 2018-10-11 16:22:27 -07:00
command_divelist.h Undo: use dive * instead of unique index in renumber-dives 2018-10-11 16:22:27 -07:00
configuredivecomputerdialog.cpp Cleanup: we don't support configuring a Uemis SDA 2018-08-28 12:03:03 -07:00
configuredivecomputerdialog.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
configuredivecomputerdialog.ui Configure ostc3: Remove obsoleted setting 2018-04-27 21:33:47 +03:00
divecomponentselection.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
divecomputermanagementdialog.cpp Dive computers: turn QMultiMap into sorted vector 2018-06-17 06:53:13 +09:00
divecomputermanagementdialog.h Cleanup: fold DiveComputerManagementDialog::update() into init() 2018-06-17 06:53:13 +09:00
divecomputermanagementdialog.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
divelistview.cpp Dive list view: replace signal-magic by flag 2018-10-11 16:22:27 -07:00
divelistview.h Dive list view: replace signal-magic by flag 2018-10-11 16:22:27 -07:00
divelogexportdialog.cpp Optional anonymization upon export 2018-09-13 08:16:54 -07:00
divelogexportdialog.h Cleanup: fold core/helpers.h into core/qthelper.h 2018-06-04 08:50:10 -07:00
divelogexportdialog.ui Desktop UI: small layout correction export dialog 2018-09-16 08:07:33 -07:00
divelogimportdialog.cpp Undo: isolate undo-commands 2018-10-11 16:22:27 -07:00
divelogimportdialog.h Import: Make DiveLogImportDialog modal 2018-10-04 10:22:11 +02:00
divelogimportdialog.ui Use icons relative path. 2017-11-30 23:14:46 -08:00
divepicturewidget.cpp Dive media: transport dive-id in drag'n'drop events 2018-07-18 09:06:37 -07:00
divepicturewidget.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
diveplanner.cpp core/settings: change bestmixend to int, to allow qml to work 2018-09-11 17:25:00 -07:00
diveplanner.h Cleanup: replace virtual by override where appropriate 2018-07-31 11:02:34 +02:00
diveplanner.ui Choose water presets from a qcombobox in planner, custom value possible 2018-03-02 08:38:22 -08:00
diveshareexportdialog.cpp Revert "desktop-widgets: remove QSettings from desktop-widgets" 2018-08-29 03:09:10 -07:00
diveshareexportdialog.h Random whitespace cleanup 2017-05-27 11:07:20 -07:00
diveshareexportdialog.ui Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
downloadfromdivecomputer.cpp Undo: isolate undo-commands 2018-10-11 16:22:27 -07:00
downloadfromdivecomputer.h Desktop/remember DCs: insert the remember connection into dropdown 2018-09-24 18:51:21 +02:00
downloadfromdivecomputer.ui Desktop/remember DCs: avoid highlighted button 2018-09-23 11:49:30 -07:00
filterwidget.ui Use better aliases for icons. 2017-11-30 23:14:46 -08:00
findmovedimagesdialog.cpp UI change of "images"/"photo" to "media" or "media files" 2018-07-15 09:38:12 -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 Unused code: GroupedLineEdit::removeAllColors() 2018-01-10 16:45:42 +01:00
groupedlineedit.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -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 Add tool tip for negate filter button 2017-12-30 08:15:11 -08:00
locationinformation.cpp Dive locations: factor out common code of models 2018-10-09 21:00:44 -07:00
locationinformation.h Dive locations: factor out common code of models 2018-10-09 21:00:44 -07:00
locationInformation.ui Use correct alias for satellite icon for revers geo lookup 2018-01-27 12:29:00 -08:00
mainwindow.cpp Dive list view: replace signal-magic by flag 2018-10-11 16:22:27 -07:00
mainwindow.h Dive list view: replace signal-magic by flag 2018-10-11 16:22:27 -07:00
mainwindow.ui Desktop: remove "edit dive" from log menu 2018-09-14 13:18:42 -07:00
mapwidget.cpp Map: zoom on dive sites when flipping through dive site list 2018-10-08 13:29:51 -07:00
mapwidget.h Map: zoom on dive sites when flipping through dive site list 2018-10-08 13:29:51 -07:00
modeldelegates.cpp modeldelegates: use font metrics for dive list row height 2018-08-26 23:06:00 -07:00
modeldelegates.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -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 and profile limit minimum GFlow to 10 and minimum GFhigh to 40 2017-11-13 11:53:55 +01:00
printdialog.cpp desktop-widgets: Change Q_UNUSED to no parameter name 2018-05-21 12:48:04 -07:00
printdialog.h Cleanup: replace virtual by override where appropriate 2018-07-31 11:02:34 +02:00
printer.cpp core/tests: merge Animations and add vars. to qPrefDisplay 2018-08-25 11:49:47 -07:00
printer.h Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
printoptions.cpp Cleanup: fold core/helpers.h into core/qthelper.h 2018-06-04 08:50:10 -07:00
printoptions.h cleanup: Uninitialized pointer field 2017-12-29 09:14:20 -08:00
printoptions.ui Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -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 Undo: use dive * instead of unique index in renumber-dives 2018-10-11 16:22:27 -07:00
simplewidgets.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
starwidget.cpp Cleanup: remove parameter from currentDiveChanged signal 2018-07-30 12:20:26 -07:00
starwidget.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
subsurfacewebservices.cpp Import: pass "downloaded" parameter to process_imported_dives() 2018-10-06 19:47:06 -07:00
subsurfacewebservices.h Cleanup: Devirtualize WebServices::downloadTimedOut() 2018-09-29 15:16:11 -07:00
tableview.cpp Use better aliases for icons. 2017-11-30 23:14:46 -08:00
tableview.h Cleanup: reinstate override modifiers 2018-09-29 15:23:25 -07:00
tableview.ui Move qt-ui to desktop-widgets 2015-10-30 10:36:49 -07:00
tagwidget.cpp Show all autocompletes after entry of comma in tag list 2017-11-17 09:19:03 +01:00
tagwidget.h Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
templateedit.cpp Fix includes for building against Qt-5.11.0 2018-05-23 13:29:37 +03: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 Statistics: only consider selected dives in HTML export statistics 2018-10-07 17:50:51 +03:00
templatelayout.h Translations: unify gettextFromC::tr() and QObject::tr() 2018-07-04 05:33:31 +08:00
updatemanager.cpp update-manager: actually remember that we asked the user 2018-10-02 13:20:44 -07: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: fold core/helpers.h into core/qthelper.h 2018-06-04 08:50:10 -07:00
usermanual.h Desktop: Derive UserManual from QDialog 2018-05-31 21:29:29 +03:00
usersurvey.cpp Revert "desktop-widgets: remove QSettings from desktop-widgets" 2018-08-29 03:09:10 -07:00
usersurvey.h Add SPDX header to desktop widgets 2017-04-29 13:32:55 -07:00
usersurvey.ui fix: User survey UI. 2017-03-06 06:40:00 -08:00
webservices.ui Use icons relative path. 2017-11-30 23:14:46 -08:00