diff options
Diffstat (limited to 'desktop-widgets/command_divesite.cpp')
-rw-r--r-- | desktop-widgets/command_divesite.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/desktop-widgets/command_divesite.cpp b/desktop-widgets/command_divesite.cpp index 96dcaa60c..28d47d603 100644 --- a/desktop-widgets/command_divesite.cpp +++ b/desktop-widgets/command_divesite.cpp @@ -82,6 +82,15 @@ void DeleteDiveSites::undo() sitesToRemove = std::move(addDiveSites(sitesToAdd)); } +// Helper function: swap C and Qt string +static void swap(char *&c, QString &q) +{ + QString s = c; + free(c); + c = copy_qstring(q); + q = s; +} + EditDiveSiteName::EditDiveSiteName(dive_site *dsIn, const QString &name) : ds(dsIn), value(name) { @@ -95,10 +104,7 @@ bool EditDiveSiteName::workToBeDone() void EditDiveSiteName::redo() { - QString s = ds->name; - free(ds->name); - ds->name = copy_qstring(value); - value = s; + swap(ds->name, value); emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::NAME); // Inform frontend of changed dive site. } @@ -108,4 +114,27 @@ void EditDiveSiteName::undo() redo(); } +EditDiveSiteDescription::EditDiveSiteDescription(dive_site *dsIn, const QString &description) : ds(dsIn), + value(description) +{ + setText(tr("Edit dive site description")); +} + +bool EditDiveSiteDescription::workToBeDone() +{ + return value != QString(ds->description); +} + +void EditDiveSiteDescription::redo() +{ + swap(ds->description, value); + emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::DESCRIPTION); // Inform frontend of changed dive site. +} + +void EditDiveSiteDescription::undo() +{ + // Undo and redo do the same + redo(); +} + } // namespace Command |