summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-02-24 22:26:08 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-04-12 18:19:07 +0300
commit7924c7dafb3950116bb553eff35d7801cd5e1c54 (patch)
treebf11d1959579f471a39228eeae88a759e985811c
parent91c33b475ce85eaf1a987a29938a198415c04799 (diff)
downloadsubsurface-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>
-rw-r--r--desktop-widgets/divelistview.cpp22
-rw-r--r--desktop-widgets/divelistview.h2
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;