subsurface/desktop-widgets/tab-widgets/TabDiveInformation.cpp
Berthold Stoeger 360f07e453 Cleanup: pass gasmix by value
In a previous commit, the get_gasmix_* functions were changed to
return by value. For consistency, also pass gasmix by value.

Note that on common 64-bit platforms struct gasmix is the size
of a pointer [2 * 32 bit vs. 64 bit] and therefore uses the
same space on the stack. On 32-bit platforms, the stack use
is probably doubled, but in return a dereference is avoided.

Supporting arbitrary gas-mixes (H2, Ar, ...) will be such an
invasive change that going back to pointers is probably the
least of our worries.

This commit is a step in const-ifying input parameters (passing
by value is the ultimate way of signaling that the input parameter
will not be changed [unless there are references to said parameter]).

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2018-08-23 05:16:38 -07:00

101 lines
3.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// SPDX-License-Identifier: GPL-2.0
#include "TabDiveInformation.h"
#include "ui_TabDiveInformation.h"
#include "../tagwidget.h"
#include <core/qthelper.h>
#include <core/statistics.h>
#include <core/display.h>
TabDiveInformation::TabDiveInformation(QWidget *parent) : TabBase(parent), ui(new Ui::TabDiveInformation())
{
ui->setupUi(this);
}
TabDiveInformation::~TabDiveInformation()
{
delete ui;
}
void TabDiveInformation::clear()
{
ui->sacText->clear();
ui->otuText->clear();
ui->maxcnsText->clear();
ui->oxygenHeliumText->clear();
ui->gasUsedText->clear();
ui->dateText->clear();
ui->diveTimeText->clear();
ui->surfaceIntervalText->clear();
ui->maximumDepthText->clear();
ui->averageDepthText->clear();
ui->waterTemperatureText->clear();
ui->airTemperatureText->clear();
ui->airPressureText->clear();
ui->salinityText->clear();
}
void TabDiveInformation::updateData()
{
clear();
ui->maxcnsText->setText(QString("%1\%").arg(displayed_dive.maxcns));
ui->otuText->setText(QString("%1").arg(displayed_dive.otu));
ui->maximumDepthText->setText(get_depth_string(displayed_dive.maxdepth, true));
ui->averageDepthText->setText(get_depth_string(displayed_dive.meandepth, true));
ui->dateText->setText(get_short_dive_date_string(displayed_dive.when));
ui->waterTemperatureText->setText(get_temperature_string(displayed_dive.watertemp, true));
ui->airTemperatureText->setText(get_temperature_string(displayed_dive.airtemp, true));
volume_t gases[MAX_CYLINDERS] = {};
get_gas_used(&displayed_dive, gases);
QString volumes;
int mean[MAX_CYLINDERS], duration[MAX_CYLINDERS];
per_cylinder_mean_depth(&displayed_dive, select_dc(&displayed_dive), mean, duration);
volume_t sac;
QString gaslist, SACs, separator;
gaslist = ""; SACs = ""; volumes = ""; separator = "";
for (int i = 0; i < MAX_CYLINDERS; i++) {
if (!is_cylinder_used(&displayed_dive, i))
continue;
gaslist.append(separator); volumes.append(separator); SACs.append(separator);
separator = "\n";
gaslist.append(gasname(displayed_dive.cylinder[i].gasmix));
if (!gases[i].mliter)
continue;
volumes.append(get_volume_string(gases[i], true));
if (duration[i]) {
sac.mliter = lrint(gases[i].mliter / (depth_to_atm(mean[i], &displayed_dive) * duration[i] / 60));
SACs.append(get_volume_string(sac, true).append(tr("/min")));
}
}
ui->gasUsedText->setText(volumes);
ui->oxygenHeliumText->setText(gaslist);
ui->diveTimeText->setText(get_dive_duration_string(displayed_dive.duration.seconds, tr("h"), tr("min"), tr("sec"),
" ", displayed_dive.dc.divemode == FREEDIVE));
struct dive *prevd;
process_all_dives(&displayed_dive, &prevd);
if (prevd)
ui->surfaceIntervalText->setText(get_dive_surfint_string(displayed_dive.when - (dive_endtime(prevd)), tr("d"), tr("h"), tr("min")));
else
ui->surfaceIntervalText->clear();
ui->sacText->setText( mean[0] ? SACs : QString());
if (displayed_dive.surface_pressure.mbar) /* this is ALWAYS displayed in mbar */
ui->airPressureText->setText(QString("%1mbar").arg(displayed_dive.surface_pressure.mbar));
else
ui->airPressureText->clear();
if (displayed_dive.salinity)
ui->salinityText->setText(QString("%1g/").arg(displayed_dive.salinity / 10.0));
else
ui->salinityText->clear();
}