Undo: implement undo of dive site location editing

Simply copy the code of note editing. It's a bit more complex,
since we have to parse the Gps coordinates. For consitency,
rename the COORD field to LOCATION (the field in the dive_site
struct is called LOCATION).

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2019-03-14 22:07:48 +01:00 committed by Dirk Hohndel
parent 1deded7874
commit fa4fedbb48
9 changed files with 69 additions and 25 deletions

View file

@ -142,6 +142,15 @@ void LocationInformationWidget::diveSiteChanged(struct dive_site *ds, int field)
case LocationInformationModel::TAXONOMY:
ui.diveSiteCountry->setText(taxonomy_get_country(&diveSite->taxonomy));
return;
case LocationInformationModel::LOCATION:
filter_model.setCoordinates(diveSite->location);
if (has_location(&diveSite->location)) {
enableLocationButtons(true);
ui.diveSiteCoordinates->setText(printGPSCoords(&diveSite->location));
} else {
enableLocationButtons(false);
ui.diveSiteCoordinates->clear();
}
default:
return;
}
@ -181,14 +190,6 @@ bool parseGpsText(const QString &text, location_t &location)
void LocationInformationWidget::acceptChanges()
{
if (!diveSite) {
qWarning() << "did not have valid dive site in LocationInformationWidget";
return;
}
if (!ui.diveSiteCoordinates->text().isEmpty())
parseGpsText(ui.diveSiteCoordinates->text(), diveSite->location);
mark_divelist_changed(true);
resetState();
}
@ -250,22 +251,11 @@ void LocationInformationWidget::enableEdition()
ui.diveSiteMessage->setText(tr("You are editing a dive site"));
}
void LocationInformationWidget::on_diveSiteCoordinates_textChanged(const QString &text)
void LocationInformationWidget::on_diveSiteCoordinates_editingFinished()
{
if (!diveSite)
return;
location_t location;
bool ok_old = has_location(&diveSite->location);
bool ok = parseGpsText(text, location);
if (ok != ok_old || !same_location(&location, &diveSite->location)) {
if (ok) {
markChangedWidget(ui.diveSiteCoordinates);
enableLocationButtons(true);
filter_model.setCoordinates(location);
} else {
enableLocationButtons(false);
}
}
Command::editDiveSiteLocation(diveSite, ui.diveSiteCoordinates->text());
}
void LocationInformationWidget::on_diveSiteCountry_editingFinished()