diff options
author | 2019-03-14 22:07:48 +0100 | |
---|---|---|
committer | 2019-04-12 18:19:07 +0300 | |
commit | fa4fedbb488eacff72d5d8691b4da8b34634a71e (patch) | |
tree | 8a751c99f2731832cdf71db420d55ed95f913bad /desktop-widgets/command_divesite.cpp | |
parent | 1deded787405f10af65c4dfe7c19b5e4a5ea3cdc (diff) | |
download | subsurface-fa4fedbb488eacff72d5d8691b4da8b34634a71e.tar.gz |
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>
Diffstat (limited to 'desktop-widgets/command_divesite.cpp')
-rw-r--r-- | desktop-widgets/command_divesite.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/desktop-widgets/command_divesite.cpp b/desktop-widgets/command_divesite.cpp index 5534bc5bb..5e2a8b18a 100644 --- a/desktop-widgets/command_divesite.cpp +++ b/desktop-widgets/command_divesite.cpp @@ -208,4 +208,40 @@ void EditDiveSiteCountry::undo() redo(); } +// Parse GPS text into location_t +static location_t parseGpsText(const QString &text) +{ + double lat, lon; + if (parseGpsText(text, &lat, &lon)) + return create_location(lat, lon); + return { {0}, {0} }; +} + +EditDiveSiteLocation::EditDiveSiteLocation(dive_site *dsIn, const QString &location) : ds(dsIn), + value(parseGpsText(location)) +{ + setText(tr("Edit dive site location")); +} + +bool EditDiveSiteLocation::workToBeDone() +{ + bool ok = has_location(&value); + bool old_ok = has_location(&ds->location); + if (ok != old_ok) + return true; + return ok && !same_location(&value, &ds->location); +} + +void EditDiveSiteLocation::redo() +{ + std::swap(value, ds->location); + emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::LOCATION); // Inform frontend of changed dive site. +} + +void EditDiveSiteLocation::undo() +{ + // Undo and redo do the same + redo(); +} + } // namespace Command |