models: update divesite-model when clearing/updating dive model

When the dive list is cleared or updated, the entries in the
divesite-model become stale and therefore the divesite-model
(with the actual name LocationInformationModel) also must be
updated. This was done manually in some parts of the code and
forgotten in others. Therefore, do it directly in the clear()
and reset() function of the dive list-model.

This might be a bit of a layering violation: why should one
model call into another if they are not in parent/child
relationship? However, this seems easier than introducing
a global "reset dives" function that coordinates the models.

Moreover, it does not appear 100% safe: if the clearing of
the divesite model causes accesses to the divelist-model,
they happen in the midst of a model reset and we had horrible
bugs with that kind of things. However, I don't think that
should happen.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2020-03-18 19:35:25 +01:00 committed by Dirk Hohndel
parent 9722f04e40
commit 9310d72943
3 changed files with 2 additions and 2 deletions

View file

@ -660,7 +660,6 @@ void MainWindow::closeCurrentFile()
setCurrentFile(nullptr);
diveList->setSortOrder(DiveTripModelBase::NR, Qt::DescendingOrder);
MapWidget::instance()->reload();
LocationInformationModel::instance()->update();
if (!existing_filename)
setTitle();
disableShortcuts();

View file

@ -517,7 +517,6 @@ void MainTab::reload()
buddyModel.updateModel();
diveMasterModel.updateModel();
tagModel.updateModel();
LocationInformationModel::instance()->update();
}
void MainTab::refreshDisplayedDiveSite()

View file

@ -474,6 +474,7 @@ void DiveTripModelBase::clear()
beginResetModel();
clear_dive_file_data();
clearData();
LocationInformationModel::instance()->update();
oldCurrent = nullptr;
emit diveListNotifier.divesSelected({}); // Inform profile, etc of changed selection
endResetModel();
@ -485,6 +486,7 @@ void DiveTripModelBase::reset()
beginResetModel();
clearData();
populate();
LocationInformationModel::instance()->update();
endResetModel();
initSelection();
emit diveListNotifier.numShownChanged();