QML UI: introduce "add" state and correctly clean up when canceled

Adding a dive is just like editing it, except that canceling the operation
has different consequences. Instead of trying to figure this out by some
inference on other state, let's just make it explicit and then clean up
after ourselves if the user canceled a manual dive add.

This also switches to use the properties that we defined in order for the
main menu to be able to setup these values. Makes the code easier to read
and is more consistent.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2016-01-29 06:47:27 -08:00
parent 9f7ecbb53e
commit 0eae59bcd2
2 changed files with 30 additions and 16 deletions

View file

@ -35,30 +35,44 @@ MobileComponents.Page {
name: "edit" name: "edit"
PropertyChanges { target: diveDetailList; visible: false } PropertyChanges { target: diveDetailList; visible: false }
PropertyChanges { target: detailsEditScroll; visible: true } PropertyChanges { target: detailsEditScroll; visible: true }
},
State {
name: "add"
PropertyChanges { target: diveDetailList; visible: false }
PropertyChanges { target: detailsEditScroll; visible: true }
} }
] ]
mainAction: Action { mainAction: Action {
iconName: state === "edit" ? "dialog-cancel" : "document-edit" iconName: state !== "view" ? "dialog-cancel" : "document-edit"
onTriggered: { onTriggered: {
if (state === "edit") { if (state === "edit") {
// just cancel the edit state
state = "view" state = "view"
return } else if (state === "add") {
} // edit was canceled - so remove the dive from the dive list
detailsEdit.dive_id = diveDetailsListView.currentItem.modelData.dive.id manager.addDiveAborted(dive_id)
detailsEdit.number = diveDetailsListView.currentItem.modelData.dive.number state = "view"
detailsEdit.dateText = diveDetailsListView.currentItem.modelData.dive.date + " " + diveDetailsListView.currentItem.modelData.dive.time } else {
detailsEdit.locationText = diveDetailsListView.currentItem.modelData.dive.location // set things up for editing - so make sure that the detailsEdit has
detailsEdit.durationText = diveDetailsListView.currentItem.modelData.dive.duration // all the right data (using the property aliases set up above)
detailsEdit.depthText = diveDetailsListView.currentItem.modelData.dive.depth dive_id = diveDetailsListView.currentItem.modelData.dive.id
detailsEdit.airtempText = diveDetailsListView.currentItem.modelData.dive.airTemp number = diveDetailsListView.currentItem.modelData.dive.number
detailsEdit.watertempText = diveDetailsListView.currentItem.modelData.dive.waterTemp date = diveDetailsListView.currentItem.modelData.dive.date + " " + diveDetailsListView.currentItem.modelData.dive.time
detailsEdit.suitText = diveDetailsListView.currentItem.modelData.dive.suit location = diveDetailsListView.currentItem.modelData.dive.location
detailsEdit.buddyText = diveDetailsListView.currentItem.modelData.dive.buddy duration = diveDetailsListView.currentItem.modelData.dive.duration
detailsEdit.divemasterText = diveDetailsListView.currentItem.modelData.dive.divemaster depth = diveDetailsListView.currentItem.modelData.dive.depth
detailsEdit.notesText = diveDetailsListView.currentItem.modelData.dive.notes 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
weight = diveDetailsListView.currentItem.modelData.dive.sumWeight
diveDetailsPage.state = "edit" diveDetailsPage.state = "edit"
} }
} }
}
function showDiveIndex(index) { function showDiveIndex(index) {
diveDetailsListView.currentIndex = index; diveDetailsListView.currentIndex = index;

View file

@ -66,7 +66,7 @@ MobileComponents.ApplicationWindow {
Action { Action {
text: "Add dive manually" text: "Add dive manually"
onTriggered: { onTriggered: {
detailsWindow.state = "edit" detailsWindow.state = "add"
detailsWindow.dive_id = manager.addDive(); detailsWindow.dive_id = manager.addDive();
detailsWindow.number = manager.getNumber(detailsWindow.dive_id) detailsWindow.number = manager.getNumber(detailsWindow.dive_id)
detailsWindow.date = manager.getDate(detailsWindow.dive_id) detailsWindow.date = manager.getDate(detailsWindow.dive_id)