diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-02-24 22:26:08 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-04-12 18:19:07 +0300 |
commit | 7924c7dafb3950116bb553eff35d7801cd5e1c54 (patch) | |
tree | bf11d1959579f471a39228eeae88a759e985811c /desktop-widgets | |
parent | 91c33b475ce85eaf1a987a29938a198415c04799 (diff) | |
download | subsurface-7924c7dafb3950116bb553eff35d7801cd5e1c54.tar.gz |
Undo: switch to edited trip
If fields in a trip are edited, select that trip, which will display
the trip in the notes-box.
This is realized by hooking into the tripChanged signal in the dive-list.
A layering-violation, perhaps?
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r-- | desktop-widgets/divelistview.cpp | 22 | ||||
-rw-r--r-- | desktop-widgets/divelistview.h | 2 |
2 files changed, 22 insertions, 2 deletions
diff --git a/desktop-widgets/divelistview.cpp b/desktop-widgets/divelistview.cpp index 086bc0a6d..86da4ba1a 100644 --- a/desktop-widgets/divelistview.cpp +++ b/desktop-widgets/divelistview.cpp @@ -24,7 +24,6 @@ #include "desktop-widgets/divelistview.h" #include "qt-models/divepicturemodel.h" #include "core/metrics.h" -#include "core/subsurface-qt/DiveListNotifier.h" #include "desktop-widgets/simplewidgets.h" DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelection(false), @@ -46,6 +45,8 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec // Update selection if all selected dives were hidden by filter connect(MultiFilterSortModel::instance(), &MultiFilterSortModel::filterFinished, this, &DiveListView::filterFinished); + connect(&diveListNotifier, &DiveListNotifier::tripChanged, this, &DiveListView::tripChanged); + header()->setStretchLastSection(true); header()->setSortIndicatorShown(true); header()->setSectionsClickable(true); @@ -292,6 +293,23 @@ void DiveListView::restoreSelection() } } +// This is a bit ugly: we hook directly into the tripChanged signal to +// select the trip if it was edited. This feels like a layering violation: +// Shouldn't the core-layer call us? +void DiveListView::tripChanged(dive_trip *trip, TripField) +{ + // First check if the trip is already selected (and only + // this trip, as only then is it displayed). Is so, then do nothing. + QList<dive_trip *> selected = selectedTrips(); + if (selected.size() == 1 && selected[0] == trip) + return; + + dontEmitDiveChangedSignal = true; + unselectDives(); + dontEmitDiveChangedSignal = false; + selectTrip(trip); +} + void DiveListView::selectTrip(dive_trip_t *trip) { if (!trip) @@ -318,7 +336,7 @@ void DiveListView::selectTrip(dive_trip_t *trip) void DiveListView::clearTripSelection() { // This marks the selection change as being internal - ie. we don't process it further. - // TODO: This should probably be sold differently. + // TODO: This should probably be done differently. auto marker = diveListNotifier.enterCommand(); // we want to make sure no trips are selected diff --git a/desktop-widgets/divelistview.h b/desktop-widgets/divelistview.h index 830447d92..35e985633 100644 --- a/desktop-widgets/divelistview.h +++ b/desktop-widgets/divelistview.h @@ -16,6 +16,7 @@ #include <QLineEdit> #include <QNetworkAccessManager> #include "qt-models/divetripmodel.h" +#include "core/subsurface-qt/DiveListNotifier.h" class DiveListView : public QTreeView { Q_OBJECT @@ -65,6 +66,7 @@ slots: void diveSelectionChanged(const QVector<QModelIndex> &indexes, bool select); void currentDiveChanged(QModelIndex index); void filterFinished(); + void tripChanged(dive_trip *trip, TripField); private: bool mouseClickSelection; QList<int> expandedRows; |