diff options
author | Oliver Schwaneberg <oliver.schwaneberg@gmail.com> | 2018-02-10 23:28:05 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-03-02 08:38:22 -0800 |
commit | 0ca52f868ebe5def65153970061a1d6132ede3be (patch) | |
tree | 95d42be85b3cf4c67206b5b94b40dc07ef1f2446 /desktop-widgets | |
parent | afc9dd5f3836e7c9c75eab2435b7bd5e20a71bf9 (diff) | |
download | subsurface-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')
-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 |
4 files changed, 141 insertions, 61 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) 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> |