From 1b9581369af95bdf366f08c0d00d24c315d339bb Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Wed, 14 Aug 2019 23:53:28 +0200 Subject: Mobile: move tripId from DiveObjectHelper to DiveListModel The canonical way of displaying lists in Qt is via models. Thus, return the tripId directly from the DiveListModel instead of going indirectly via a DiveObjectHelper. In the future, this will allow us to make the DiveObjectHelper value-based, as it is not generated numerous times for every list item. Signed-off-by: Berthold Stoeger --- core/subsurface-qt/DiveObjectHelper.cpp | 5 ----- core/subsurface-qt/DiveObjectHelper.h | 2 -- mobile-widgets/qml/DiveList.qml | 8 ++++---- qt-models/divelistmodel.cpp | 3 +++ qt-models/divelistmodel.h | 1 + 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/core/subsurface-qt/DiveObjectHelper.cpp b/core/subsurface-qt/DiveObjectHelper.cpp index d7d92ee90..d4bcfc4e0 100644 --- a/core/subsurface-qt/DiveObjectHelper.cpp +++ b/core/subsurface-qt/DiveObjectHelper.cpp @@ -315,11 +315,6 @@ QVector DiveObjectHelper::cylinderObjects() const return res; } -QString DiveObjectHelper::tripId() const -{ - return m_dive->divetrip ? QString::number((quint64)m_dive->divetrip, 16) : QString(); -} - int DiveObjectHelper::tripNrDives() const { struct dive_trip *dt = m_dive->divetrip; diff --git a/core/subsurface-qt/DiveObjectHelper.h b/core/subsurface-qt/DiveObjectHelper.h index 11416b6c6..f08759389 100644 --- a/core/subsurface-qt/DiveObjectHelper.h +++ b/core/subsurface-qt/DiveObjectHelper.h @@ -40,7 +40,6 @@ class DiveObjectHelper : public QObject { Q_PROPERTY(QStringList cylinderList READ cylinderList CONSTANT) Q_PROPERTY(QStringList cylinders READ cylinders CONSTANT) Q_PROPERTY(QVector cylinderObjects READ cylinderObjects CONSTANT) - Q_PROPERTY(QString tripId READ tripId CONSTANT) Q_PROPERTY(int tripNrDives READ tripNrDives CONSTANT) Q_PROPERTY(int maxcns READ maxcns CONSTANT) Q_PROPERTY(int otu READ otu CONSTANT) @@ -83,7 +82,6 @@ public: QStringList cylinders() const; QString cylinder(int idx) const; QVector cylinderObjects() const; - QString tripId() const; int tripNrDives() const; int maxcns() const; int otu() const; diff --git a/mobile-widgets/qml/DiveList.qml b/mobile-widgets/qml/DiveList.qml index 23537ac79..6be6d6d8f 100644 --- a/mobile-widgets/qml/DiveList.qml +++ b/mobile-widgets/qml/DiveList.qml @@ -57,7 +57,7 @@ Kirigami.ScrollablePage { states: [ State { name: "isHidden"; - when: dive.tripId !== activeTrip && ! diveOutsideTrip + when: tripId !== activeTrip && ! diveOutsideTrip PropertyChanges { target: innerListItem height: 0 @@ -66,7 +66,7 @@ Kirigami.ScrollablePage { }, State { name: "isVisible"; - when: dive.tripId === activeTrip || diveOutsideTrip + when: tripId === activeTrip || diveOutsideTrip PropertyChanges { target: innerListItem height: diveListEntry.height + Kirigami.Units.smallSpacing @@ -129,7 +129,7 @@ Kirigami.ScrollablePage { Item { Rectangle { id: leftBarDive - width: dive.tripId == "" ? 0 : Kirigami.Units.smallSpacing + width: tripId == "" ? 0 : Kirigami.Units.smallSpacing height: diveListEntry.height * 0.8 color: subsurfaceTheme.lightPrimaryColor anchors { @@ -524,7 +524,7 @@ Kirigami.ScrollablePage { maximumFlickVelocity: parent.height * 5 bottomMargin: Kirigami.Units.iconSizes.medium + Kirigami.Units.gridUnit cacheBuffer: 40 // this will increase memory use, but should help with scrolling - section.property: "dive.tripId" + section.property: "tripId" section.criteria: ViewSection.FullString section.delegate: tripHeading section.labelPositioning: ViewSection.CurrentLabelAtStart | ViewSection.InlineLabels diff --git a/qt-models/divelistmodel.cpp b/qt-models/divelistmodel.cpp index cad745dd3..caa31dcae 100644 --- a/qt-models/divelistmodel.cpp +++ b/qt-models/divelistmodel.cpp @@ -240,9 +240,11 @@ QVariant DiveListModel::data(const QModelIndex &index, int role) const return QVariant(); DiveObjectHelper *curr_dive = m_dives[index.row()]; + const dive *d = curr_dive->getDive(); switch(role) { case DiveRole: return QVariant::fromValue(curr_dive); case DiveDateRole: return (qlonglong)curr_dive->timestamp(); + case TripIdRole: return d->divetrip ? QString::number((quint64)d->divetrip, 16) : QString(); } return QVariant(); @@ -253,6 +255,7 @@ QHash DiveListModel::roleNames() const QHash roles; roles[DiveRole] = "dive"; roles[DiveDateRole] = "date"; + roles[TripIdRole] = "tripId"; return roles; } diff --git a/qt-models/divelistmodel.h b/qt-models/divelistmodel.h index 5ac252d60..1cc3abb7d 100644 --- a/qt-models/divelistmodel.h +++ b/qt-models/divelistmodel.h @@ -38,6 +38,7 @@ public: enum DiveListRoles { DiveRole = Qt::UserRole + 1, DiveDateRole, + TripIdRole, }; static DiveListModel *instance(); -- cgit v1.2.3-70-g09d2