diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-06-26 15:03:34 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-06-26 18:50:22 -0700 |
commit | 05c5bf0919d57102d5509b58cce0b9e6c527aa6c (patch) | |
tree | fbdf79ca7b6f2ad81a15452f2855ce0dec3b13f0 /qt-ui | |
parent | 2fec1a88de2a075fd9586f5fb5c57b5bab2a74a6 (diff) | |
download | subsurface-05c5bf0919d57102d5509b58cce0b9e6c527aa6c.tar.gz |
Dive site rewrite: try to fix a crash
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/locationinformation.cpp | 25 | ||||
-rw-r--r-- | qt-ui/locationinformation.h | 1 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 12 |
3 files changed, 30 insertions, 8 deletions
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(); |