summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2014-03-17 08:19:09 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-03-17 10:53:49 -0700
commit37794e2e236fbbc4a1a55724df3bb1ef160a9ae7 (patch)
tree54130255d041e1019fb48eb5e2a7fb35b634f249 /qt-ui
parent60ceb8ebc1afb196e66f7decb494c9e4e67fed7a (diff)
downloadsubsurface-37794e2e236fbbc4a1a55724df3bb1ef160a9ae7.tar.gz
Be more careful about dive computer selection
The selection logic was a bit random: some places would return NULL if the dive computer index was out of range, others would return the primary dive computer, and actually moving between dive computers would just blindly increment and decrement the number. This always selects the primary computer if the index is out of bounds, and makes sure we stay in bound when switching beteen dive computers (but switching between dives can then turn an in-bound number into an out-of-bounds one) Fixes #464 Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/diveplanner.cpp2
-rw-r--r--qt-ui/maintab.cpp6
-rw-r--r--qt-ui/mainwindow.cpp6
-rw-r--r--qt-ui/profile/diveplotdatamodel.cpp2
-rw-r--r--qt-ui/profile/profilewidget2.cpp2
5 files changed, 10 insertions, 8 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 27eedb586..476812080 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -1472,7 +1472,7 @@ void DivePlannerPointsModel::createPlan()
plan(&diveplan, &cache, &tempDive, isPlanner());
copy_cylinders(stagingDive, tempDive);
int mean[MAX_CYLINDERS], duration[MAX_CYLINDERS];
- per_cylinder_mean_depth(tempDive, select_dc(&tempDive->dc), mean, duration);
+ per_cylinder_mean_depth(tempDive, select_dc(tempDive), mean, duration);
for (int i = 0; i < MAX_CYLINDERS; i++) {
cylinder_t *cyl = tempDive->cylinder + i;
if (cylinder_none(cyl))
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 378ee6163..660fc4f90 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -483,7 +483,7 @@ void MainTab::updateDiveInfo(int dive)
get_gas_used(d, gases);
QString volumes = get_volume_string(gases[0], true);
int mean[MAX_CYLINDERS], duration[MAX_CYLINDERS];
- per_cylinder_mean_depth(d, select_dc(&d->dc), mean, duration);
+ per_cylinder_mean_depth(d, select_dc(d), mean, duration);
volume_t sac;
QString SACs;
if (mean[0] && duration[0]) {
@@ -864,13 +864,13 @@ void MainTab::on_divemaster_textChanged()
void MainTab::on_airtemp_textChanged(const QString &text)
{
- EDIT_SELECTED_DIVES(select_dc(&mydive->dc)->airtemp.mkelvin = parseTemperatureToMkelvin(text));
+ EDIT_SELECTED_DIVES(select_dc(mydive)->airtemp.mkelvin = parseTemperatureToMkelvin(text));
markChangedWidget(ui.airtemp);
}
void MainTab::on_watertemp_textChanged(const QString &text)
{
- EDIT_SELECTED_DIVES(select_dc(&mydive->dc)->watertemp.mkelvin = parseTemperatureToMkelvin(text));
+ EDIT_SELECTED_DIVES(select_dc(mydive)->watertemp.mkelvin = parseTemperatureToMkelvin(text));
markChangedWidget(ui.watertemp);
}
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 02c424fe2..8ca3bfad3 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -507,14 +507,16 @@ void MainWindow::saveSplitterSizes()
void MainWindow::on_actionPreviousDC_triggered()
{
- dc_number--;
+ unsigned nrdc = number_of_computers(current_dive);
+ dc_number = (dc_number + nrdc - 1) % nrdc;
ui.InfoWidget->updateDiveInfo(selected_dive);
ui.newProfile->plotDives(QList<struct dive *>() << (current_dive));
}
void MainWindow::on_actionNextDC_triggered()
{
- dc_number++;
+ unsigned nrdc = number_of_computers(current_dive);
+ dc_number = (dc_number + 1) % nrdc;
ui.InfoWidget->updateDiveInfo(selected_dive);
ui.newProfile->plotDives(QList<struct dive *>() << (current_dive));
}
diff --git a/qt-ui/profile/diveplotdatamodel.cpp b/qt-ui/profile/diveplotdatamodel.cpp
index 7412a7764..755dd9264 100644
--- a/qt-ui/profile/diveplotdatamodel.cpp
+++ b/qt-ui/profile/diveplotdatamodel.cpp
@@ -183,7 +183,7 @@ void DivePlotDataModel::calculateDecompression()
struct dive *d = getDiveById(id());
if (!d)
return;
- struct divecomputer *dc = select_dc(&d->dc);
+ struct divecomputer *dc = select_dc(d);
init_decompression(d);
calculate_deco_information(d, dc, &pInfo, false);
dataChanged(index(0, CEILING), index(pInfo.nr - 1, TISSUE_16));
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 9767de3e3..90ff5eeba 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -358,7 +358,7 @@ void ProfileWidget2::plotDives(QList<dive *> dives)
// next get the dive computer structure - if there are no samples
// let's create a fake profile that's somewhat reasonable for the
// data that we have
- struct divecomputer *currentdc = select_dc(&d->dc);
+ struct divecomputer *currentdc = select_dc(d);
Q_ASSERT(currentdc);
if (!currentdc || !currentdc->samples) {
currentdc = fake_dc(currentdc);