diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | core/units.h | 1 | ||||
-rw-r--r-- | desktop-widgets/diveplanner.cpp | 55 | ||||
-rw-r--r-- | desktop-widgets/diveplanner.h | 4 | ||||
-rw-r--r-- | desktop-widgets/diveplanner.ui | 141 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveInformation.ui | 2 |
6 files changed, 144 insertions, 61 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index f7021b77a..090d314ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,4 @@ - Add imperial support for UDCF import +- Desktop: combo box with fresh, sea water and EN 13319 in dive planner +- Desktop: Changed "salinity" to "water type" at dive planner and dive info # add new entries above this line diff --git a/core/units.h b/core/units.h index 8c616728a..2d6b6f73c 100644 --- a/core/units.h +++ b/core/units.h @@ -30,6 +30,7 @@ extern "C" { /* Salinity is expressed in weight in grams per 10l */ #define SEAWATER_SALINITY 10300 +#define EN13319_SALINITY 10200 #define FRESHWATER_SALINITY 10000 #include <stdint.h> 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) diff --git a/desktop-widgets/diveplanner.h b/desktop-widgets/diveplanner.h index 8f42dd21d..b7527f3c1 100644 --- a/desktop-widgets/diveplanner.h +++ b/desktop-widgets/diveplanner.h @@ -51,13 +51,15 @@ slots: void settingsChanged(); void atmPressureChanged(const int pressure); void heightChanged(const int height); - void salinityChanged(const double salinity); + void waterTypeChanged(const int index); + void customSalinityChanged(double density); void printDecoPlan(); void setSurfacePressure(int surface_pressure); void setSalinity(int salinity); private: Ui::DivePlanner ui; QAbstractButton *replanButton; + void waterTypeUpdateTexts(); }; #include "ui_plannerSettings.h" diff --git a/desktop-widgets/diveplanner.ui b/desktop-widgets/diveplanner.ui index 5b58f564a..1b67a5fc9 100644 --- a/desktop-widgets/diveplanner.ui +++ b/desktop-widgets/diveplanner.ui @@ -62,41 +62,6 @@ <property name="bottomMargin"> <number>0</number> </property> - <property name="spacing"> - <number>2</number> - </property> - <item row="5" column="0" colspan="3"> - <widget class="TableView" name="tableWidget" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>50</height> - </size> - </property> - </widget> - </item> - <item row="4" column="0" colspan="3"> - <widget class="TableView" name="cylinderTableWidget" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>50</height> - </size> - </property> - </widget> - </item> <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="sizePolicy"> @@ -133,7 +98,7 @@ </property> </widget> </item> - <item row="1" column="2"> + <item row="1" column="2" colspan="2"> <widget class="QDialogButtonBox" name="buttonBox"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> @@ -163,12 +128,12 @@ <item row="2" column="2"> <widget class="QLabel" name="label_3"> <property name="text"> - <string>Salinity</string> + <string>Water type</string> </property> </widget> </item> - <item row="3" column="1"> - <widget class="QSpinBox" name="ATMPressure"> + <item row="3" column="0"> + <widget class="QSpinBox" name="atmHeight"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -176,18 +141,21 @@ </sizepolicy> </property> <property name="suffix"> - <string>mbar</string> + <string>m</string> </property> <property name="minimum"> - <number>689</number> + <number>-100</number> </property> <property name="maximum"> - <number>1100</number> + <number>3000</number> + </property> + <property name="singleStep"> + <number>10</number> </property> </widget> </item> - <item row="3" column="0"> - <widget class="QSpinBox" name="atmHeight"> + <item row="3" column="1"> + <widget class="QSpinBox" name="ATMPressure"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> @@ -195,41 +163,106 @@ </sizepolicy> </property> <property name="suffix"> - <string>m</string> + <string>mbar</string> </property> <property name="minimum"> - <number>-100</number> + <number>689</number> </property> <property name="maximum"> - <number>3000</number> - </property> - <property name="singleStep"> - <number>10</number> + <number>1100</number> </property> </widget> </item> <item row="3" column="2"> - <widget class="QDoubleSpinBox" name="salinity"> + <widget class="QComboBox" name="waterType"> + <item> + <property name="text"> + <string>Fresh water</string> + </property> + </item> + <item> + <property name="text"> + <string>Sea water</string> + </property> + </item> + <item> + <property name="text"> + <string>EN13319</string> + </property> + </item> + <item> + <property name="text"> + <string>Custom</string> + </property> + </item> + </widget> + </item> + <item row="3" column="3"> + <widget class="QDoubleSpinBox" name="customSalinity"> + <property name="enabled"> + <bool>false</bool> + </property> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> + <property name="maximumSize"> + <size> + <width>90</width> + <height>16777215</height> + </size> + </property> + <property name="toolTip"> + <string extracomment="Custom water density"/> + </property> <property name="suffix"> <string>kg/ℓ</string> </property> <property name="minimum"> - <double>1.000000000000000</double> + <double>0.990000000000000</double> </property> <property name="maximum"> - <double>1.050000000000000</double> + <double>1.300000000000000</double> </property> <property name="singleStep"> <double>0.010000000000000</double> </property> <property name="value"> - <double>1.030000000000000</double> + <double>1.000000000000000</double> + </property> + </widget> + </item> + <item row="4" column="0" colspan="4"> + <widget class="TableView" name="cylinderTableWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> + </property> + </widget> + </item> + <item row="5" column="0" colspan="4"> + <widget class="TableView" name="tableWidget" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>50</height> + </size> </property> </widget> </item> diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.ui b/desktop-widgets/tab-widgets/TabDiveInformation.ui index 3e855d1c7..f81ab6fe5 100644 --- a/desktop-widgets/tab-widgets/TabDiveInformation.ui +++ b/desktop-widgets/tab-widgets/TabDiveInformation.ui @@ -303,7 +303,7 @@ <item row="4" column="1"> <widget class="QGroupBox" name="groupBox_1"> <property name="title"> - <string>Salinity</string> + <string>Water type</string> </property> <layout class="QHBoxLayout" name="diveInfoSalinityLayout"> <item> |