summaryrefslogtreecommitdiffstats
path: root/mobile-widgets/qml/DiveDetails.qml
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-04 22:02:03 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-04-04 22:33:58 -0700
commit7be962bfc2879a72c32ff67518731347dcdff6de (patch)
treed05bf7ab234a448ee37a15b608e2b939f2285d07 /mobile-widgets/qml/DiveDetails.qml
parent2d760a7bff71c46c5aeba37c40d236ea16eefea2 (diff)
downloadsubsurface-7be962bfc2879a72c32ff67518731347dcdff6de.tar.gz
Move subsurface-core to core and qt-mobile to mobile-widgets
Having subsurface-core as a directory name really messes with autocomplete and is obviously redundant. Simmilarly, qt-mobile caused an autocomplete conflict and also was inconsistent with the desktop-widget name for the directory containing the "other" UI. And while cleaning up the resulting change in the path name for include files, I decided to clean up those even more to make them consistent overall. This could have been handled in more commits, but since this requires a make clean before the build, it seemed more sensible to do it all in one. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'mobile-widgets/qml/DiveDetails.qml')
-rw-r--r--mobile-widgets/qml/DiveDetails.qml216
1 files changed, 216 insertions, 0 deletions
diff --git a/mobile-widgets/qml/DiveDetails.qml b/mobile-widgets/qml/DiveDetails.qml
new file mode 100644
index 000000000..108833470
--- /dev/null
+++ b/mobile-widgets/qml/DiveDetails.qml
@@ -0,0 +1,216 @@
+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.kirigami 1.0 as Kirigami
+
+Kirigami.Page {
+ id: diveDetailsPage
+ property alias currentIndex: diveDetailsListView.currentIndex
+ property alias dive_id: detailsEdit.dive_id
+ property alias number: detailsEdit.number
+ property alias date: detailsEdit.dateText
+ property alias airtemp: detailsEdit.airtempText
+ property alias watertemp: detailsEdit.watertempText
+ property alias buddy: detailsEdit.buddyText
+ property alias divemaster: detailsEdit.divemasterText
+ property alias depth: detailsEdit.depthText
+ property alias duration: detailsEdit.durationText
+ property alias location: detailsEdit.locationText
+ property alias notes: detailsEdit.notesText
+ property alias suit: detailsEdit.suitText
+ property alias weight: detailsEdit.weightText
+ property alias startpressure: detailsEdit.startpressureText
+ property alias endpressure: detailsEdit.endpressureText
+ property alias gasmix: detailsEdit.gasmixText
+
+ topPadding: applicationWindow().header.Layout.preferredHeight
+ leftPadding: 0
+ rightPadding: 0
+ bottomPadding: 0
+
+ title: diveDetailsListView.currentItem.modelData.dive.location
+ state: "view"
+
+ states: [
+ State {
+ name: "view"
+ PropertyChanges { target: diveDetailsPage; contextualActions: Qt.platform.os == "ios" ? [ deleteAction, backAction ] : [ deleteAction ] }
+ PropertyChanges { target: detailsEditScroll; opened: false }
+ },
+ State {
+ name: "edit"
+ PropertyChanges { target: diveDetailsPage; contextualActions: Qt.platform.os == "ios" ? [ cancelAction ] : null }
+ PropertyChanges { target: detailsEditScroll; opened: true }
+ },
+ State {
+ name: "add"
+ PropertyChanges { target: diveDetailsPage; contextualActions: Qt.platform.os == "ios" ? [ cancelAction ] : null }
+ PropertyChanges { target: detailsEditScroll; opened: true }
+ }
+
+ ]
+
+ property QtObject deleteAction: Action {
+ text: "Delete dive"
+ iconName: "trash-empty"
+ onTriggered: {
+ contextDrawer.close()
+ var deletedId = diveDetailsListView.currentItem.modelData.dive.id
+ manager.deleteDive(deletedId)
+ stackView.pop()
+ showPassiveNotification("Dive deleted", 3000, "Undo",
+ function() {
+ manager.undoDelete(deletedId)
+ });
+ }
+ }
+
+ property QtObject cancelAction: Kirigami.Action {
+ text: state === "edit" ? "Cancel edit" : "Cancel dive add"
+ iconName: "dialog-cancel"
+ onTriggered: {
+ contextDrawer.close()
+ if (state === "add")
+ returnTopPage()
+ else
+ endEditMode()
+ }
+ }
+
+ property QtObject backAction: Action {
+ text: "Back to dive list"
+ iconName: "go-previous"
+ onTriggered: {
+ contextDrawer.close()
+ returnTopPage()
+ }
+ }
+
+ mainAction: Action {
+ iconName: state !== "view" ? "document-save" : "document-edit"
+ onTriggered: {
+ if (state === "edit" || state === "add") {
+ detailsEdit.saveData()
+ } else {
+ startEditMode()
+ }
+ }
+ }
+
+ onBackRequested: {
+ if (state === "edit") {
+ endEditMode()
+ event.accepted = true;
+ } else if (state === "add") {
+ endEditMode()
+ stackView.pop()
+ event.accepted = true;
+ }
+ // if we were in view mode, don't accept the event and pop the page
+ }
+
+ function showDiveIndex(index) {
+ currentIndex = index;
+ diveDetailsListView.positionViewAtIndex(index, ListView.Beginning);
+ }
+
+ function endEditMode() {
+ // if we were adding a dive, we need to remove it
+ if (state === "add")
+ manager.addDiveAborted(dive_id)
+ // just cancel the edit/add state
+ state = "view";
+ Qt.inputMethod.hide();
+ }
+
+ function startEditMode() {
+ // set things up for editing - so make sure that the detailsEdit has
+ // all the right data (using the property aliases set up above)
+ dive_id = diveDetailsListView.currentItem.modelData.dive.id
+ number = diveDetailsListView.currentItem.modelData.dive.number
+ date = diveDetailsListView.currentItem.modelData.dive.date + " " + diveDetailsListView.currentItem.modelData.dive.time
+ location = diveDetailsListView.currentItem.modelData.dive.location
+ duration = diveDetailsListView.currentItem.modelData.dive.duration
+ depth = diveDetailsListView.currentItem.modelData.dive.depth
+ airtemp = diveDetailsListView.currentItem.modelData.dive.airTemp
+ watertemp = diveDetailsListView.currentItem.modelData.dive.waterTemp
+ suit = diveDetailsListView.currentItem.modelData.dive.suit
+ buddy = diveDetailsListView.currentItem.modelData.dive.buddy
+ divemaster = diveDetailsListView.currentItem.modelData.dive.divemaster
+ notes = diveDetailsListView.currentItem.modelData.dive.notes
+ if (diveDetailsListView.currentItem.modelData.dive.singleWeight) {
+ // we have only one weight, go ahead, have fun and edit it
+ weight = diveDetailsListView.currentItem.modelData.dive.sumWeight
+ } else {
+ // careful when translating, this text is "magic" in DiveDetailsEdit.qml
+ weight = "cannot edit multiple weight systems"
+ }
+ if (diveDetailsListView.currentItem.modelData.dive.getCylinder != "Multiple" ) {
+ startpressure = diveDetailsListView.currentItem.modelData.dive.startPressure
+ endpressure = diveDetailsListView.currentItem.modelData.dive.endPressure
+ gasmix = diveDetailsListView.currentItem.modelData.dive.firstGas
+ } else {
+ // careful when translating, this text is "magic" in DiveDetailsEdit.qml
+ startpressure = "cannot edit multiple cylinders"
+ endpressure = "cannot edit multiple cylinders"
+ gasmix = "cannot edit multiple gases"
+ }
+
+ diveDetailsPage.state = "edit"
+ }
+
+ onWidthChanged: diveDetailsListView.positionViewAtIndex(diveDetailsListView.currentIndex, ListView.Beginning);
+
+ Item {
+ anchors.fill: parent
+ ScrollView {
+ id: diveDetailList
+ anchors.fill: parent
+ ListView {
+ id: diveDetailsListView
+ anchors.fill: parent
+ model: diveModel
+ currentIndex: -1
+ boundsBehavior: Flickable.StopAtBounds
+ maximumFlickVelocity: parent.width * 5
+ orientation: ListView.Horizontal
+ focus: true
+ clip: true
+ snapMode: ListView.SnapOneItem
+ onMovementEnded: {
+ currentIndex = indexAt(contentX+1, 1);
+ }
+ delegate: ScrollView {
+ id: internalScrollView
+ width: diveDetailsListView.width
+ height: diveDetailsListView.height
+ property var modelData: model
+ Flickable {
+ //contentWidth: parent.width
+ contentHeight: diveDetails.height
+ boundsBehavior: Flickable.StopAtBounds
+ DiveDetailsView {
+ id: diveDetails
+ width: internalScrollView.width
+ }
+ }
+ }
+ }
+ }
+ Kirigami.OverlaySheet {
+ id: detailsEditScroll
+ anchors.fill: parent
+ onOpenedChanged: {
+ if (!opened) {
+ endEditMode()
+ }
+ }
+ DiveDetailsEdit {
+ id: detailsEdit
+ }
+ }
+ }
+}