diff options
-rw-r--r-- | desktop-widgets/command_divesite.cpp | 17 | ||||
-rw-r--r-- | qt-models/divetripmodel.cpp | 39 | ||||
-rw-r--r-- | qt-models/divetripmodel.h | 2 |
3 files changed, 41 insertions, 17 deletions
diff --git a/desktop-widgets/command_divesite.cpp b/desktop-widgets/command_divesite.cpp index 8c31959eb..3ef4231f8 100644 --- a/desktop-widgets/command_divesite.cpp +++ b/desktop-widgets/command_divesite.cpp @@ -186,19 +186,6 @@ static void swap(char *&c, QString &q) q = s; } -// Helper function: collect the dives that are at the given dive site -static QVector<dive *> getDivesForSite(struct dive_site *ds) -{ - QVector<dive *> diveSiteDives; - diveSiteDives.reserve(ds->dives.nr); - - 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) { @@ -214,7 +201,6 @@ 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() @@ -286,8 +272,6 @@ 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() @@ -315,7 +299,6 @@ 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() diff --git a/qt-models/divetripmodel.cpp b/qt-models/divetripmodel.cpp index 09c5c308d..30ab2175b 100644 --- a/qt-models/divetripmodel.cpp +++ b/qt-models/divetripmodel.cpp @@ -5,8 +5,10 @@ #include "core/metrics.h" #include "core/trip.h" #include "core/qthelper.h" +#include "core/divesite.h" #include "core/subsurface-string.h" #include "core/tag.h" +#include "qt-models/divelocationmodel.h" // For the dive-site field ids #include "desktop-widgets/command.h" #include <QIcon> #include <QDebug> @@ -548,6 +550,7 @@ DiveTripModelTree::DiveTripModelTree(QObject *parent) : DiveTripModelBase(parent connect(&diveListNotifier, &DiveListNotifier::divesAdded, this, &DiveTripModelTree::divesAdded); connect(&diveListNotifier, &DiveListNotifier::divesDeleted, this, &DiveTripModelTree::divesDeleted); connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &DiveTripModelTree::divesChanged); + connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &DiveTripModelTree::diveSiteChanged); connect(&diveListNotifier, &DiveListNotifier::divesMovedBetweenTrips, this, &DiveTripModelTree::divesMovedBetweenTrips); connect(&diveListNotifier, &DiveListNotifier::divesTimeChanged, this, &DiveTripModelTree::divesTimeChanged); connect(&diveListNotifier, &DiveListNotifier::divesSelected, this, &DiveTripModelTree::divesSelected); @@ -928,6 +931,34 @@ void processByTrip(QVector<dive *> dives, Function action) } } +// Helper function: collect the dives that are at the given dive site +static QVector<dive *> getDivesForSite(struct dive_site *ds) +{ + QVector<dive *> diveSiteDives; + diveSiteDives.reserve(ds->dives.nr); + + for (int i = 0; i < ds->dives.nr; ++i) + diveSiteDives.push_back(ds->dives.dives[i]); + + return diveSiteDives; +} + +// On the change of which dive site field should we update the +// dive in the list? +static bool isInterestingDiveSiteField(int field) +{ + return field == LocationInformationModel::NAME // dive site name can is shown in the dive list + || field == LocationInformationModel::TAXONOMY // country is shown in the dive list + || field == LocationInformationModel::LOCATION; // the globe icon in the dive list shows whether we have coordinates +} + +void DiveTripModelTree::diveSiteChanged(dive_site *ds, int field) +{ + if (!isInterestingDiveSiteField(field)) + return; + divesChanged(getDivesForSite(ds)); +} + void DiveTripModelTree::divesChanged(const QVector<dive *> &dives) { processByTrip(dives, [this] (dive_trip *trip, const QVector<dive *> &divesInTrip) @@ -1161,6 +1192,7 @@ DiveTripModelList::DiveTripModelList(QObject *parent) : DiveTripModelBase(parent connect(&diveListNotifier, &DiveListNotifier::divesAdded, this, &DiveTripModelList::divesAdded); connect(&diveListNotifier, &DiveListNotifier::divesDeleted, this, &DiveTripModelList::divesDeleted); connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &DiveTripModelList::divesChanged); + connect(&diveListNotifier, &DiveListNotifier::diveSiteChanged, this, &DiveTripModelList::diveSiteChanged); // Does nothing in list-view //connect(&diveListNotifier, &DiveListNotifier::divesMovedBetweenTrips, this, &DiveTripModelList::divesMovedBetweenTrips); connect(&diveListNotifier, &DiveListNotifier::divesTimeChanged, this, &DiveTripModelList::divesTimeChanged); @@ -1249,6 +1281,13 @@ void DiveTripModelList::divesDeleted(dive_trip *, bool, const QVector<dive *> &d }); } +void DiveTripModelList::diveSiteChanged(dive_site *ds, int field) +{ + if (!isInterestingDiveSiteField(field)) + return; + divesChanged(getDivesForSite(ds)); +} + void DiveTripModelList::divesChanged(const QVector<dive *> &divesIn) { QVector<dive *> dives = divesIn; diff --git a/qt-models/divetripmodel.h b/qt-models/divetripmodel.h index 8ddcf9615..b63456236 100644 --- a/qt-models/divetripmodel.h +++ b/qt-models/divetripmodel.h @@ -106,6 +106,7 @@ public slots: void divesAdded(dive_trip *trip, bool addTrip, const QVector<dive *> &dives); void divesDeleted(dive_trip *trip, bool deleteTrip, const QVector<dive *> &dives); void divesMovedBetweenTrips(dive_trip *from, dive_trip *to, bool deleteFrom, bool createTo, const QVector<dive *> &dives); + void diveSiteChanged(dive_site *ds, int field); void divesChanged(const QVector<dive *> &dives); void divesTimeChanged(timestamp_t delta, const QVector<dive *> &dives); void divesSelected(const QVector<dive *> &dives, dive *current); @@ -170,6 +171,7 @@ class DiveTripModelList : public DiveTripModelBase public slots: void divesAdded(dive_trip *trip, bool addTrip, const QVector<dive *> &dives); void divesDeleted(dive_trip *trip, bool deleteTrip, const QVector<dive *> &dives); + void diveSiteChanged(dive_site *ds, int field); void divesChanged(const QVector<dive *> &dives); void divesTimeChanged(timestamp_t delta, const QVector<dive *> &dives); // Does nothing in list view. |