mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
c6dbbe1aac
In commit 50ebdd020e3c of the Kirigami project the syntax with which actions are added to pages has changed. This commit tracks that, adds the new file that was added in Kirigami and also removes the now obsolete context menus (since we have a working back button on iOS now) Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
213 lines
6.7 KiB
QML
213 lines
6.7 KiB
QML
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 currentItem: diveDetailsListView.currentItem
|
|
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 gps: detailsEdit.gpsText
|
|
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
|
|
property alias gpsCheckbox: detailsEdit.gpsCheckbox
|
|
property int updateCurrentIdx: manager.updateSelectedDive
|
|
|
|
property bool contentItem: true // HACK to work around Kirigami issue - remove once that's addressed upstream
|
|
|
|
title: diveDetailsListView.currentItem ? diveDetailsListView.currentItem.modelData.dive.location : "Dive details"
|
|
state: "view"
|
|
|
|
states: [
|
|
State {
|
|
name: "view"
|
|
PropertyChanges {
|
|
target: diveDetailsPage;
|
|
actions {
|
|
right: deleteAction
|
|
}
|
|
}
|
|
PropertyChanges { target: detailsEditScroll; opened: false }
|
|
},
|
|
State {
|
|
name: "edit"
|
|
PropertyChanges { target: detailsEditScroll; opened: true }
|
|
},
|
|
State {
|
|
name: "add"
|
|
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
|
|
var deletedIndex = diveDetailsListView.currentIndex
|
|
manager.deleteDive(deletedId)
|
|
stackView.pop()
|
|
showPassiveNotification("Dive deleted", 3000, "Undo",
|
|
function() {
|
|
diveDetailsListView.currentIndex = manager.undoDelete(deletedId) ? deletedIndex : diveDetailsListView.currentIndex
|
|
});
|
|
}
|
|
}
|
|
|
|
actions.main: 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
|
|
}
|
|
|
|
onUpdateCurrentIdxChanged: {
|
|
if (diveDetailsListView.currentIndex != updateCurrentIdx) {
|
|
diveDetailsListView.currentIndex = updateCurrentIdx
|
|
manager.selectedDiveTimestamp = diveDetailsListView.currentItem.modelData.dive.timestamp
|
|
}
|
|
}
|
|
|
|
onCurrentItemChanged: {
|
|
manager.selectedDiveTimestamp = diveDetailsListView.currentItem.modelData.dive.timestamp
|
|
}
|
|
|
|
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
|
|
gps = diveDetailsListView.currentItem.modelData.dive.gps
|
|
gpsCheckbox = false
|
|
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
|
|
}
|
|
}
|
|
}
|
|
}
|