diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2020-02-22 14:07:46 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-03-10 09:25:57 -0700 |
commit | 0683d97636647f75c10aa9150e1ca8f2ab992a95 (patch) | |
tree | 3b87f681509228223e14d7f2174573273f98be3c /mobile-widgets | |
parent | eaa1a5126bc0f50ba1e7ae59a895385b6d4e6614 (diff) | |
download | subsurface-0683d97636647f75c10aa9150e1ca8f2ab992a95.tar.gz |
mobile UI: save changes to trip details
The logic when we show the save button is a little fragile (and visually I'm not
sure I love the disabled button), but hey, this works.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'mobile-widgets')
-rw-r--r-- | mobile-widgets/qml/DiveList.qml | 1 | ||||
-rw-r--r-- | mobile-widgets/qml/TripDetails.qml | 66 |
2 files changed, 65 insertions, 2 deletions
diff --git a/mobile-widgets/qml/DiveList.qml b/mobile-widgets/qml/DiveList.qml index 7013c8f28..86b361186 100644 --- a/mobile-widgets/qml/DiveList.qml +++ b/mobile-widgets/qml/DiveList.qml @@ -288,6 +288,7 @@ Kirigami.ScrollablePage { text: qsTr("Edit trip details") visible: currentItem && currentItem.myData && currentItem.myData.isTrip onTriggered: { + tripEditWindow.tripId = currentItem.myData.tripId tripEditWindow.tripLocation = currentItem.myData.tripLocation tripEditWindow.tripNotes = currentItem.myData.tripNotes pageStack.push(tripEditWindow) diff --git a/mobile-widgets/qml/TripDetails.qml b/mobile-widgets/qml/TripDetails.qml index 7f0a69be0..eca51653d 100644 --- a/mobile-widgets/qml/TripDetails.qml +++ b/mobile-widgets/qml/TripDetails.qml @@ -8,6 +8,7 @@ import org.kde.kirigami 2.4 as Kirigami Kirigami.Page { id: tripEditPage objectName: "TripDetails" + property string tripId property string tripLocation property string tripNotes @@ -15,7 +16,60 @@ Kirigami.Page { state: "view" padding: Kirigami.largeSpacing background: Rectangle { color: subsurfaceTheme.backgroundColor } - width: rootItem.colWidth + actions.main: saveAction + actions.right: cancelAction + onVisibleChanged: { + resetState() + } + onTripIdChanged: { + resetState() + } + + function resetState() { + // make sure we have the right width and reset focus / state if there aren't any unsaved changes + width = parent.width + if (tripLocation === tripLocationField.text && tripNotes === tripNotesField.text) { + tripLocationField.focus = false + tripNotesField.focus = false + state = "view" + } + + } + + states: [ + State { + name: "view" + PropertyChanges { target: saveAction; enabled: false } + }, + State { + name: "edit" + PropertyChanges { target: saveAction; enabled: true } + } + ] + + property QtObject saveAction: Kirigami.Action { + icon { + name: subsurfaceTheme.iconStyle + "/document-save.svg" + color: enabled ? subsurfaceTheme.primaryColor : subsurfaceTheme.backgroundColor + } + text: enabled ? qsTr("Save edits") : "" + onTriggered: { + manager.appendTextToLog("Save trip details triggered") + manager.updateTripDetails(tripId, tripLocationField.text, tripNotesField.text) + } + } + property QtObject cancelAction: Kirigami.Action { + text: qsTr("Cancel edit") + icon { + name: ":/icons/dialog-cancel.svg" + } + onTriggered: { + manager.appendTextToLog("Cancel trip details edit") + state = "view" + pageStack.pop("TripDetails") + } + } + Flickable { id: tripEditFlickable anchors.fill: parent @@ -42,9 +96,13 @@ Kirigami.Page { opacity: 0.6 } SsrfTextField { + id: tripLocationField Layout.fillWidth: true text: tripLocation flickable: tripEditFlickable + onFocusChanged: { + tripEditPage.state = "edit" + } } TemplateLabel { Layout.columnSpan: 2 @@ -52,14 +110,18 @@ Kirigami.Page { opacity: 0.6 } Controls.TextArea { + id: tripNotesField text: tripNotes - textFormat: TextEdit.RichText + textFormat: TextEdit.PlainText Layout.columnSpan: 2 Layout.fillWidth: true Layout.fillHeight: true Layout.minimumHeight: Kirigami.Units.gridUnit * 6 selectByMouse: true wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere + onActiveFocusChanged: { + tripEditPage.state = "edit" + } } } } |