2017-04-27 18:30:36 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
2016-01-12 00:15:02 +00:00
|
|
|
import QtQuick 2.4
|
2017-03-31 14:15:14 +00:00
|
|
|
import QtQuick.Controls 2.0
|
2015-07-21 12:00:29 +00:00
|
|
|
import QtQuick.Dialogs 1.2
|
2016-01-12 00:15:02 +00:00
|
|
|
import QtQuick.Layouts 1.2
|
2015-07-21 12:00:29 +00:00
|
|
|
import org.subsurfacedivelog.mobile 1.0
|
2017-03-31 14:15:14 +00:00
|
|
|
import org.kde.kirigami 2.0 as Kirigami
|
2015-07-21 12:00:29 +00:00
|
|
|
|
2016-03-08 20:26:54 +00:00
|
|
|
Kirigami.Page {
|
2017-03-18 21:19:18 +00:00
|
|
|
id: diveDetailsPage // but this is referenced as detailsWindow
|
2016-01-29 00:01:29 +00:00
|
|
|
property alias currentIndex: diveDetailsListView.currentIndex
|
2016-04-14 13:01:36 +00:00
|
|
|
property alias currentItem: diveDetailsListView.currentItem
|
2016-01-29 02:29:02 +00:00
|
|
|
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
|
2016-05-16 17:59:05 +00:00
|
|
|
property alias buddyIndex: detailsEdit.buddyIndex
|
2017-04-15 00:09:09 +00:00
|
|
|
property alias buddyText: detailsEdit.buddyText
|
2016-05-20 16:48:36 +00:00
|
|
|
property alias buddyModel: detailsEdit.buddyModel
|
2016-05-16 17:59:05 +00:00
|
|
|
property alias divemasterIndex: detailsEdit.divemasterIndex
|
2017-04-15 00:09:09 +00:00
|
|
|
property alias divemasterText: detailsEdit.divemasterText
|
2016-05-20 16:48:36 +00:00
|
|
|
property alias divemasterModel: detailsEdit.divemasterModel
|
2016-01-29 02:29:02 +00:00
|
|
|
property alias depth: detailsEdit.depthText
|
|
|
|
property alias duration: detailsEdit.durationText
|
|
|
|
property alias location: detailsEdit.locationText
|
2016-04-15 12:17:39 +00:00
|
|
|
property alias gps: detailsEdit.gpsText
|
2016-01-29 02:29:02 +00:00
|
|
|
property alias notes: detailsEdit.notesText
|
2016-05-16 17:59:05 +00:00
|
|
|
property alias suitIndex: detailsEdit.suitIndex
|
2017-04-15 00:09:09 +00:00
|
|
|
property alias suitText: detailsEdit.suitText
|
2016-05-20 16:48:36 +00:00
|
|
|
property alias suitModel: detailsEdit.suitModel
|
2016-01-29 02:29:02 +00:00
|
|
|
property alias weight: detailsEdit.weightText
|
2016-02-09 16:20:17 +00:00
|
|
|
property alias startpressure: detailsEdit.startpressureText
|
|
|
|
property alias endpressure: detailsEdit.endpressureText
|
2016-08-30 14:24:19 +00:00
|
|
|
property alias cylinderIndex: detailsEdit.cylinderIndex
|
2017-04-15 00:09:09 +00:00
|
|
|
property alias cylinderText: detailsEdit.cylinderText
|
2016-08-30 14:24:19 +00:00
|
|
|
property alias cylinderModel: detailsEdit.cylinderModel
|
2016-02-13 17:34:31 +00:00
|
|
|
property alias gasmix: detailsEdit.gasmixText
|
2016-04-15 12:17:39 +00:00
|
|
|
property alias gpsCheckbox: detailsEdit.gpsCheckbox
|
2016-04-14 13:01:36 +00:00
|
|
|
property int updateCurrentIdx: manager.updateSelectedDive
|
2017-07-28 15:43:26 +00:00
|
|
|
property alias rating: detailsEdit.rating
|
|
|
|
property alias visibility: detailsEdit.visibility
|
2016-01-12 02:01:15 +00:00
|
|
|
|
2017-06-21 23:30:10 +00:00
|
|
|
title: currentItem && currentItem.modelData ? currentItem.modelData.dive.location : qsTr("Dive details")
|
2016-01-20 22:07:06 +00:00
|
|
|
state: "view"
|
2016-04-19 17:11:07 +00:00
|
|
|
leftPadding: 0
|
2017-10-04 15:47:14 +00:00
|
|
|
topPadding: Kirigami.Units.gridUnit * 2 // make room for the title bar
|
2016-04-19 17:11:07 +00:00
|
|
|
rightPadding: 0
|
|
|
|
bottomPadding: 0
|
2016-01-20 22:07:06 +00:00
|
|
|
|
|
|
|
states: [
|
|
|
|
State {
|
|
|
|
name: "view"
|
2016-04-19 11:51:19 +00:00
|
|
|
PropertyChanges {
|
|
|
|
target: diveDetailsPage;
|
|
|
|
actions {
|
|
|
|
right: deleteAction
|
2017-06-21 23:30:10 +00:00
|
|
|
left: currentItem ? (currentItem.modelData && currentItem.modelData.dive.gps !== "" ? mapAction : null) : null
|
2016-04-19 11:51:19 +00:00
|
|
|
}
|
|
|
|
}
|
2016-01-20 22:07:06 +00:00
|
|
|
},
|
|
|
|
State {
|
|
|
|
name: "edit"
|
2017-10-04 19:22:36 +00:00
|
|
|
PropertyChanges {
|
|
|
|
target: diveDetailsPage;
|
|
|
|
actions {
|
|
|
|
right: cancelAction
|
|
|
|
left: null
|
|
|
|
}
|
|
|
|
}
|
2016-01-29 14:47:27 +00:00
|
|
|
},
|
|
|
|
State {
|
|
|
|
name: "add"
|
2017-10-04 19:22:36 +00:00
|
|
|
PropertyChanges {
|
|
|
|
target: diveDetailsPage;
|
|
|
|
actions {
|
|
|
|
right: cancelAction
|
|
|
|
left: null
|
|
|
|
}
|
|
|
|
}
|
2016-01-20 22:07:06 +00:00
|
|
|
}
|
2016-01-29 14:47:27 +00:00
|
|
|
|
2016-01-20 22:07:06 +00:00
|
|
|
]
|
2016-02-12 12:51:03 +00:00
|
|
|
|
2017-03-31 14:15:14 +00:00
|
|
|
property QtObject deleteAction: Kirigami.Action {
|
2016-05-03 19:24:00 +00:00
|
|
|
text: qsTr("Delete dive")
|
2016-03-24 03:33:17 +00:00
|
|
|
iconName: "trash-empty"
|
|
|
|
onTriggered: {
|
2017-06-21 23:30:10 +00:00
|
|
|
var deletedId = currentItem.modelData.dive.id
|
2016-04-11 19:10:46 +00:00
|
|
|
var deletedIndex = diveDetailsListView.currentIndex
|
2016-03-24 03:33:17 +00:00
|
|
|
manager.deleteDive(deletedId)
|
|
|
|
stackView.pop()
|
|
|
|
showPassiveNotification("Dive deleted", 3000, "Undo",
|
|
|
|
function() {
|
2016-04-11 19:10:46 +00:00
|
|
|
diveDetailsListView.currentIndex = manager.undoDelete(deletedId) ? deletedIndex : diveDetailsListView.currentIndex
|
2016-03-24 03:33:17 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-10-04 19:22:36 +00:00
|
|
|
property QtObject cancelAction: Kirigami.Action {
|
|
|
|
text: qsTr("Cancel edit")
|
|
|
|
iconName: "dialog-cancel"
|
|
|
|
onTriggered: {
|
|
|
|
endEditMode()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-31 14:15:14 +00:00
|
|
|
property QtObject mapAction: Kirigami.Action {
|
2016-05-03 19:24:00 +00:00
|
|
|
text: qsTr("Show on map")
|
2016-04-19 12:09:17 +00:00
|
|
|
iconName: "gps"
|
|
|
|
onTriggered: {
|
2017-06-21 23:30:10 +00:00
|
|
|
showMap(currentItem.modelData.dive.gps_decimal)
|
2016-04-19 12:09:17 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-31 14:15:14 +00:00
|
|
|
actions.main: Kirigami.Action {
|
2016-02-14 05:25:10 +00:00
|
|
|
iconName: state !== "view" ? "document-save" : "document-edit"
|
2016-01-12 00:15:02 +00:00
|
|
|
onTriggered: {
|
2017-03-18 21:25:59 +00:00
|
|
|
manager.appendTextToLog("save/edit button triggered")
|
2016-02-14 05:25:10 +00:00
|
|
|
if (state === "edit" || state === "add") {
|
|
|
|
detailsEdit.saveData()
|
2016-01-29 14:47:27 +00:00
|
|
|
} else {
|
2016-02-07 21:23:06 +00:00
|
|
|
startEditMode()
|
2015-12-04 02:32:52 +00:00
|
|
|
}
|
|
|
|
}
|
2016-01-12 00:15:02 +00:00
|
|
|
}
|
|
|
|
|
2016-02-08 16:41:42 +00:00
|
|
|
onBackRequested: {
|
2016-02-14 05:25:10 +00:00
|
|
|
if (state === "edit") {
|
|
|
|
endEditMode()
|
|
|
|
event.accepted = true;
|
|
|
|
} else if (state === "add") {
|
2016-03-31 01:48:50 +00:00
|
|
|
endEditMode()
|
2016-02-14 07:54:40 +00:00
|
|
|
stackView.pop()
|
2016-02-08 16:41:42 +00:00
|
|
|
event.accepted = true;
|
|
|
|
}
|
2016-02-14 05:25:10 +00:00
|
|
|
// if we were in view mode, don't accept the event and pop the page
|
2016-02-08 16:41:42 +00:00
|
|
|
}
|
|
|
|
|
2016-04-14 13:01:36 +00:00
|
|
|
onCurrentItemChanged: {
|
2017-06-21 23:30:10 +00:00
|
|
|
manager.selectedDiveTimestamp = currentItem.modelData.dive.timestamp
|
2016-04-14 13:01:36 +00:00
|
|
|
}
|
|
|
|
|
2016-01-12 00:15:02 +00:00
|
|
|
function showDiveIndex(index) {
|
2016-01-29 18:17:22 +00:00
|
|
|
currentIndex = index;
|
2017-03-19 00:00:07 +00:00
|
|
|
//diveDetailsListView.positionViewAtIndex(index, ListView.End);
|
2016-01-12 00:15:02 +00:00
|
|
|
}
|
2016-02-07 21:23:06 +00:00
|
|
|
|
2016-02-07 21:23:07 +00:00
|
|
|
function endEditMode() {
|
2016-03-31 01:48:50 +00:00
|
|
|
// if we were adding a dive, we need to remove it
|
|
|
|
if (state === "add")
|
|
|
|
manager.addDiveAborted(dive_id)
|
|
|
|
// just cancel the edit/add state
|
2016-02-07 21:23:07 +00:00
|
|
|
state = "view";
|
2017-07-31 16:52:01 +00:00
|
|
|
focus = false;
|
2016-02-07 21:23:07 +00:00
|
|
|
Qt.inputMethod.hide();
|
|
|
|
}
|
|
|
|
|
2016-02-07 21:23:06 +00:00
|
|
|
function startEditMode() {
|
2017-06-21 23:30:10 +00:00
|
|
|
if (!currentItem.modelData) {
|
|
|
|
console.log("DiveDetails trying to access undefined currentItem.modelData")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2016-02-07 21:23:06 +00:00
|
|
|
// set things up for editing - so make sure that the detailsEdit has
|
|
|
|
// all the right data (using the property aliases set up above)
|
2017-06-21 23:30:10 +00:00
|
|
|
dive_id = currentItem.modelData.dive.id
|
|
|
|
number = currentItem.modelData.dive.number
|
|
|
|
date = currentItem.modelData.dive.date + " " + currentItem.modelData.dive.time
|
|
|
|
location = currentItem.modelData.dive.location
|
|
|
|
gps = currentItem.modelData.dive.gps
|
2016-04-15 12:17:39 +00:00
|
|
|
gpsCheckbox = false
|
2017-06-21 23:30:10 +00:00
|
|
|
duration = currentItem.modelData.dive.duration
|
|
|
|
depth = currentItem.modelData.dive.depth
|
|
|
|
airtemp = currentItem.modelData.dive.airTemp
|
|
|
|
watertemp = currentItem.modelData.dive.waterTemp
|
|
|
|
suitIndex = currentItem.modelData.dive.suitList.indexOf(currentItem.modelData.dive.suit)
|
|
|
|
if (currentItem.modelData.dive.buddy.indexOf(",") > 0) {
|
|
|
|
buddyIndex = currentItem.modelData.dive.buddyList.indexOf(qsTr("Multiple Buddies"));
|
2016-09-12 18:30:07 +00:00
|
|
|
} else {
|
2017-06-21 23:30:10 +00:00
|
|
|
buddyIndex = currentItem.modelData.dive.buddyList.indexOf(currentItem.modelData.dive.buddy)
|
2016-09-12 18:30:07 +00:00
|
|
|
}
|
2017-06-21 23:30:10 +00:00
|
|
|
divemasterIndex = currentItem.modelData.dive.divemasterList.indexOf(currentItem.modelData.dive.divemaster)
|
|
|
|
notes = currentItem.modelData.dive.notes
|
|
|
|
if (currentItem.modelData.dive.singleWeight) {
|
2016-02-07 21:23:06 +00:00
|
|
|
// we have only one weight, go ahead, have fun and edit it
|
2017-06-21 23:30:10 +00:00
|
|
|
weight = currentItem.modelData.dive.sumWeight
|
2016-02-07 21:23:06 +00:00
|
|
|
} else {
|
|
|
|
// careful when translating, this text is "magic" in DiveDetailsEdit.qml
|
|
|
|
weight = "cannot edit multiple weight systems"
|
|
|
|
}
|
2017-06-21 23:30:10 +00:00
|
|
|
startpressure = currentItem.modelData.dive.startPressure
|
|
|
|
endpressure = currentItem.modelData.dive.endPressure
|
|
|
|
gasmix = currentItem.modelData.dive.firstGas
|
|
|
|
cylinderIndex = currentItem.modelData.dive.cylinderList.indexOf(currentItem.modelData.dive.getCylinder)
|
2017-07-28 15:43:26 +00:00
|
|
|
rating = currentItem.modelData.dive.rating
|
|
|
|
visibility = currentItem.modelData.dive.visibility
|
2016-02-07 21:23:06 +00:00
|
|
|
|
|
|
|
diveDetailsPage.state = "edit"
|
|
|
|
}
|
|
|
|
|
2016-03-08 20:26:54 +00:00
|
|
|
Item {
|
2015-11-11 23:40:13 +00:00
|
|
|
anchors.fill: parent
|
2017-10-04 19:22:36 +00:00
|
|
|
visible: diveDetailsPage.state == "view"
|
2017-03-31 14:15:14 +00:00
|
|
|
ListView {
|
|
|
|
id: diveDetailsListView
|
2015-11-30 00:12:47 +00:00
|
|
|
anchors.fill: parent
|
2017-03-31 14:15:14 +00:00
|
|
|
model: diveModel
|
|
|
|
currentIndex: -1
|
|
|
|
boundsBehavior: Flickable.StopAtBounds
|
|
|
|
maximumFlickVelocity: parent.width * 5
|
|
|
|
orientation: ListView.Horizontal
|
|
|
|
highlightFollowsCurrentItem: true
|
|
|
|
focus: true
|
|
|
|
clip: false
|
|
|
|
snapMode: ListView.SnapOneItem
|
|
|
|
highlightRangeMode: ListView.StrictlyEnforceRange
|
|
|
|
onMovementEnded: {
|
|
|
|
currentIndex = indexAt(contentX+1, 1);
|
|
|
|
}
|
|
|
|
delegate: Flickable {
|
|
|
|
id: internalScrollView
|
|
|
|
width: diveDetailsListView.width
|
|
|
|
height: diveDetailsListView.height
|
|
|
|
contentHeight: diveDetails.height
|
2016-03-08 20:26:54 +00:00
|
|
|
boundsBehavior: Flickable.StopAtBounds
|
2017-03-31 14:15:14 +00:00
|
|
|
property var modelData: model
|
|
|
|
DiveDetailsView {
|
|
|
|
id: diveDetails
|
|
|
|
width: internalScrollView.width
|
2015-12-04 00:38:04 +00:00
|
|
|
}
|
2017-03-31 14:15:14 +00:00
|
|
|
ScrollBar.vertical: ScrollBar { }
|
2015-07-21 12:00:29 +00:00
|
|
|
}
|
2017-03-31 14:15:14 +00:00
|
|
|
ScrollIndicator.horizontal: ScrollIndicator { }
|
2015-07-21 12:00:29 +00:00
|
|
|
}
|
2017-10-04 19:22:36 +00:00
|
|
|
}
|
2017-10-04 19:27:13 +00:00
|
|
|
Flickable {
|
|
|
|
id: detailsEditFlickable
|
2017-10-04 19:22:36 +00:00
|
|
|
visible: diveDetailsPage.state != "view" ? true : false
|
2017-10-04 19:27:13 +00:00
|
|
|
anchors.fill: parent
|
|
|
|
leftMargin: Kirigami.Units.smallSpacing
|
|
|
|
rightMargin: Kirigami.Units.smallSpacing
|
|
|
|
contentHeight: detailsEdit.height
|
|
|
|
DiveDetailsEdit {
|
|
|
|
id: detailsEdit
|
|
|
|
}
|
|
|
|
ScrollBar.vertical: ScrollBar { }
|
2016-01-12 00:15:02 +00:00
|
|
|
}
|
2015-07-21 12:00:29 +00:00
|
|
|
}
|