diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-06-26 19:16:40 -1000 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-07-04 23:00:12 -0700 |
commit | 5ce5b05521ee8d939fa4f2951eeec8021177ccdf (patch) | |
tree | 4f08175fcc018e6dc205d2a8e6e12e6d82299014 /qt-ui | |
parent | c7f8ada4ff5e84e2ea52e387806c640eee05f45f (diff) | |
download | subsurface-5ce5b05521ee8d939fa4f2951eeec8021177ccdf.tar.gz |
Qt: Implement trip merging logic
So during my Maui trip, I had a short hiatus in diving, causing
subsurface to start a new trip for the last day of diving. I could have
just started the old gtk branch to fix it up, but decided that I might
as well try to implement the "merge trip" logic in the Qt branch instead.
This is the end result of that.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/divelistview.cpp | 35 | ||||
-rw-r--r-- | qt-ui/divelistview.h | 3 | ||||
-rw-r--r-- | qt-ui/models.cpp | 3 | ||||
-rw-r--r-- | qt-ui/models.h | 2 |
4 files changed, 42 insertions, 1 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp index 480decd2d..4b856f601 100644 --- a/qt-ui/divelistview.cpp +++ b/qt-ui/divelistview.cpp @@ -298,6 +298,36 @@ void DiveListView::selectionChanged(const QItemSelection& selected, const QItemS Q_EMIT currentDiveChanged(selected_dive); } +void DiveListView::merge_trip(const QModelIndex &a, int offset) +{ + int i = a.row() + offset; + QModelIndex b = a.sibling(i,0); + + dive_trip_t *trip_a = (dive_trip_t *) a.data(DiveTripModel::TRIP_ROLE).value<void*>(); + dive_trip_t *trip_b = (dive_trip_t *) b.data(DiveTripModel::TRIP_ROLE).value<void*>(); + + if (trip_a == trip_b || !trip_a || !trip_b) + return; + + if (!trip_a->location) + trip_a->location = strdup(trip_b->location); + if (!trip_a->notes) + trip_a->notes = strdup(trip_b->notes); + while (trip_b->dives) + add_dive_to_trip(trip_b->dives, trip_a); + reload(currentLayout, false); +} + +void DiveListView::mergeTripAbove() +{ + merge_trip(contextMenuIndex, -1); +} + +void DiveListView::mergeTripBelow() +{ + merge_trip(contextMenuIndex, +1); +} + void DiveListView::removeFromTrip() { struct dive *d = (struct dive *) contextMenuIndex.data(DiveTripModel::DIVE_ROLE).value<void*>(); @@ -336,6 +366,7 @@ void DiveListView::contextMenuEvent(QContextMenuEvent *event) // let's remember where we are contextMenuIndex = indexAt(event->pos()); struct dive *d = (struct dive *) contextMenuIndex.data(DiveTripModel::DIVE_ROLE).value<void*>(); + dive_trip_t *trip = (dive_trip_t *) contextMenuIndex.data(DiveTripModel::TRIP_ROLE).value<void*>(); QMenu popup(this); if (currentLayout == DiveTripModel::TREE) { popup.addAction(tr("expand all"), this, SLOT(expandAll())); @@ -344,6 +375,10 @@ void DiveListView::contextMenuEvent(QContextMenuEvent *event) if (d) { popup.addAction(tr("remove dive from trip"), this, SLOT(removeFromTrip())); } + if (trip) { + popup.addAction(tr("Merge trip with trip above"), this, SLOT(mergeTripAbove())); + popup.addAction(tr("Merge trip with trip below"), this, SLOT(mergeTripBelow())); + } } if (d) popup.addAction(tr("delete dive"), this, SLOT(deleteDive())); diff --git a/qt-ui/divelistview.h b/qt-ui/divelistview.h index 3aee19128..1faa3613a 100644 --- a/qt-ui/divelistview.h +++ b/qt-ui/divelistview.h @@ -40,6 +40,8 @@ public slots: void deleteDive(); void testSlot(); void fixMessyQtModelBehaviour(); + void mergeTripAbove(); + void mergeTripBelow(); signals: void currentDiveChanged(int divenr); @@ -50,6 +52,7 @@ private: DiveTripModel::Layout currentLayout; QLineEdit *searchBox; QModelIndex contextMenuIndex; + void merge_trip(const QModelIndex &a, const int offset); }; #endif // DIVELISTVIEW_H diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index 0288e7107..1fd5f74cb 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -909,6 +909,9 @@ QVariant TripItem::data(int column, int role) const { QVariant ret; + if (role == DiveTripModel::TRIP_ROLE) + return QVariant::fromValue<void*>(trip); + if (role == DiveTripModel::SORT_ROLE) return (qulonglong)trip->when; diff --git a/qt-ui/models.h b/qt-ui/models.h index f6fb3f5c0..ec15174f6 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -162,7 +162,7 @@ public: enum Column {NR, DATE, RATING, DEPTH, DURATION, TEMPERATURE, TOTALWEIGHT, SUIT, CYLINDER, NITROX, SAC, OTU, MAXCNS, LOCATION, COLUMNS }; - enum ExtraRoles{STAR_ROLE = Qt::UserRole + 1, DIVE_ROLE, SORT_ROLE}; + enum ExtraRoles{STAR_ROLE = Qt::UserRole + 1, DIVE_ROLE, TRIP_ROLE, SORT_ROLE}; enum Layout{TREE, LIST, CURRENT}; Qt::ItemFlags flags(const QModelIndex &index) const; |