From 35e60a7355e23b50fc7f48f48efe68a26b445454 Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Tue, 26 Jan 2016 20:06:30 -0800 Subject: QML UI: don't combine multiple trips to the same location into one The way sectioning of the dive list works is by watching for different strings in the section.property. In order to be able to tell different trips apart we combine the address of the dive trip variable with the location (which will create a new section for a new trip, even if the location text is the same) and then strip that information out before showing the trip header. Signed-off-by: Dirk Hohndel --- qt-mobile/qml/DiveList.qml | 16 ++++++++++++++-- subsurface-core/subsurface-qt/DiveObjectHelper.cpp | 10 ++++++++++ subsurface-core/subsurface-qt/DiveObjectHelper.h | 2 ++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/qt-mobile/qml/DiveList.qml b/qt-mobile/qml/DiveList.qml index 21858afb4..7b300ed24 100644 --- a/qt-mobile/qml/DiveList.qml +++ b/qt-mobile/qml/DiveList.qml @@ -106,7 +106,19 @@ MobileComponents.Page { MobileComponents.Heading { id: sectionText - text: {section == "--" ? "" : section } + text: { + // if the tripMeta (which we get as "section") ends in ::-- we know + // that there's no trip -- otherwise strip the meta information before + // the :: and show the trip location + var shownText + var endsWithDoubleDash = /::--$/; + if (endsWithDoubleDash.test(section)) { + shownText = "" + } else { + shownText = section.replace(/.*::/, "") + } + shownText + } anchors { top: parent.top left: parent.left @@ -150,7 +162,7 @@ MobileComponents.Page { boundsBehavior: Flickable.StopAtBounds maximumFlickVelocity: parent.height * 5 cacheBuffer: 0 // seems to avoid empty rendered profiles - section.property: "dive.trip" + section.property: "dive.tripMeta" section.criteria: ViewSection.FullString section.delegate: tripHeading header: MobileComponents.Heading { diff --git a/subsurface-core/subsurface-qt/DiveObjectHelper.cpp b/subsurface-core/subsurface-qt/DiveObjectHelper.cpp index 78c1dfc63..e29bd3802 100644 --- a/subsurface-core/subsurface-qt/DiveObjectHelper.cpp +++ b/subsurface-core/subsurface-qt/DiveObjectHelper.cpp @@ -219,6 +219,16 @@ QString DiveObjectHelper::trip() const return m_dive->divetrip ? m_dive->divetrip->location : EMPTY_DIVE_STRING; } +// combine the pointer address with the trip location so that +// we detect multiple, destinct trips to the same location +QString DiveObjectHelper::tripMeta() const +{ + QString ret = EMPTY_DIVE_STRING; + if (m_dive->divetrip) + ret = QString::number((quint64)m_dive->divetrip, 16) + QLatin1Literal("::") + m_dive->divetrip->location; + return ret; +} + QString DiveObjectHelper::maxcns() const { return QString(m_dive->maxcns); diff --git a/subsurface-core/subsurface-qt/DiveObjectHelper.h b/subsurface-core/subsurface-qt/DiveObjectHelper.h index 4d1e1acb2..84c93465e 100644 --- a/subsurface-core/subsurface-qt/DiveObjectHelper.h +++ b/subsurface-core/subsurface-qt/DiveObjectHelper.h @@ -29,6 +29,7 @@ class DiveObjectHelper : public QObject { Q_PROPERTY(QString suit READ suit CONSTANT) Q_PROPERTY(QStringList cylinders READ cylinders CONSTANT) Q_PROPERTY(QString trip READ trip CONSTANT) + Q_PROPERTY(QString tripMeta READ tripMeta CONSTANT) Q_PROPERTY(QString maxcns READ maxcns CONSTANT) Q_PROPERTY(QString otu READ otu CONSTANT) public: @@ -58,6 +59,7 @@ public: QStringList cylinders() const; QString cylinder(int idx) const; QString trip() const; + QString tripMeta() const; QString maxcns() const; QString otu() const; -- cgit v1.2.3-70-g09d2