summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-12-06 14:14:00 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-03-10 09:25:57 -0700
commit1f669f9714ec87657eb276dc538822d8abbe77a5 (patch)
tree64502e1420d1f405c2ec40ae3cbb81fafe350088
parent0fc82e33987ec982d6a49440dcc28e17782d6ed7 (diff)
downloadsubsurface-1f669f9714ec87657eb276dc538822d8abbe77a5.tar.gz
mobile/divelist: when clicking on a row, use select_single_dive()
This is a small step in unifying mobile and desktop. I'm unsure whether it is correct to play this via the QMLManager or whether we should call form QML directly into the model? Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--mobile-widgets/qml/DiveList.qml2
-rw-r--r--mobile-widgets/qmlmanager.cpp13
-rw-r--r--mobile-widgets/qmlmanager.h1
3 files changed, 15 insertions, 1 deletions
diff --git a/mobile-widgets/qml/DiveList.qml b/mobile-widgets/qml/DiveList.qml
index 0aa3772e7..94289c6b7 100644
--- a/mobile-widgets/qml/DiveList.qml
+++ b/mobile-widgets/qml/DiveList.qml
@@ -54,7 +54,7 @@ Kirigami.ScrollablePage {
} else {
manager.appendTextToLog("clicked on dive")
if (detailsWindow.state === "view") {
- detailsWindow.showDiveIndex(id); // we need access to dive->id
+ manager.selectRow(model.row);
// switch to detailsWindow (or push it if it's not in the stack)
var i = rootItem.pageIndex(detailsWindow)
if (i === -1)
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 3cc8ed0c5..06267d590 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -365,6 +365,19 @@ void QMLManager::openLocalThenRemote(QString url)
updateAllGlobalLists();
}
+// Convenience function to accesss dive directly via its row.
+static struct dive *diveInRow(const QAbstractItemModel *model, int row)
+{
+ QModelIndex index = model->index(row, 0, QModelIndex());
+ return index.isValid() ? model->data(index, DiveTripModelBase::DIVE_ROLE).value<struct dive *>() : nullptr;
+}
+
+void QMLManager::selectRow(int row)
+{
+ dive *d = diveInRow(MobileListModel::instance(), row);
+ select_single_dive(d);
+}
+
void QMLManager::updateSiteList()
{
LocationInformationModel::instance()->update();
diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h
index 367faf325..482ba7ecc 100644
--- a/mobile-widgets/qmlmanager.h
+++ b/mobile-widgets/qmlmanager.h
@@ -106,6 +106,7 @@ public:
Q_INVOKABLE int getConnectionIndex(const QString &deviceSubstr);
Q_INVOKABLE void setGitLocalOnly(const bool &value);
Q_INVOKABLE void setFilter(const QString filterText, int mode);
+ Q_INVOKABLE void selectRow(int row);
static QMLManager *instance();
Q_INVOKABLE void registerError(QString error);