mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
QML UI: add feature to add current position when editing dive
This isn't quite perfect yet. If it takes too long to get the GPS fix (i.e., if you save it before you get the fix), this will simply fail and not store a position. But in normal conditions (you check the box, you edit the data, you save), especially when outside on a dive boat, this should work fine. For the other cases we need to implement some kind of callback to still collect the data. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
14a09689a4
commit
fa338a26b8
3 changed files with 37 additions and 6 deletions
|
@ -49,6 +49,17 @@ Item {
|
|||
// to add the current location as the dive location
|
||||
// (think of someone adding a dive while on the boat or
|
||||
// at the dive site)
|
||||
MobileComponents.Label {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
text: "Use current\nGPS location:"
|
||||
}
|
||||
CheckBox {
|
||||
id: checkboxGPS
|
||||
onCheckedChanged: {
|
||||
if (checked)
|
||||
gpsText = manager.getCurrentPosition()
|
||||
}
|
||||
}
|
||||
|
||||
MobileComponents.Label {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
|
|
@ -328,12 +328,26 @@ void QMLManager::commitChanges(QString diveId, QString location, QString gps, QS
|
|||
ds = get_dive_site_by_uuid(create_dive_site(qPrintable(location), d->when));
|
||||
d->dive_site_uuid = ds->uuid;
|
||||
}
|
||||
// now we need to handle the string representations of depth
|
||||
// and do something useful...
|
||||
//
|
||||
// FIXME
|
||||
//
|
||||
// TODO
|
||||
QString gpsString = getCurrentPosition();
|
||||
if (gpsString != QString("waiting for the next gps location")) {
|
||||
qDebug() << "from commitChanges call to getCurrentPosition returns" << gpsString;
|
||||
double lat, lon;
|
||||
if (parseGpsText(qPrintable(gpsString), &lat, &lon)) {
|
||||
struct dive_site *ds = get_dive_site_by_uuid(d->dive_site_uuid);
|
||||
if (ds) {
|
||||
ds->latitude.udeg = lat * 1000000;
|
||||
ds->longitude.udeg = lon * 1000000;
|
||||
} else {
|
||||
degrees_t latData, lonData;
|
||||
latData.udeg = lat;
|
||||
lonData.udeg = lon;
|
||||
d->dive_site_uuid = create_dive_site_with_gps("new site", latData, lonData, d->when);
|
||||
}
|
||||
qDebug() << "set up dive site with new GPS data";
|
||||
}
|
||||
} else {
|
||||
qDebug() << "still don't have a position - will need to implement some sort of callback";
|
||||
}
|
||||
if (get_dive_duration_string(d->duration.seconds, tr("h:"), tr("min")) != duration) {
|
||||
diveChanged = true;
|
||||
int h = 0, m = 0, s = 0;
|
||||
|
@ -442,6 +456,11 @@ QString QMLManager::addDive()
|
|||
return DiveListModel::instance()->startAddDive();
|
||||
}
|
||||
|
||||
QString QMLManager::getCurrentPosition()
|
||||
{
|
||||
return locationProvider->currentPosition();
|
||||
}
|
||||
|
||||
void QMLManager::applyGpsData()
|
||||
{
|
||||
locationProvider->applyLocations();
|
||||
|
|
|
@ -82,6 +82,7 @@ public slots:
|
|||
void showMap(QString location);
|
||||
QString getNumber(QString diveId);
|
||||
QString getDate(QString diveId);
|
||||
QString getCurrentPosition();
|
||||
|
||||
private:
|
||||
QString m_cloudUserName;
|
||||
|
|
Loading…
Add table
Reference in a new issue