summaryrefslogtreecommitdiffstats
path: root/qt-ui/maintab.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-14 19:36:41 +0900
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-11-14 19:36:41 +0900
commited41d5a74490b9af03ece57015d6867bbf00df14 (patch)
treeccd546fc9ae72b936e9dd60485c3b1155d6a217c /qt-ui/maintab.cpp
parentf6eb26dbae7be8a5a8482127ee331ee863f13fc3 (diff)
downloadsubsurface-ed41d5a74490b9af03ece57015d6867bbf00df14.tar.gz
Sort the dive table after adding a dive
This commit scares me. Any pointers to dives or indices into the dive table... anything like that is invalid after we resort the table. Well, not technically "invalid" (as in bad pointers), but after re-sorting the table these will possibly not be pointing at what we expected. This starts with the selection being "wrong" after we add a dive that isn't the last dive (once we click OK the chronologically last dive will be selected). But of course without doing this, our #1 assumption about the dive_table is broken. The dive_table is supposed to be in chronological order. Best advice of course would be "don't enter dives out of order" - but of course that's not realistic. Fixes #234 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/maintab.cpp')
-rw-r--r--qt-ui/maintab.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index f53defbbf..315eff90a 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -353,6 +353,8 @@ void MainTab::updateDiveInfo(int dive)
ui.diveTimeText->setText(QString::number((int)((d->duration.seconds + 30) / 60)));
if (prevd)
ui.surfaceIntervalText->setText(get_time_string(d->when - (prevd->when + prevd->duration.seconds), 4));
+ else
+ ui.surfaceIntervalText->clear();
if ((sacVal.mliter = d->sac) > 0)
ui.sacText->setText(get_volume_string(sacVal, TRUE).append(tr("/min")));
else
@@ -510,13 +512,16 @@ void MainTab::acceptChanges()
mainWindow()->dive_list()->unselectDives();
mainWindow()->dive_list()->selectDive(addedDive, true, true);
mainWindow()->showProfile();
- mainWindow()->refreshDisplay();
mark_divelist_changed(TRUE);
DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::NOTHING);
}
editMode = NONE;
resetPallete();
+ // now comes the scary moment... we need to re-sort dive table in case this dive wasn't the last
+ // so now all pointers become invalid
+ // fingers crossed that we aren't holding on to anything here
+ sort_table(&dive_table);
mainWindow()->refreshDisplay();
}