aboutsummaryrefslogtreecommitdiffstats
path: root/qt-mobile/qml/DiveDetails.qml
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-11 18:15:35 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-11 18:15:35 -0800
commit877efebaacedfb7e7dc01bc8b4a820826c376fbf (patch)
tree995b239e37da7a4e0664743c4396e2f1bf06f44c /qt-mobile/qml/DiveDetails.qml
parent3c8f7d72a2430b13edab2b4e57bf39baf2845ebb (diff)
parent142c8b218b1f9a4a3e217023531feedd7cf9713e (diff)
downloadsubsurface-877efebaacedfb7e7dc01bc8b4a820826c376fbf.tar.gz
Merge github.com:sebasje/subsurface
Diffstat (limited to 'qt-mobile/qml/DiveDetails.qml')
-rw-r--r--qt-mobile/qml/DiveDetails.qml207
1 files changed, 78 insertions, 129 deletions
diff --git a/qt-mobile/qml/DiveDetails.qml b/qt-mobile/qml/DiveDetails.qml
index 0dd380311..cae8aab0c 100644
--- a/qt-mobile/qml/DiveDetails.qml
+++ b/qt-mobile/qml/DiveDetails.qml
@@ -1,149 +1,98 @@
-import QtQuick 2.3
+import QtQuick 2.4
import QtQuick.Controls 1.4
-import QtQuick.Controls.Styles 1.2
+import QtQuick.Controls.Styles 1.4
import QtQuick.Dialogs 1.2
-import QtQuick.Layouts 1.1
+import QtQuick.Layouts 1.2
import org.subsurfacedivelog.mobile 1.0
import org.kde.plasma.mobilecomponents 0.2 as MobileComponents
MobileComponents.Page {
- id: diveDetailsWindow
- width: parent.width
- objectName: "DiveDetails"
+ id: page
+ objectName: "DiveList"
+ property alias currentIndex: diveListView.currentIndex
- property string location
- property string gps
- property string depth
- property string dive_id
- property string diveNumber
- property string duration
- property string airtemp
- property string watertemp
- property string suit
- property int rating
- property string buddy
- property string divemaster;
- property string notes;
- property string date
- property string number
- property string weight
- state: "view"
-
- states: [
- State {
- name: "view"
- PropertyChanges { target: detailsView; opacity: 1 }
- PropertyChanges { target: detailsEdit; opacity: 0 }
- },
- State {
- name: "edit"
- PropertyChanges { target: detailsView; opacity: 0 }
- PropertyChanges { target: detailsEdit; opacity: 1 }
- }
- ]
- property list<Action> viewActions: [
- Action {
- id: editSelector
- text: "Edit"
- iconName: "document-edit"
- onTriggered: {
- diveDetailsWindow.state = "edit"
- contextDrawer.close()
- }
- }
- ]
- property list<Action> editActions: [
- Action {
- id: cancelSelector
- text: "Cancel"
- iconName: "dialog-cancel"
- onTriggered: {
- // reset the fields in the edit screen
- detailsEdit.dateText = date
- detailsEdit.locationText = location
- detailsEdit.durationText = duration
- detailsEdit.depthText = depth
- detailsEdit.airtempText = airtemp
- detailsEdit.watertempText = watertemp
- detailsEdit.suitText = suit
- detailsEdit.buddyText = buddy
- detailsEdit.divemasterText = divemaster
- detailsEdit.notesText = notes
- // back to view state and close the drawer
- diveDetailsWindow.state = "view"
- contextDrawer.close()
- }
- },
- Action {
- id: saveSelector
- text: "Save"
- iconName: "document-save"
- onTriggered: {
- // apply the changes to the dive_table
- notes = manager.commitChanges(dive_id, detailsEdit.dateText, detailsEdit.locationText, detailsEdit.gpsText, detailsEdit.durationText,
- detailsEdit.depthText, detailsEdit.airtempText, detailsEdit.watertempText, detailsEdit.suitText,
- detailsEdit.buddyText, detailsEdit.divemasterText, detailsEdit.notesText)
- // apply the changes to the dive detail view
- date = detailsEdit.dateText
- location = detailsEdit.locationText
- duration = detailsEdit.durationText
- depth = detailsEdit.depthText
- airtemp = detailsEdit.airtempText
- watertemp = detailsEdit.watertempText
- suit = detailsEdit.suitText
- buddy = detailsEdit.buddyText
- divemaster = detailsEdit.divemasterText
- // back to view state and close the drawer
- diveDetailsWindow.state = "view"
- contextDrawer.close()
+ mainAction: Action {
+ iconName: editDrawer.opened ? "dialog-cancel" : "document-edit"
+ onTriggered: {
+ if (editDrawer.opened) {
+ editDrawer.close();
+ 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
+ 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
+ editDrawer.open();
}
- ]
- contextualActions: diveDetailsWindow.state === "view" ? viewActions : editActions
+ }
+
+ function showDiveIndex(index) {
+ diveListView.currentIndex = index;
+ diveListView.positionViewAtIndex(diveListView.currentIndex, ListView.Beginning);
+ }
+ onWidthChanged: diveListView.positionViewAtIndex(diveListView.currentIndex, ListView.Beginning);
ScrollView {
anchors.fill: parent
- Flickable {
- id: flick
+ ListView {
+ id: diveListView
anchors.fill: parent
- contentHeight: content.height
- interactive: contentHeight > height
+ model: diveModel
+ currentIndex: -1
+ boundsBehavior: Flickable.StopAtBounds
+ maximumFlickVelocity: parent.width/4
+ //cacheBuffer: parent.width/2
+ orientation: ListView.Horizontal
+ focus: true
clip: true
- Item {
- id: content
- width: flick.width
- height: childrenRect.height + MobileComponents.Units.smallSpacing * 2
-
- DiveDetailsEdit {
- id: detailsEdit
- anchors {
- left: parent.left
- right: parent.right
- top: parent.top
- margins: MobileComponents.Units.gridUnit / 2
- }
- visible: opacity > 0
-
- Behavior on opacity {
- NumberAnimation { duration: MobileComponents.Units.shortDuration }
- }
- }
- DiveDetailsView {
- id: detailsView
- anchors {
- left: parent.left
- right: parent.right
- top: parent.top
- margins: MobileComponents.Units.gridUnit / 2
- }
- visible: opacity > 0
-
- Behavior on opacity {
- NumberAnimation { duration: MobileComponents.Units.shortDuration }
+ 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
+ DiveDetailsView {
+ id: diveDetails
+ width: internalScrollView.width
}
-
}
}
}
}
+ MobileComponents.OverlayDrawer {
+ id: editDrawer
+ anchors.fill: parent
+ edge: Qt.BottomEdge
+ contentItem: DiveDetailsEdit {
+ id: detailsEdit
+ implicitHeight: page.height - MobileComponents.Units.gridUnit*3
+ }
+ // Close the editDrawer when the pageStack navigates away, for example going
+ // back to the listview after the Back button was pressed
+ Connections {
+ target: rootItem.pageStack
+ onCurrentPageChanged: {
+ editDrawer.close();
+ }
+ }
+ }
+
}