From d0df6a0073c8cc01cfd84489a37328d5df0ed18f Mon Sep 17 00:00:00 2001 From: Dirk Hohndel Date: Mon, 24 Jun 2019 14:21:12 +0800 Subject: Desktop: update dive list when dive sites change Now when we change dive site location or name through a redo, the dive list is updated as expected. Signed-off-by: Dirk Hohndel --- desktop-widgets/command_divesite.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/desktop-widgets/command_divesite.cpp b/desktop-widgets/command_divesite.cpp index 3ef4231f8..eb03ed4d5 100644 --- a/desktop-widgets/command_divesite.cpp +++ b/desktop-widgets/command_divesite.cpp @@ -186,6 +186,18 @@ static void swap(char *&c, QString &q) q = s; } +// Helper function: collect the dives that are at the given dive site +static QVector getDivesForSite(struct dive_site *ds) +{ + QVector diveSiteDives; + + for (int i = 0; i < ds->dives.nr; ++i) + diveSiteDives.push_back(ds->dives.dives[i]); + + return diveSiteDives; +} + + EditDiveSiteName::EditDiveSiteName(dive_site *dsIn, const QString &name) : ds(dsIn), value(name) { @@ -201,6 +213,7 @@ void EditDiveSiteName::redo() { swap(ds->name, value); emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::NAME); // Inform frontend of changed dive site. + emit diveListNotifier.divesChanged(getDivesForSite(ds), DiveField::DIVESITE); // dive site name can be shown in the dive list } void EditDiveSiteName::undo() @@ -272,6 +285,8 @@ void EditDiveSiteCountry::redo() taxonomy_set_country(&ds->taxonomy, copy_qstring(value), taxonomy_origin::GEOMANUAL); value = old; emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::TAXONOMY); // Inform frontend of changed dive site. + emit diveListNotifier.divesChanged(getDivesForSite(ds), DiveField::DIVESITE); // Country can be shown in the dive list + } void EditDiveSiteCountry::undo() @@ -299,6 +314,7 @@ void EditDiveSiteLocation::redo() { std::swap(value, ds->location); emit diveListNotifier.diveSiteChanged(ds, LocationInformationModel::LOCATION); // Inform frontend of changed dive site. + emit diveListNotifier.divesChanged(getDivesForSite(ds), DiveField::DIVESITE); // the globe icon in the dive list shows whether we have coordinates } void EditDiveSiteLocation::undo() -- cgit v1.2.3-70-g09d2