diff options
-rw-r--r-- | divesite.c | 10 | ||||
-rw-r--r-- | divesite.h | 1 | ||||
-rw-r--r-- | qt-ui/locationinformation.cpp | 25 | ||||
-rw-r--r-- | qt-ui/locationinformation.h | 1 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 12 |
5 files changed, 41 insertions, 8 deletions
diff --git a/divesite.c b/divesite.c index 0abd664c0..113f117ff 100644 --- a/divesite.c +++ b/divesite.c @@ -169,3 +169,13 @@ void copy_dive_site(struct dive_site *orig, struct dive_site *copy) copy->notes = copy_string(orig->notes); copy->description = copy_string(orig->description); } + +void clear_dive_site(struct dive_site *ds) +{ + free(ds->name); + free(ds->notes); + free(ds->description); + ds->latitude.udeg = 0; + ds->longitude.udeg = 0; + ds->uuid = 0; +} diff --git a/divesite.h b/divesite.h index 13a8d7f38..71f3c0de7 100644 --- a/divesite.h +++ b/divesite.h @@ -56,6 +56,7 @@ uint32_t get_dive_site_uuid_by_gps(degrees_t latitude, degrees_t longitude, stru uint32_t get_dive_site_uuid_by_gps_proximity(degrees_t latitude, degrees_t longitude, int distance, struct dive_site **dsp); bool dive_site_is_empty(struct dive_site *ds); void copy_dive_site(struct dive_site *orig, struct dive_site *copy); +void clear_dive_site(struct dive_site *ds); #ifdef __cplusplus } diff --git a/qt-ui/locationinformation.cpp b/qt-ui/locationinformation.cpp index 929fbec36..9b4f48913 100644 --- a/qt-ui/locationinformation.cpp +++ b/qt-ui/locationinformation.cpp @@ -229,7 +229,7 @@ void LocationInformationWidget::resetPallete() SimpleDiveSiteEditDialog::SimpleDiveSiteEditDialog(QWidget *parent) : QDialog(parent, Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::Popup), - ui(new Ui::SimpleDiveSiteEditDialog()) + ui(new Ui::SimpleDiveSiteEditDialog()), changed(false) { ui->setupUi(this); } @@ -262,31 +262,50 @@ void SimpleDiveSiteEditDialog::showEvent(QShowEvent *ev) const char *gps_text = printGPSCoords(displayed_dive_site.latitude.udeg, displayed_dive_site.longitude.udeg); ui->diveSiteCoordinates->setText(QString(gps_text)); free( (void*) gps_text); + + changed = false; } void SimpleDiveSiteEditDialog::on_diveSiteName_editingFinished() { + if (ui->diveSiteName->text() == displayed_dive_site.name) + return; free(displayed_dive_site.name); displayed_dive_site.name = copy_string(qPrintable(ui->diveSiteName->text())); + changed = true; } void SimpleDiveSiteEditDialog::on_diveSiteCoordinates_editingFinished() { double lat, lon; + uint32_t uLat, uLon; parseGpsText(ui->diveSiteCoordinates->text(), &lat, &lon); - displayed_dive_site.latitude.udeg = lat * 1000000; - displayed_dive_site.longitude.udeg = lon * 1000000; + uLat = lat * 1000000; + uLon = lon * 1000000; + + if (uLat == displayed_dive_site.latitude.udeg && uLon == displayed_dive_site.longitude.udeg) + return; + + displayed_dive_site.latitude.udeg = uLat; + displayed_dive_site.longitude.udeg = uLon; + changed = true; } void SimpleDiveSiteEditDialog::on_diveSiteDescription_editingFinished() { + if (ui->diveSiteDescription->text() == displayed_dive_site.description) + return; free(displayed_dive_site.description); displayed_dive_site.description = copy_string(qPrintable(ui->diveSiteDescription->text())); + changed = true; } void SimpleDiveSiteEditDialog::on_diveSiteNotes_editingFinished() { + if (ui->diveSiteNotes->text() == displayed_dive_site.notes) + return; free(displayed_dive_site.notes); displayed_dive_site.notes = copy_string(qPrintable(ui->diveSiteNotes->text())); + changed = true; } diff --git a/qt-ui/locationinformation.h b/qt-ui/locationinformation.h index 2fa6f6615..9a9f87b1e 100644 --- a/qt-ui/locationinformation.h +++ b/qt-ui/locationinformation.h @@ -51,6 +51,7 @@ Q_OBJECT public: SimpleDiveSiteEditDialog(QWidget *parent); virtual ~SimpleDiveSiteEditDialog(); + bool changed; public slots: void on_diveSiteName_editingFinished(); void on_diveSiteCoordinates_editingFinished(); diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 9c8cac2bf..c2eac0628 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -492,10 +492,15 @@ void MainTab::updateDiveInfo(bool clear) if (!clear) { struct dive_site *ds = get_dive_site_by_uuid(displayed_dive.dive_site_uuid); - if (ds) + if (ds) { ui.location->setText(ds->name); - else + ui.locationTags->setText(ds->description); // TODO: This should be three tags following davide's explanation. + copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); + } else { ui.location->clear(); + clear_dive_site(&displayed_dive_site); + } + // Subsurface always uses "local time" as in "whatever was the local time at the location" // so all time stamps have no time zone information and are in UTC QDateTime localTime = QDateTime::fromTime_t(displayed_dive.when - gettimezoneoffset(displayed_dive.when)); @@ -698,13 +703,10 @@ void MainTab::updateDiveInfo(bool clear) gasUsedString.append(QString("O2: %2\n").arg(get_volume_string(o2_tot, true))); } ui.gasConsumption->setText(gasUsedString); - ui.locationTags->setText(ds->description); // TODO: This should be three tags following davide's explanation. if(ui.locationTags->text().isEmpty()) ui.locationTags->hide(); else ui.locationTags->show(); - copy_dive_site(get_dive_site_by_uuid(displayed_dive.dive_site_uuid), &displayed_dive_site); - } else { /* clear the fields */ clearInfo(); |