Make MND display depend on O2 narcotic preference

A while ago, we introduced a preference whether O2 should
be considered narcotic. We used this when computing
best mix or when entering the He content via MND. But
we forgot to make the displayed MND depend on this
preference. This patch add this.

Fixes #2895

Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
Robert C. Helling 2020-07-11 13:15:21 +02:00 committed by Dirk Hohndel
parent 4ec88aa564
commit 912e1faaf2
5 changed files with 12 additions and 3 deletions

View file

@ -1,3 +1,4 @@
planner: Honor the "O2 narcotic" preference when computing MND
desktop: fix broken merging of dives with multiple cylinders
mobile: add information about the cloud sync state to the Subsurface plate in the menu

View file

@ -126,7 +126,7 @@ void PlannerShared::set_o2narcotic(bool value)
{
qPrefDivePlanner::set_o2narcotic(value);
DivePlannerPointsModel::instance()->emitDataChanged();
DivePlannerPointsModel::instance()->cylindersModel()->updateBestMixes();
DivePlannerPointsModel::instance()->cylindersModel()->emitDataChanged();
}
double PlannerShared::bottompo2()

View file

@ -3767,7 +3767,10 @@ depth_t gas_mnd(struct gasmix mix, depth_t end, const struct dive *dive, int rou
pressure_t ppo2n2;
ppo2n2.mbar = depth_to_mbar(end.mm, dive);
int maxambient = (int)lrint(ppo2n2.mbar / (1 - get_he(mix) / 1000.0));
int maxambient = prefs.o2narcotic ?
(int)lrint(ppo2n2.mbar / (1 - get_he(mix) / 1000.0))
:
(int)lrint(ppo2n2.mbar * N2_IN_AIR / (1000 - get_he(mix) - get_o2(mix)));
rounded_depth.mm = (int)lrint(((double)mbar_to_depth(maxambient, dive)) / roundto) * roundto;
return rounded_depth;
}

View file

@ -663,10 +663,14 @@ bool CylindersModel::updateBestMixes()
/* This slot is called when the bottom pO2 and END preferences are updated, we want to
* emit dataChanged so MOD and MND are refreshed, even if the gas mix hasn't been changed */
if (gasUpdated)
emit dataChanged(createIndex(0, 0), createIndex(d->cylinders.nr - 1, COLUMNS - 1));
emitDataChanged();
return gasUpdated;
}
void CylindersModel::emitDataChanged() {
emit dataChanged(createIndex(0, 0), createIndex(d->cylinders.nr - 1, COLUMNS - 1));
}
void CylindersModel::cylindersReset(const QVector<dive *> &dives)
{
// This model only concerns the currently displayed dive. If this is not among the

View file

@ -49,6 +49,7 @@ public:
void moveAtFirst(int cylid);
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
bool updateBestMixes();
void emitDataChanged();
bool cylinderUsed(int i) const;
signals: