mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Start populating the maintab Dive Info widget
Establish some useful helpers and use them when updating the values. One of the helpers (from statistics.c) puzzlingly doesn't link - so that's ifdefed out. Also had to re-arrange the settings reading code (it came too late) and to extract the expanding code of the top dive from the settings reading code (as it had no business being there to begin with). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
1a8239a240
commit
b75a89aa86
7 changed files with 100 additions and 9 deletions
1
Makefile
1
Makefile
|
@ -57,6 +57,7 @@ SOURCES = \
|
|||
profile.c \
|
||||
save-xml.c \
|
||||
sha1.c \
|
||||
statistics.c \
|
||||
time.c \
|
||||
qt-gui.cpp \
|
||||
qt-ui/addcylinderdialog.cpp \
|
||||
|
|
54
qt-gui.cpp
54
qt-gui.cpp
|
@ -133,5 +133,59 @@ void set_dc_nickname(struct dive *dive)
|
|||
/* needs Qt implementation */
|
||||
}
|
||||
|
||||
QString get_depth_string(depth_t depth, bool showunit)
|
||||
{
|
||||
if (prefs.units.length == units::METERS) {
|
||||
double meters = depth.mm / 1000.0;
|
||||
return QString("%1%2").arg(meters, 0, 'f', meters >= 20.0 ? 0 : 1 ).arg(showunit ? _("m") : "");
|
||||
} else {
|
||||
double feet = mm_to_feet(depth.mm);
|
||||
return QString("%1%2").arg(feet, 0, 'f', 1). arg(showunit ? _("ft") : "");
|
||||
}
|
||||
}
|
||||
|
||||
QString get_weight_string(weight_t weight, bool showunit)
|
||||
{
|
||||
if (prefs.units.weight == units::KG) {
|
||||
double kg = weight.grams / 1000.0;
|
||||
return QString("%1%2").arg(kg, 0, 'f', kg >= 20.0 ? 0 : 1 ).arg(showunit ? _("kg") : "");
|
||||
} else {
|
||||
double lbs = grams_to_lbs(weight.grams);
|
||||
return QString("%1%2").arg(lbs, 0, 'f', lbs >= 40.0 ? 0 : 1 ).arg(showunit ? _("lbs") : "");
|
||||
}
|
||||
}
|
||||
|
||||
QString get_temperature_string(temperature_t temp, bool showunit)
|
||||
{
|
||||
if (prefs.units.temperature == units::CELSIUS) {
|
||||
double celsius = mkelvin_to_C(temp.mkelvin);
|
||||
return QString("%1%2").arg(celsius, 0, 'f', 1).arg(showunit ? _("C") : "");
|
||||
} else {
|
||||
double fahrenheit = mkelvin_to_F(temp.mkelvin);
|
||||
return QString("%1%2").arg(fahrenheit, 0, 'f', 1).arg(showunit ? _("F") : "");
|
||||
}
|
||||
}
|
||||
|
||||
QString get_volume_string(volume_t volume, bool showunit)
|
||||
{
|
||||
if (prefs.units.volume == units::LITER) {
|
||||
double liter = volume.mliter / 1000.0;
|
||||
return QString("%1%2").arg(liter, 0, 'f', liter >= 40.0 ? 0 : 1 ).arg(showunit ? _("l") : "");
|
||||
} else {
|
||||
double cuft = ml_to_cuft(volume.mliter);
|
||||
return QString("%1%2").arg(cuft, 0, 'f', cuft >= 20.0 ? 0 : (cuft >= 2.0 ? 1 : 2)).arg(showunit ? _("cuft") : "");
|
||||
}
|
||||
}
|
||||
|
||||
QString get_pressure_string(pressure_t pressure, bool showunit)
|
||||
{
|
||||
if (prefs.units.pressure == units::BAR) {
|
||||
double bar = pressure.mbar / 1000.0;
|
||||
return QString("%1%2").arg(bar, 0, 'f', 1).arg(showunit ? _("bar") : "");
|
||||
} else {
|
||||
double psi = mbar_to_PSI(pressure.mbar);
|
||||
return QString("%1%2").arg(psi, 0, 'f', 0).arg(showunit ? _("psi") : "");
|
||||
}
|
||||
}
|
||||
|
||||
#include "qt-gui.moc"
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#include "ui_maintab.h"
|
||||
#include "addcylinderdialog.h"
|
||||
#include "addweightsystemdialog.h"
|
||||
#include "../helpers.h"
|
||||
#include "../statistics.h"
|
||||
|
||||
#include <QLabel>
|
||||
|
||||
|
@ -66,6 +68,7 @@ void MainTab::clearStats()
|
|||
else \
|
||||
ui->field->setText(d->field)
|
||||
|
||||
|
||||
void MainTab::updateDiveInfo(int dive)
|
||||
{
|
||||
// So, this is what happens now:
|
||||
|
@ -77,7 +80,7 @@ void MainTab::updateDiveInfo(int dive)
|
|||
// open the file maintab.ui on the designer
|
||||
// click on the item and check its objectName,
|
||||
// the access is ui->objectName from here on.
|
||||
|
||||
volume_t sacVal;
|
||||
struct dive *d = get_dive(dive);
|
||||
UPDATE_TEXT(d, notes);
|
||||
UPDATE_TEXT(d, location);
|
||||
|
@ -88,6 +91,24 @@ void MainTab::updateDiveInfo(int dive)
|
|||
ui->rating->setCurrentStars(d->rating);
|
||||
else
|
||||
ui->rating->setCurrentStars(0);
|
||||
ui->maximumDepthText->setText(get_depth_string(d->maxdepth, TRUE));
|
||||
ui->averageDepthText->setText(get_depth_string(d->meandepth, TRUE));
|
||||
sacVal.mliter = d ? d->sac : 0;
|
||||
ui->sacText->setText(get_volume_string(sacVal, TRUE).append("/min"));
|
||||
ui->otuText->setText(QString("%1").arg( d ? d->otu : 0));
|
||||
ui->waterTemperatureText->setText(d ? get_temperature_string(d->watertemp, TRUE) : "");
|
||||
ui->airTemperatureText->setText(d ? get_temperature_string(d->airtemp, TRUE) : "");
|
||||
if (d && d->surface_pressure.mbar)
|
||||
/* this is ALWAYS displayed in mbar */
|
||||
ui->airPressureText->setText(QString("%1mbar").arg(d->surface_pressure.mbar));
|
||||
else
|
||||
ui->airPressureText->setText(QString(""));
|
||||
#if 0 /* this fails to link, even though the function is defined in statistics.c / statistics.h */
|
||||
if (d)
|
||||
ui->gasUsedText->setText(get_volume_string(get_gas_used(d), TRUE));
|
||||
else
|
||||
#endif
|
||||
ui->gasUsedText->setText("");
|
||||
}
|
||||
|
||||
void MainTab::on_addCylinder_clicked()
|
||||
|
|
|
@ -32,14 +32,17 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow()),
|
|||
sortModel(new QSortFilterProxyModel())
|
||||
{
|
||||
ui->setupUi(this);
|
||||
readSettings();
|
||||
sortModel->setSourceModel(model);
|
||||
ui->ListWidget->setModel(sortModel);
|
||||
setWindowIcon(QIcon(":subsurface-icon"));
|
||||
|
||||
connect(ui->ListWidget->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
|
||||
this, SLOT(dive_selection_changed(QItemSelection,QItemSelection)));
|
||||
|
||||
readSettings();
|
||||
QModelIndex firstDiveOrTrip = sortModel->index(0,0);
|
||||
if (sortModel->index(0,0, firstDiveOrTrip).isValid())
|
||||
ui->ListWidget->setCurrentIndex(sortModel->index(0,0, firstDiveOrTrip));
|
||||
else
|
||||
ui->ListWidget->setCurrentIndex(firstDiveOrTrip);
|
||||
}
|
||||
|
||||
void MainWindow::on_actionNew_triggered()
|
||||
|
@ -343,11 +346,6 @@ void MainWindow::readSettings()
|
|||
}
|
||||
ui->ListWidget->collapseAll();
|
||||
ui->ListWidget->expand(sortModel->index(0,0));
|
||||
QModelIndex firstDiveOrTrip = sortModel->index(0,0);
|
||||
if (sortModel->index(0,0, firstDiveOrTrip).isValid())
|
||||
ui->ListWidget->setCurrentIndex(sortModel->index(0,0, firstDiveOrTrip));
|
||||
else
|
||||
ui->ListWidget->setCurrentIndex(firstDiveOrTrip);
|
||||
settings.endGroup();
|
||||
settings.beginGroup("Units");
|
||||
GET_UNIT(v, "feet", length, units::METERS, units::FEET);
|
||||
|
|
|
@ -677,6 +677,7 @@ void DiveTripModel::setupModelData()
|
|||
|
||||
while (--i >= 0) {
|
||||
struct dive* dive = get_dive(i);
|
||||
update_cylinder_related_info(dive);
|
||||
dive_trip_t* trip = dive->divetrip;
|
||||
|
||||
DiveItem* diveItem = new DiveItem();
|
||||
|
|
15
statistics.c
15
statistics.c
|
@ -267,3 +267,18 @@ void get_selected_dives_text(char *buffer, int size)
|
|||
}
|
||||
}
|
||||
|
||||
volume_t get_gas_used(struct dive *dive)
|
||||
{
|
||||
int idx;
|
||||
volume_t gas_used = { 0 };
|
||||
for (idx = 0; idx < MAX_CYLINDERS; idx++) {
|
||||
cylinder_t *cyl = &dive->cylinder[idx];
|
||||
pressure_t start, end;
|
||||
|
||||
start = cyl->start.mbar ? cyl->start : cyl->sample_start;
|
||||
end = cyl->end.mbar ?cyl->sample_end : cyl->sample_end;
|
||||
if (start.mbar && end.mbar)
|
||||
gas_used.mliter += gas_volume(cyl, start) - gas_volume(cyl, end);
|
||||
}
|
||||
return gas_used;
|
||||
}
|
||||
|
|
|
@ -31,3 +31,4 @@ extern char *get_time_string(int seconds, int maxdays);
|
|||
extern char *get_minutes(int seconds);
|
||||
extern void process_all_dives(struct dive *dive, struct dive **prev_dive);
|
||||
extern void get_selected_dives_text(char *buffer, int size);
|
||||
extern volume_t get_gas_used(struct dive *dive);
|
||||
|
|
Loading…
Reference in a new issue