summaryrefslogtreecommitdiffstats
path: root/mobile-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-08-10 17:41:35 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-08-10 09:55:11 -0700
commit0cce3ef2a84fb4aca2726893f5699526ca8fb837 (patch)
treeee4b32ebde5d3a3ac4fb51272ae014502feb3bbd /mobile-widgets
parentf18ea2e3b62f43358ea3f7f5b5ba74a351f7b088 (diff)
downloadsubsurface-0cce3ef2a84fb4aca2726893f5699526ca8fb837.tar.gz
Mobile: update dive site model if dive sites are created
Always keep the dive site model up to date when adding dive sites. This hopefully avoids creation of invalid indexes followed by crashes. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'mobile-widgets')
-rw-r--r--mobile-widgets/qmlmanager.cpp14
-rw-r--r--mobile-widgets/qmlmanager.h2
2 files changed, 14 insertions, 2 deletions
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 3bdc34ba6..1289bcf64 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -333,13 +333,19 @@ void QMLManager::openLocalThenRemote(QString url)
updateAllGlobalLists();
}
+void QMLManager::updateSiteList()
+{
+ LocationInformationModel::instance()->update();
+ emit locationListChanged();
+}
+
void QMLManager::updateAllGlobalLists()
{
buddyModel.updateModel(); emit buddyListChanged();
suitModel.updateModel(); emit suitListChanged();
divemasterModel.updateModel(); emit divemasterListChanged();
// TODO: Probably not needed anymore, as the dive site list is generated on the fly!
- LocationInformationModel::instance()->update(); emit locationListChanged();
+ updateSiteList();
}
void QMLManager::mergeLocalRepo()
@@ -774,7 +780,7 @@ void QMLManager::refreshDiveList()
DiveListModel::instance()->addAllDives();
}
-static void setupDivesite(struct dive *d, struct dive_site *ds, double lat, double lon, const char *locationtext)
+void QMLManager::setupDivesite(struct dive *d, struct dive_site *ds, double lat, double lon, const char *locationtext)
{
location_t location = create_location(lat, lon);
if (ds) {
@@ -782,6 +788,8 @@ static void setupDivesite(struct dive *d, struct dive_site *ds, double lat, doub
} else {
unregister_dive_from_dive_site(d);
add_dive_to_dive_site(d, create_dive_site_with_gps(locationtext, &location, &dive_site_table));
+ // We created a new dive site - let the dive site model know.
+ updateSiteList();
}
}
@@ -902,6 +910,8 @@ bool QMLManager::checkLocation(DiveObjectHelper *myDive, struct dive *d, QString
ds = create_dive_site(qPrintable(location), &dive_site_table);
unregister_dive_from_dive_site(d);
add_dive_to_dive_site(d, ds);
+ // We created a new dive site - let the dive site model know.
+ updateSiteList();
}
// now make sure that the GPS coordinates match - if the user changed the name but not
// the GPS coordinates, this still does the right thing as the now new dive site will
diff --git a/mobile-widgets/qmlmanager.h b/mobile-widgets/qmlmanager.h
index ff09661c6..70fd59f2b 100644
--- a/mobile-widgets/qmlmanager.h
+++ b/mobile-widgets/qmlmanager.h
@@ -236,6 +236,8 @@ private:
QString m_progressMessage;
bool m_btEnabled;
void updateAllGlobalLists();
+ void updateSiteList();
+ void setupDivesite(struct dive *d, struct dive_site *ds, double lat, double lon, const char *locationtext);
QString m_pluggedInDeviceName;
bool m_showNonDiveComputers;
struct dive *m_copyPasteDive = NULL;