summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2017-10-19 15:29:59 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-10-19 14:57:02 -0400
commita422957cd6525b9753cafacfafdf1f3eef66870d (patch)
treef29ace3e6f2681c71901d061aab6035b8505629f
parenta9b692f0c30fecf950c52099d7c0f336f88c901f (diff)
downloadsubsurface-a422957cd6525b9753cafacfafdf1f3eef66870d.tar.gz
Use displayed_dc instead of current_dc
current_dc is a macro that determines the dive computer based on the current dive number. When the planner is started from an emtpy dive list, the dive number ends up being -1 and that doesn't produce a valid dive computer. Use the divecomputer of the displayed_dive instead. This is done via a macro that can also be used in two other places. Without this patch, the planner crashed when called on an empty dive list. Signed-off-by: Robert C. Helling <helling@atdotde.de>
-rw-r--r--core/dive.h1
-rw-r--r--desktop-widgets/mainwindow.cpp1
-rw-r--r--desktop-widgets/tab-widgets/maintab.cpp2
-rw-r--r--profile-widget/diveprofileitem.cpp2
4 files changed, 3 insertions, 3 deletions
diff --git a/core/dive.h b/core/dive.h
index 8e862f691..b02ce5f6c 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -549,6 +549,7 @@ extern int selected_dive;
extern unsigned int dc_number;
#define current_dive (get_dive(selected_dive))
#define current_dc (get_dive_dc(current_dive, dc_number))
+#define displayed_dc (get_dive_dc(&displayed_dive, dc_number))
static inline struct dive *get_dive(int nr)
{
diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp
index 44384bfb7..1445ea93b 100644
--- a/desktop-widgets/mainwindow.cpp
+++ b/desktop-widgets/mainwindow.cpp
@@ -909,6 +909,7 @@ void MainWindow::setupForAddAndPlan(const char *model)
displayed_dive.id = dive_getUniqID(&displayed_dive);
displayed_dive.when = QDateTime::currentMSecsSinceEpoch() / 1000L + gettimezoneoffset() + 3600;
displayed_dive.dc.model = strdup(model); // don't translate! this is stored in the XML file
+ dc_number = 1;
// setup the dive cylinders
DivePlannerPointsModel::instance()->clear();
DivePlannerPointsModel::instance()->setupCylinders();
diff --git a/desktop-widgets/tab-widgets/maintab.cpp b/desktop-widgets/tab-widgets/maintab.cpp
index c2a0c7e81..2202b96d3 100644
--- a/desktop-widgets/tab-widgets/maintab.cpp
+++ b/desktop-widgets/tab-widgets/maintab.cpp
@@ -798,7 +798,6 @@ void MainTab::acceptChanges()
addedId = displayed_dive.id;
}
struct dive *cd = current_dive;
- struct divecomputer *displayed_dc = get_dive_dc(&displayed_dive, dc_number);
// now check if something has changed and if yes, edit the selected dives that
// were identical with the master dive shown (and mark the divelist as changed)
if (!same_string(displayed_dive.suit, cd->suit))
@@ -1145,7 +1144,6 @@ void MainTab::divetype_Changed(int index)
{
if (editMode == IGNORE)
return;
- struct divecomputer *displayed_dc = get_dive_dc(&displayed_dive, dc_number);
displayed_dc->divemode = (enum dive_comp_type) index;
update_setpoint_events(&displayed_dive, displayed_dc);
markChangedWidget(ui.DiveType);
diff --git a/profile-widget/diveprofileitem.cpp b/profile-widget/diveprofileitem.cpp
index 1cd8fae4f..4c3db45f3 100644
--- a/profile-widget/diveprofileitem.cpp
+++ b/profile-widget/diveprofileitem.cpp
@@ -428,7 +428,7 @@ void DivePercentageItem::paint(QPainter *painter, const QStyleOptionGraphicsItem
struct gasmix *gasmix = NULL;
struct event *ev = NULL;
int sec = dataModel->index(i, DivePlotDataModel::TIME).data().toInt();
- gasmix = get_gasmix(&displayed_dive, current_dc, sec, &ev, gasmix);
+ gasmix = get_gasmix(&displayed_dive, displayed_dc, sec, &ev, gasmix);
int inert = 1000 - get_o2(gasmix);
mypen.setBrush(QBrush(ColorScale(value, inert)));
painter->setPen(mypen);