QML UI: keep QML manager and the UI in sync about selected dive

The manager can now directly update the index of the selected dive, and
the UI tells the manager the timestamp of the currently selected dive.
This allows the manager to pick the best possible dive as selected dive
if things change (for example if the dive list gets reloaded because it
changed in cloud storage).

Fixes #1009

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2016-04-14 06:01:36 -07:00
parent 5909e438c9
commit 6e6cce770b
3 changed files with 50 additions and 0 deletions

View file

@ -9,6 +9,7 @@ import org.kde.kirigami 1.0 as Kirigami
Kirigami.Page {
id: diveDetailsPage
property alias currentIndex: diveDetailsListView.currentIndex
property alias currentItem: diveDetailsListView.currentItem
property alias dive_id: detailsEdit.dive_id
property alias number: detailsEdit.number
property alias date: detailsEdit.dateText
@ -25,6 +26,7 @@ Kirigami.Page {
property alias startpressure: detailsEdit.startpressureText
property alias endpressure: detailsEdit.endpressureText
property alias gasmix: detailsEdit.gasmixText
property int updateCurrentIdx: manager.updateSelectedDive
title: diveDetailsListView.currentItem ? diveDetailsListView.currentItem.modelData.dive.location : "Dive details"
state: "view"
@ -108,6 +110,17 @@ Kirigami.Page {
// if we were in view mode, don't accept the event and pop the page
}
onUpdateCurrentIdxChanged: {
if (diveDetailsListView.currentIndex != updateCurrentIdx) {
diveDetailsListView.currentIndex = updateCurrentIdx
manager.selectedDiveTimestamp = diveDetailsListView.currentItem.modelData.dive.timestamp
}
}
onCurrentItemChanged: {
manager.selectedDiveTimestamp = diveDetailsListView.currentItem.modelData.dive.timestamp
}
function showDiveIndex(index) {
currentIndex = index;
diveDetailsListView.positionViewAtIndex(index, ListView.Beginning);