aboutsummaryrefslogtreecommitdiffstats
path: root/qt-mobile/qml/DiveDetails.qml
blob: 1808bc5c5c739143bc905a130a430b760730f7c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import QtQuick 2.4
import QtQuick.Controls 1.4
import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.2
import org.subsurfacedivelog.mobile 1.0
import org.kde.plasma.mobilecomponents 0.2 as MobileComponents

MobileComponents.Page {
	id: diveDetailsPage
	property alias currentIndex: diveListView.currentIndex

	state: "view"

	states: [
		State {
			name: "view"
			PropertyChanges { target: diveDetailList; visible: true }
			PropertyChanges { target: detailsEditScroll; visible: false }
		},
		State {
			name: "edit"
			PropertyChanges { target: diveDetailList; visible: false }
			PropertyChanges { target: detailsEditScroll; visible: true }
		}
	]
	mainAction: Action {
		iconName: state === "edit" ? "dialog-cancel" : "document-edit"
		onTriggered: {
			if (state === "edit") {
				state = "view"
				return
			}
			// After saving, the list may be shuffled, so first of all make sure that
			// the listview's currentIndex is the visible item
			// This makes sure that we always edit the currently visible item
			diveListView.currentIndex = diveListView.indexAt(diveListView.contentX+1, 1);
			detailsEdit.dive_id = diveListView.currentItem.modelData.dive.id
			detailsEdit.number = diveListView.currentItem.modelData.dive.number
			detailsEdit.dateText = diveListView.currentItem.modelData.dive.date + " " + diveListView.currentItem.modelData.dive.time
			detailsEdit.locationText = diveListView.currentItem.modelData.dive.location
			detailsEdit.durationText = diveListView.currentItem.modelData.dive.duration
			detailsEdit.depthText = diveListView.currentItem.modelData.dive.depth
			detailsEdit.airtempText = diveListView.currentItem.modelData.dive.airTemp
			detailsEdit.watertempText = diveListView.currentItem.modelData.dive.waterTemp
			detailsEdit.suitText = diveListView.currentItem.modelData.dive.suit
			detailsEdit.buddyText = diveListView.currentItem.modelData.dive.buddy
			detailsEdit.divemasterText = diveListView.currentItem.modelData.dive.divemaster
			detailsEdit.notesText = diveListView.currentItem.modelData.dive.notes
			detailsEdit.forcedWidth = diveDetailsPage.width
			diveDetailsPage.state = "edit"
		}
	}

	function showDiveIndex(index) {
		diveListView.currentIndex = index;
		diveListView.positionViewAtIndex(diveListView.currentIndex, ListView.Beginning);
	}
	onWidthChanged: diveListView.positionViewAtIndex(diveListView.currentIndex, ListView.Beginning);

	ScrollView {
		id: diveDetailList
		anchors.fill: parent
		ListView {
			id: diveListView
			anchors.fill: parent
			model: diveModel
			currentIndex: -1
			boundsBehavior: Flickable.StopAtBounds
			maximumFlickVelocity: parent.width/4
			orientation: ListView.Horizontal
			focus: true
			clip: true
			snapMode: ListView.SnapOneItem
			onMovementEnded: {
				currentIndex = indexAt(contentX+1, 1);
			}
			delegate: ScrollView {
				id: internalScrollView
				width: diveListView.width
				height: diveListView.height
				property var modelData: model
				Flickable {
					//contentWidth: parent.width
					contentHeight: diveDetails.height
					boundsBehavior: Flickable.StopAtBounds
					DiveDetailsView {
						id: diveDetails
						width: internalScrollView.width
					}
				}
			}
		}
	}
	Flickable {
		id: detailsEditScroll
		anchors.fill: parent
		anchors.margins: MobileComponents.Units.gridUnit
		contentWidth: contentItem.childrenRect.width;
		contentHeight: contentItem.childrenRect.height
		clip: true
		bottomMargin: MobileComponents.Units.gridUnit * 3
		DiveDetailsEdit {
			id: detailsEdit
		}
	}
}