summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/diveplanner.cpp
diff options
context:
space:
mode:
authorGravatar Oliver Schwaneberg <oliver.schwaneberg@gmail.com>2018-02-10 23:28:05 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-03-02 08:38:22 -0800
commit0ca52f868ebe5def65153970061a1d6132ede3be (patch)
tree95d42be85b3cf4c67206b5b94b40dc07ef1f2446 /desktop-widgets/diveplanner.cpp
parentafc9dd5f3836e7c9c75eab2435b7bd5e20a71bf9 (diff)
downloadsubsurface-0ca52f868ebe5def65153970061a1d6132ede3be.tar.gz
Choose water presets from a qcombobox in planner, custom value possible
Add a combo box for water types with defaults for fresh water, sea water and the EN 13319. All values taken from units.h, where EN 13319 was added beforehand. Custom values can be entered through a spinbox. Also changed "Salinity" in TapDiveInformation.ui to "Water type". Translation required! Signed-off-by: Oliver Schwaneberg <oliver.schwaneberg@gmail.com>
Diffstat (limited to 'desktop-widgets/diveplanner.cpp')
-rw-r--r--desktop-widgets/diveplanner.cpp55
1 files changed, 50 insertions, 5 deletions
diff --git a/desktop-widgets/diveplanner.cpp b/desktop-widgets/diveplanner.cpp
index bac0f9495..fd7dc948e 100644
--- a/desktop-widgets/diveplanner.cpp
+++ b/desktop-widgets/diveplanner.cpp
@@ -117,6 +117,10 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, Qt::WindowFlags f) : QWidg
ui.cylinderTableWidget->setTitle(tr("Available gases"));
ui.cylinderTableWidget->setBtnToolTip(tr("Add cylinder"));
ui.cylinderTableWidget->setModel(CylindersModel::instance());
+ ui.waterType->setItemData(0, FRESHWATER_SALINITY);
+ ui.waterType->setItemData(1, SEAWATER_SALINITY);
+ ui.waterType->setItemData(2, EN13319_SALINITY);
+ waterTypeUpdateTexts();
QTableView *view = ui.cylinderTableWidget->view();
view->setColumnHidden(CylindersModel::START, true);
view->setColumnHidden(CylindersModel::END, true);
@@ -147,7 +151,8 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, Qt::WindowFlags f) : QWidg
connect(ui.dateEdit, SIGNAL(dateChanged(QDate)), plannerModel, SLOT(setStartDate(QDate)));
connect(ui.ATMPressure, SIGNAL(valueChanged(int)), this, SLOT(atmPressureChanged(int)));
connect(ui.atmHeight, SIGNAL(valueChanged(int)), this, SLOT(heightChanged(int)));
- connect(ui.salinity, SIGNAL(valueChanged(double)), this, SLOT(salinityChanged(double)));
+ connect(ui.waterType, SIGNAL(currentIndexChanged(int)), this, SLOT(waterTypeChanged(int)));
+ connect(ui.customSalinity, SIGNAL(valueChanged(double)), this, SLOT(customSalinityChanged(double)));
connect(plannerModel, SIGNAL(startTimeChanged(QDateTime)), this, SLOT(setupStartTime(QDateTime)));
// Creating (and canceling) the plan
@@ -195,7 +200,23 @@ void PlannerSettingsWidget::setDiveMode(int mode)
void DivePlannerWidget::setSalinity(int salinity)
{
- ui.salinity->setValue(salinity / 10000.0);
+ bool mapped = false;
+ for (int i = 0; i < ui.waterType->count(); i++) {
+ if (salinity == ui.waterType->itemData(i).toInt()) {
+ mapped = true;
+ ui.waterType->setCurrentIndex(i);
+ break;
+ }
+ }
+
+ if (!mapped) {
+ /* Assign to last element "custom" in combo box */
+ ui.waterType->setItemData(ui.waterType->count()-1, salinity);
+ ui.waterType->setCurrentIndex(ui.waterType->count()-1);
+ ui.customSalinity->setEnabled(true);
+ ui.customSalinity->setValue(salinity / 10000.0);
+ }
+ plannerModel->setSalinity(salinity);
}
void DivePlannerWidget::settingsChanged()
@@ -232,10 +253,34 @@ void DivePlannerWidget::heightChanged(const int height)
plannerModel->setSurfacePressure(pressure);
}
-void DivePlannerWidget::salinityChanged(const double salinity)
+void DivePlannerWidget::waterTypeUpdateTexts()
+{
+ double density;
+ /* Do not set text in last/custom element */
+ for (int i = 0; i < ui.waterType->count()-1; i++) {
+ if (ui.waterType->itemData(i) != QVariant::Invalid) {
+ QString densityText = ui.waterType->itemText(i).split("(")[0].trimmed();
+ density = ui.waterType->itemData(i).toInt() / 10000.0;
+ densityText.append(QString(" (%L1%2)").arg(density, 0, 'f', 2).arg(tr("kg/ℓ")));
+ ui.waterType->setItemText(i, densityText);
+ }
+ }
+}
+
+void DivePlannerWidget::waterTypeChanged(const int index)
+{
+ ui.customSalinity->setEnabled(index == ui.waterType->count() - 1);
+ ui.customSalinity->setValue(ui.waterType->itemData(index).toInt() / 10000.0);
+ plannerModel->setSalinity(ui.waterType->itemData(index).toInt());
+}
+
+void DivePlannerWidget::customSalinityChanged(double density)
{
- /* Salinity is expressed in weight in grams per 10l */
- plannerModel->setSalinity(lrint(10000 * salinity));
+ if (ui.customSalinity->isEnabled()) {
+ int newSalinity = (int)(density * 10000.0);
+ ui.waterType->setItemData(ui.waterType->count() - 1, newSalinity);
+ plannerModel->setSalinity(newSalinity);
+ }
}
void PlannerSettingsWidget::bottomSacChanged(const double bottomSac)