diff options
author | Sebastian Kügler <sebas@kde.org> | 2016-01-12 01:15:02 +0100 |
---|---|---|
committer | Sebastian Kügler <sebas@kde.org> | 2016-01-12 03:06:09 +0100 |
commit | 6540e95425eb4c8aad56c5c5388c25b2180817cb (patch) | |
tree | 31ee60379f86868814b82e363719abc744d4a62c /qt-mobile/qml/DiveDetails.qml | |
parent | 9e85d767668faec8feec51ed00ed7c5b3db90cb3 (diff) | |
download | subsurface-6540e95425eb4c8aad56c5c5388c25b2180817cb.tar.gz |
dive details navigation
This patch reworks the navigation of the dive details.
- The detailsview is now a list view with page-sized delegates. This
allows horizontal swiping to the next and previous dive.
- The central button now allows to open the edit mode for the dive.
Original patch was done by Marco Martin, but needed to be reapplied by
hand.
Signed-off-by: Sebastian Kügler <sebas@kde.org>
Diffstat (limited to 'qt-mobile/qml/DiveDetails.qml')
-rw-r--r-- | qt-mobile/qml/DiveDetails.qml | 196 |
1 files changed, 66 insertions, 130 deletions
diff --git a/qt-mobile/qml/DiveDetails.qml b/qt-mobile/qml/DiveDetails.qml index 0dd380311..1285d185a 100644 --- a/qt-mobile/qml/DiveDetails.qml +++ b/qt-mobile/qml/DiveDetails.qml @@ -1,149 +1,85 @@ -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" - - 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() + id: page + objectName: "DiveList" + property alias currentIndex: diveListView.currentIndex + mainAction: Action { + iconName: editDrawer.opened ? "dialog-cancel" : "document-edit" + onTriggered: { + if (editDrawer.opened) { + editDrawer.close(); + return; } + 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 } + 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 } } - 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 } - } - - } } } } + MobileComponents.OverlayDrawer { + id: editDrawer + anchors.fill: parent + edge: Qt.BottomEdge + contentItem: DiveDetailsEdit { + id: detailsEdit + implicitHeight: page.height - MobileComponents.Units.gridUnit*3 + } + } + } |