summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-10-13 11:52:59 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-10-13 21:41:41 -0400
commit8815f77ea086ba474df051144098b80739a0f3ae (patch)
treecd4546081961c4734ca850d72ce8c2f62ac91dc9 /desktop-widgets
parent5d3967ce846ed4876abeb43ebe2d919064050ed6 (diff)
downloadsubsurface-8815f77ea086ba474df051144098b80739a0f3ae.tar.gz
Dive site: use own copy of taxonomy in dive-site-edit widget
The dive-site-edit widget uses a copy of the to-be-edited site to compare with old values. Generally, this seems overkill (the original dive-site can be used for such a comparison). But one place where it can't simply be removed is the taxonomy, because the widget needs a place to store the unsaved data. Change the code to use an explicit taxonomy structure instead of the one provided in the copy. This should ultimately allow removal of the latter. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r--desktop-widgets/locationinformation.cpp20
-rw-r--r--desktop-widgets/locationinformation.h2
-rw-r--r--desktop-widgets/tab-widgets/maintab.cpp2
3 files changed, 14 insertions, 10 deletions
diff --git a/desktop-widgets/locationinformation.cpp b/desktop-widgets/locationinformation.cpp
index 30146b5be..e76a45091 100644
--- a/desktop-widgets/locationinformation.cpp
+++ b/desktop-widgets/locationinformation.cpp
@@ -20,6 +20,7 @@
LocationInformationWidget::LocationInformationWidget(QWidget *parent) : QGroupBox(parent), modified(false)
{
memset(&displayed_dive_site, 0, sizeof(displayed_dive_site));
+ memset(&taxonomy, 0, sizeof(taxonomy));
ui.setupUi(this);
ui.diveSiteMessage->setCloseButtonVisible(false);
@@ -97,7 +98,7 @@ void LocationInformationWidget::updateLabels()
ui.diveSiteName->setText(displayed_dive_site.name);
else
ui.diveSiteName->clear();
- const char *country = taxonomy_get_country(&displayed_dive_site.taxonomy);
+ const char *country = taxonomy_get_country(&taxonomy);
if (country)
ui.diveSiteCountry->setText(country);
else
@@ -118,7 +119,7 @@ void LocationInformationWidget::updateLabels()
ui.diveSiteCoordinates->clear();
}
- ui.locationTags->setText(constructLocationTags(&displayed_dive_site, false));
+ ui.locationTags->setText(constructLocationTags(&taxonomy, false));
}
@@ -172,15 +173,15 @@ void LocationInformationWidget::acceptChanges()
free(uiString);
}
uiString = copy_qstring(ui.diveSiteCountry->text());
- // if the user entered a different contriy, first update the taxonomy
- // for the displayed dive site; this below will get copied into the currentDs
- if (!same_string(uiString, taxonomy_get_country(&displayed_dive_site.taxonomy)) &&
+ // if the user entered a different country, first update the local taxonomy
+ // this below will get copied into the currentDs
+ if (!same_string(uiString, taxonomy_get_country(&taxonomy)) &&
!empty_string(uiString))
- taxonomy_set_country(&displayed_dive_site.taxonomy, uiString, taxonomy_origin::GEOMANUAL);
+ taxonomy_set_country(&taxonomy, uiString, taxonomy_origin::GEOMANUAL);
else
free(uiString);
// now update the currentDs (which we then later copy back ontop of displayed_dive_site
- copy_dive_site_taxonomy(&displayed_dive_site, currentDs);
+ copy_taxonomy(&taxonomy, &currentDs->taxonomy);
uiString = copy_qstring(ui.diveSiteNotes->document()->toPlainText());
if (!same_string(uiString, currentDs->notes)) {
@@ -214,6 +215,7 @@ void LocationInformationWidget::initFields(dive_site *ds)
{
if (ds) {
copy_dive_site(ds, &displayed_dive_site);
+ copy_taxonomy(&ds->taxonomy, &taxonomy);
filter_model.set(displayed_dive_site.uuid, displayed_dive_site.latitude, displayed_dive_site.longitude);
updateLabels();
enableLocationButtons(dive_site_has_gps_location(&displayed_dive_site));
@@ -283,7 +285,7 @@ void LocationInformationWidget::on_diveSiteCoordinates_textChanged(const QString
void LocationInformationWidget::on_diveSiteCountry_textChanged(const QString& text)
{
- if (!same_string(qPrintable(text), taxonomy_get_country(&displayed_dive_site.taxonomy)))
+ if (!same_string(qPrintable(text), taxonomy_get_country(&taxonomy)))
markChangedWidget(ui.diveSiteCountry);
}
@@ -317,7 +319,7 @@ void LocationInformationWidget::resetPallete()
void LocationInformationWidget::reverseGeocode()
{
- reverseGeoLookup(displayed_dive_site.latitude, displayed_dive_site.longitude, &displayed_dive_site.taxonomy);
+ reverseGeoLookup(displayed_dive_site.latitude, displayed_dive_site.longitude, &taxonomy);
updateLabels();
}
diff --git a/desktop-widgets/locationinformation.h b/desktop-widgets/locationinformation.h
index 3e0da4aa6..43115a05b 100644
--- a/desktop-widgets/locationinformation.h
+++ b/desktop-widgets/locationinformation.h
@@ -4,6 +4,7 @@
#include "core/units.h"
#include "core/divesite.h"
+#include "core/taxonomy.h"
#include "ui_locationInformation.h"
#include "qt-models/divelocationmodel.h"
#include <stdint.h>
@@ -52,6 +53,7 @@ private:
QAction *acceptAction, *rejectAction;
GPSLocationInformationModel filter_model;
dive_site displayed_dive_site;
+ taxonomy_data taxonomy;
};
class DiveLocationFilterProxyModel : public QSortFilterProxyModel {
diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp
index 322ec5943..32f390a7d 100644
--- a/desktop-widgets/tab-widgets/maintab.cpp
+++ b/desktop-widgets/tab-widgets/maintab.cpp
@@ -418,7 +418,7 @@ void MainTab::updateDiveInfo(bool clear)
ds = get_dive_site_by_uuid(displayed_dive.dive_site_uuid);
if (ds) {
ui.location->setCurrentDiveSiteUuid(ds->uuid);
- ui.locationTags->setText(constructLocationTags(ds, true));
+ ui.locationTags->setText(constructLocationTags(&ds->taxonomy, true));
} else {
ui.location->clear();
ui.locationTags->clear();