aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--qt-gui.cpp54
-rw-r--r--qt-ui/maintab.cpp23
-rw-r--r--qt-ui/mainwindow.cpp14
-rw-r--r--qt-ui/models.cpp1
-rw-r--r--statistics.c15
-rw-r--r--statistics.h1
7 files changed, 100 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 338f81a7c..add90b308 100644
--- a/Makefile
+++ b/Makefile
@@ -57,6 +57,7 @@ SOURCES = \
profile.c \
save-xml.c \
sha1.c \
+ statistics.c \
time.c \
qt-gui.cpp \
qt-ui/addcylinderdialog.cpp \
diff --git a/qt-gui.cpp b/qt-gui.cpp
index a4801f760..1e2c86e69 100644
--- a/qt-gui.cpp
+++ b/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"
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index df6ee69eb..5f668b2be 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -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()
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index e8fe80460..56ae64b0c 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -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);
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index eb4d8974b..9a6edce98 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -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();
diff --git a/statistics.c b/statistics.c
index 7532e346e..bee5837d6 100644
--- a/statistics.c
+++ b/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;
+}
diff --git a/statistics.h b/statistics.h
index d2709ee93..95f2957e8 100644
--- a/statistics.h
+++ b/statistics.h
@@ -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);