QML UI: handle editing of depth

Getting closer to being able to really edit / add dives in the mobile UI.
This works for manually added dives - needs a bit more thought for dives
downloaded from dive computers as we don't necessarily want to change the
maxdepth in conflict with the samples.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2016-01-01 00:32:30 -08:00
parent 2c28b16b26
commit a0aa27e864
6 changed files with 45 additions and 1 deletions

View file

@ -59,7 +59,7 @@ MobileComponents.Page {
location = detailsEdit.locationText
// gps = detailsEdit.gps
duration = detailsEdit.durationText
// depth = detailsEdit.depthText
depth = detailsEdit.depthText
airtemp = detailsEdit.airtempText
watertemp = detailsEdit.watertempText
suit = detailsEdit.suitText

View file

@ -16,6 +16,7 @@ Item {
property alias divemasterText: txtDiveMaster.text
property alias notesText: txtNotes.text
property alias durationText: txtDuration.text
property alias depthText: txtDepth.text
ColumnLayout {
anchors {
left: parent.left
@ -49,6 +50,15 @@ Item {
// (think of someone adding a dive while on the boat or
// at the dive site)
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Depth:"
}
TextField {
id: txtDepth
text: depth
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Duration:"

View file

@ -361,6 +361,16 @@ void QMLManager::commitChanges(QString diveId, QString location, QString gps, QS
}
d->duration.seconds = h * 3600 + m * 60 + s;
}
if (get_depth_string(d->maxdepth.mm, true, true) != depth) {
diveChanged = true;
if (depth.contains(tr("ft")))
prefs.units.length = units::FEET;
else if (depth.contains(tr("m")))
prefs.units.length = units::METERS;
d->maxdepth.mm = parseLengthToMm(depth);
if (same_string(d->dc.model, "manually added dive"))
d->dc.maxdepth.mm = d->maxdepth.mm;
}
if (get_temperature_string(d->airtemp) != airtemp) {
diveChanged = true;
if (airtemp.contains(tr("C")))

View file

@ -130,6 +130,7 @@ QString DiveListModel::startAddDive()
if (pd && pd->number > 0)
nr = pd->number + 1;
d->number = nr;
d->dc.model = strdup("manually added dive");
add_single_dive(-1, d);
addDive(d);
return QString::number(d->id);

View file

@ -32,6 +32,7 @@ QString getPrintingTemplatePathBundle();
void copyPath(QString src, QString dst);
extern const QString get_dc_nickname(const char *model, uint32_t deviceid);
int gettimezoneoffset(timestamp_t when = 0);
int parseLengthToMm(const QString &text);
int parseTemperatureToMkelvin(const QString &text);
QString get_dive_duration_string(timestamp_t when, QString hourText, QString minutesText);
QString get_dive_date_string(timestamp_t when);

View file

@ -1119,6 +1119,28 @@ int gettimezoneoffset(timestamp_t when)
return dt2.secsTo(dt1);
}
int parseLengthToMm(const QString &text)
{
int mm;
QString numOnly = text;
numOnly.replace(",", ".").remove(QRegExp("[^-0-9.]"));
if (numOnly.isEmpty())
return 0;
double number = numOnly.toDouble();
switch (prefs.units.length) {
case units::FEET:
mm = feet_to_mm(number);
break;
case units::METERS:
mm = number * 1000;
break;
default:
mm = 0;
}
return mm;
}
int parseTemperatureToMkelvin(const QString &text)
{
int mkelvin;