core: convert taxonomy.c to C++

Since the taxonomy is now a real C++ struct with constructor
and destructor, dive_site has to be converted to C++ as well.

A bit hairy for now, but will ultimately be distinctly simpler.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2024-05-04 13:39:04 +02:00 committed by bstoeger
parent 3c1401785b
commit 3f8b4604be
39 changed files with 259 additions and 336 deletions

View file

@ -133,9 +133,9 @@ void LocationInformationWidget::updateLabels()
ui.diveSiteName->setText(diveSite->name);
else
ui.diveSiteName->clear();
const char *country = taxonomy_get_country(&diveSite->taxonomy);
if (country)
ui.diveSiteCountry->setText(country);
std::string country = taxonomy_get_country(diveSite->taxonomy);
if (!country.empty())
ui.diveSiteCountry->setText(QString::fromStdString(country));
else
ui.diveSiteCountry->clear();
if (diveSite->description)
@ -152,7 +152,7 @@ void LocationInformationWidget::updateLabels()
ui.diveSiteCoordinates->clear();
coordinatesSetWarning(false);
ui.locationTags->setText(constructLocationTags(&diveSite->taxonomy, false));
ui.locationTags->setText(constructLocationTags(diveSite->taxonomy, false));
}
void LocationInformationWidget::unitsChanged()
@ -181,8 +181,8 @@ void LocationInformationWidget::diveSiteChanged(struct dive_site *ds, int field)
ui.diveSiteNotes->setText(diveSite->notes);
return;
case LocationInformationModel::TAXONOMY:
ui.diveSiteCountry->setText(taxonomy_get_country(&diveSite->taxonomy));
ui.locationTags->setText(constructLocationTags(&diveSite->taxonomy, false));
ui.diveSiteCountry->setText(QString::fromStdString(taxonomy_get_country(diveSite->taxonomy)));
ui.locationTags->setText(constructLocationTags(diveSite->taxonomy, false));
return;
case LocationInformationModel::LOCATION:
filter_model.setCoordinates(diveSite->location);
@ -342,10 +342,8 @@ void LocationInformationWidget::reverseGeocode()
if (!ds || !has_location(&location))
return;
taxonomy_data taxonomy = reverseGeoLookup(location.lat, location.lon);
if (ds != diveSite) {
free_taxonomy(&taxonomy);
if (ds != diveSite)
return;
}
// This call transfers ownership of the taxonomy memory into an EditDiveSiteTaxonomy object
Command::editDiveSiteTaxonomy(ds, taxonomy);
}