source: subsurface/mobile-widgets/qml/DiveDetailsEdit.qml @ 0e57033

Last change on this file since 0e57033 was 0e57033, checked in by Dirk Hohndel <dirk@…>, 11 months ago

QML UI: Parse multiple buddies when editing a dive

This allows the user to enter multiple buddies as a comma separated list,
the "Multiple Buddies" entry is still a special case as we can only populate
the combobox with a single name for each entry.

fixes #168

Signed-off-by: Joakim Bygdell <j.bygdell@…>

  • Property mode set to 100644
File size: 7.8 KB
Line 
1import QtQuick 2.3
2import QtQuick.Controls 1.2
3import QtQuick.Controls.Styles 1.2
4import QtQuick.Dialogs 1.2
5import QtQuick.Layouts 1.1
6import org.subsurfacedivelog.mobile 1.0
7import org.kde.kirigami 1.0 as Kirigami
8
9Item {
10        id: detailsEdit
11        property int dive_id
12        property int number
13        property alias dateText: txtDate.text
14        property alias locationText: txtLocation.text
15        property alias gpsText: txtGps.text
16        property alias airtempText: txtAirTemp.text
17        property alias watertempText: txtWaterTemp.text
18        property alias suitIndex: suitBox.currentIndex
19        property alias buddyIndex: buddyBox.currentIndex
20        property alias divemasterIndex: divemasterBox.currentIndex
21        property alias cylinderIndex: cylinderBox.currentIndex
22        property alias notesText: txtNotes.text
23        property alias durationText: txtDuration.text
24        property alias depthText: txtDepth.text
25        property alias weightText: txtWeight.text
26        property alias startpressureText: txtStartPressure.text
27        property alias endpressureText: txtEndPressure.text
28        property alias gasmixText: txtGasMix.text
29        property alias gpsCheckbox: checkboxGPS.checked
30        property alias suitModel: suitBox.model
31        property alias divemasterModel: divemasterBox.model
32        property alias buddyModel: buddyBox.model
33        property alias cylinderModel: cylinderBox.model
34
35        function saveData() {
36                // apply the changes to the dive_table
37                manager.commitChanges(dive_id, detailsEdit.dateText, detailsEdit.locationText, detailsEdit.gpsText, detailsEdit.durationText,
38                                      detailsEdit.depthText, detailsEdit.airtempText, detailsEdit.watertempText, suitBox.editText, buddyBox.editText,
39                                      divemasterBox.editText, detailsEdit.weightText, detailsEdit.notesText, detailsEdit.startpressureText,
40                                      detailsEdit.endpressureText, detailsEdit.gasmixText, cylinderBox.editText)
41                // trigger the profile to be redrawn
42                QMLProfile.diveId = dive_id
43
44                // apply the changes to the dive detail view - since the edit could have changed the order
45                // first make sure that we are looking at the correct dive - our model allows us to look
46                // up the index based on the unique dive_id
47                var newIdx = diveModel.getIdxForId(dive_id)
48                diveDetailsListView.currentIndex = newIdx
49                diveDetailsListView.currentItem.modelData.date = detailsEdit.dateText
50                diveDetailsListView.currentItem.modelData.location = detailsEdit.locationText
51                diveDetailsListView.currentItem.modelData.duration = detailsEdit.durationText
52                diveDetailsListView.currentItem.modelData.depth = detailsEdit.depthText
53                diveDetailsListView.currentItem.modelData.airtemp = detailsEdit.airtempText
54                diveDetailsListView.currentItem.modelData.watertemp = detailsEdit.watertempText
55                diveDetailsListView.currentItem.modelData.suit = suitBox.currentText
56                diveDetailsListView.currentItem.modelData.buddy = buddyBox.currentText
57                diveDetailsListView.currentItem.modelData.divemaster = divemasterBox.currentText
58                diveDetailsListView.currentItem.modelData.cylinder = cylinderBox.currentText
59                diveDetailsListView.currentItem.modelData.notes = detailsEdit.notesText
60                diveDetailsPage.state = "view"
61                Qt.inputMethod.hide()
62                // now make sure we directly show the saved dive (this may be a new dive, or it may have moved)
63                showDiveIndex(newIdx)
64        }
65
66        height: editArea.height
67        width: diveDetailsPage.width - diveDetailsPage.leftPadding - diveDetailsPage.rightPadding
68        ColumnLayout {
69                id: editArea
70                spacing: Kirigami.Units.smallSpacing
71                width: parent.width - 2 * Kirigami.Units.gridUnit
72
73                GridLayout {
74                        id: editorDetails
75                        width: parent.width
76                        columns: 2
77
78                        Kirigami.Heading {
79                                Layout.columnSpan: 2
80                                text: qsTr("Dive %1").arg(number)
81                        }
82                        Kirigami.Label {
83                                Layout.alignment: Qt.AlignRight
84                                text: qsTr("Date:")
85                        }
86                        StyledTextField {
87                                id: txtDate;
88                                Layout.fillWidth: true
89                        }
90                        Kirigami.Label {
91                                Layout.alignment: Qt.AlignRight
92                                text: qsTr("Location:")
93                        }
94                        StyledTextField {
95                                id: txtLocation;
96                                Layout.fillWidth: true
97                        }
98
99                        Kirigami.Label {
100                                Layout.alignment: Qt.AlignRight
101                                text: qsTr("Coordinates:")
102                        }
103                        StyledTextField {
104                                id: txtGps
105                                Layout.fillWidth: true
106                        }
107
108                        Kirigami.Label {
109                                Layout.alignment: Qt.AlignRight
110                                text: qsTr("Use current\nGPS location:")
111                                visible: manager.locationServiceAvailable
112                        }
113                        CheckBox {
114                                id: checkboxGPS
115                                visible: manager.locationServiceAvailable
116                                onCheckedChanged: {
117                                        if (checked)
118                                                gpsText = manager.getCurrentPosition()
119                                }
120                        }
121
122                        Kirigami.Label {
123                                Layout.alignment: Qt.AlignRight
124                                text: qsTr("Depth:")
125                        }
126                        StyledTextField {
127                                id: txtDepth
128                                Layout.fillWidth: true
129                                validator: RegExpValidator { regExp: /[^-]*/ }
130                        }
131                        Kirigami.Label {
132                                Layout.alignment: Qt.AlignRight
133                                text: qsTr("Duration:")
134                        }
135                        StyledTextField {
136                                id: txtDuration
137                                Layout.fillWidth: true
138                                validator: RegExpValidator { regExp: /[^-]*/ }
139                        }
140
141                        Kirigami.Label {
142                                Layout.alignment: Qt.AlignRight
143                                text: qsTr("Air Temp:")
144                        }
145                        StyledTextField {
146                                id: txtAirTemp
147                                Layout.fillWidth: true
148                        }
149
150                        Kirigami.Label {
151                                Layout.alignment: Qt.AlignRight
152                                text: qsTr("Water Temp:")
153                        }
154                        StyledTextField {
155                                id: txtWaterTemp
156                                Layout.fillWidth: true
157                        }
158
159                        Kirigami.Label {
160                                Layout.alignment: Qt.AlignRight
161                                text: qsTr("Suit:")
162                        }
163                        ComboBox {
164                                id: suitBox
165                                editable: true
166                                model: diveDetailsListView.currentItem.modelData.dive.suitList
167                                inputMethodHints: Qt.ImhNoPredictiveText
168                                Layout.fillWidth: true
169                                style: ComboBoxStyle {
170                                        dropDownButtonWidth: 0
171                                }
172                        }
173
174                        Kirigami.Label {
175                                Layout.alignment: Qt.AlignRight
176                                text: qsTr("Buddy:")
177                        }
178                        ComboBox {
179                                id: buddyBox
180                                editable: true
181                                model: diveDetailsListView.currentItem.modelData.dive.buddyList
182                                inputMethodHints: Qt.ImhNoPredictiveText
183                                Layout.fillWidth: true
184                                style: ComboBoxStyle {
185                                        dropDownButtonWidth: 0
186                                }
187                        }
188
189                        Kirigami.Label {
190                                Layout.alignment: Qt.AlignRight
191                                text: qsTr("Dive Master:")
192                        }
193                        ComboBox {
194                                id: divemasterBox
195                                editable: true
196                                model: diveDetailsListView.currentItem.modelData.dive.divemasterList
197                                inputMethodHints: Qt.ImhNoPredictiveText
198                                Layout.fillWidth: true
199                                style: ComboBoxStyle {
200                                        dropDownButtonWidth: 0
201                                }
202                        }
203
204                        Kirigami.Label {
205                                Layout.alignment: Qt.AlignRight
206                                text: qsTr("Weight:")
207                        }
208                        StyledTextField {
209                                id: txtWeight
210                                fixed: text === "cannot edit multiple weight systems"
211                                Layout.fillWidth: true
212                        }
213
214                        Kirigami.Label {
215                                Layout.alignment: Qt.AlignRight
216                                text: qsTr("Cylinder:")
217                        }
218                        ComboBox {
219                                id: cylinderBox
220                                editable: true
221                                model: diveDetailsListView.currentItem.modelData.dive.cylinderList
222                                inputMethodHints: Qt.ImhNoPredictiveText
223                                Layout.fillWidth: true
224                                style: ComboBoxStyle {
225                                        dropDownButtonWidth: 0
226                                }
227                        }
228
229                        Kirigami.Label {
230                                Layout.alignment: Qt.AlignRight
231                                text: qsTr("Gas mix:")
232                        }
233                        StyledTextField {
234                                id: txtGasMix
235                                Layout.fillWidth: true
236                                validator: RegExpValidator { regExp: /(EAN100|EAN\d\d|AIR|100|\d{1,2}|\d{1,2}\/\d{1,2})/i }
237                        }
238
239                        Kirigami.Label {
240                                Layout.alignment: Qt.AlignRight
241                                text: qsTr("Start Pressure:")
242                        }
243                        StyledTextField {
244                                id: txtStartPressure
245                                Layout.fillWidth: true
246                        }
247
248                        Kirigami.Label {
249                                Layout.alignment: Qt.AlignRight
250                                text: qsTr("End Pressure:")
251                        }
252                        StyledTextField {
253                                id: txtEndPressure
254                                Layout.fillWidth: true
255                        }
256
257                        Kirigami.Label {
258                                Layout.columnSpan: 2
259                                Layout.alignment: Qt.AlignLeft
260                                text: qsTr("Notes:")
261                        }
262                        TextArea {
263                                Layout.columnSpan: 2
264                                width: parent.width
265                                id: txtNotes
266                                textFormat: TextEdit.RichText
267                                focus: true
268                                Layout.fillWidth: true
269                                Layout.fillHeight: true
270                                Layout.minimumHeight: Kirigami.Units.gridUnit * 6
271                                selectByMouse: true
272                                wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
273                        }
274                }
275                Item {
276                        height: Kirigami.Units.gridUnit * 3
277                        width: height // just to make sure the spacer doesn't produce scrollbars, but also isn't null
278                }
279        }
280}
Note: See TracBrowser for help on using the repository browser.