VPM-B: Add conservatism levels to the ui. Fix planner settings disabling.

Conservatism level can now be changed from gui, is saved in settings.
Also way of disabling the planner settings in the ui was improved
to support more deco models and be called at the widget creation.

Signed-off-by: Jan Darowski <jan.darowski@gmail.com>
This commit is contained in:
Jan Darowski 2015-08-15 15:16:51 +02:00
parent cad866013b
commit 6856e87689
5 changed files with 215 additions and 184 deletions

View file

@ -397,6 +397,12 @@ void DivePlannerPointsModel::triggerGFLow()
}
}
void DivePlannerPointsModel::setConservatism(int level)
{
prefs.conservatism_level = level;
emit dataChanged(createIndex(0, 0), createIndex(rowCount() - 1, COLUMNS - 1));
}
void DivePlannerPointsModel::setSurfacePressure(int pressure)
{
diveplan.surface_pressure = pressure;

View file

@ -65,6 +65,7 @@ slots:
void triggerGFHigh();
void setGFLow(const int ghflow);
void triggerGFLow();
void setConservatism(int level);
void setSurfacePressure(int pressure);
void setSalinity(int salinity);
int getSurfacePressure();

View file

@ -217,32 +217,37 @@ void PlannerSettingsWidget::decoSacChanged(const double decosac)
plannerModel->setDecoSac(decosac);
}
void PlannerSettingsWidget::disableDecoElements(bool value)
void PlannerSettingsWidget::disableDecoElements(int mode)
{
if (prefs.deco_mode == RECREATIONAL) {
ui.lastStop->setDisabled(value);
ui.backgasBreaks->setDisabled(value);
ui.bottompo2->setDisabled(value);
ui.decopo2->setDisabled(value);
ui.reserve_gas->setDisabled(!value);
if (mode == RECREATIONAL) {
ui.gflow->setDisabled(false);
ui.gfhigh->setDisabled(false);
ui.lastStop->setDisabled(true);
ui.backgasBreaks->setDisabled(true);
ui.bottompo2->setDisabled(true);
ui.decopo2->setDisabled(true);
ui.reserve_gas->setDisabled(false);
ui.conservatism_lvl->setDisabled(true);
}
else if (prefs.deco_mode == VPMB) {
ui.gflow->setDisabled(value);
ui.gfhigh->setDisabled(value);
ui.lastStop->setDisabled(!value);
ui.backgasBreaks->setDisabled(!value);
ui.bottompo2->setDisabled(!value);
ui.decopo2->setDisabled(!value);
ui.reserve_gas->setDisabled(value);
else if (mode == VPMB) {
ui.gflow->setDisabled(true);
ui.gfhigh->setDisabled(true);
ui.lastStop->setDisabled(false);
ui.backgasBreaks->setDisabled(false);
ui.bottompo2->setDisabled(false);
ui.decopo2->setDisabled(false);
ui.reserve_gas->setDisabled(true);
ui.conservatism_lvl->setDisabled(false);
}
else if (prefs.deco_mode == BUEHLMANN) {
ui.gflow->setDisabled(!value);
ui.gfhigh->setDisabled(!value);
ui.lastStop->setDisabled(!value);
ui.backgasBreaks->setDisabled(!value);
ui.bottompo2->setDisabled(!value);
ui.decopo2->setDisabled(!value);
ui.reserve_gas->setDisabled(value);
else if (mode == BUEHLMANN) {
ui.gflow->setDisabled(false);
ui.gfhigh->setDisabled(false);
ui.lastStop->setDisabled(false);
ui.backgasBreaks->setDisabled(false);
ui.bottompo2->setDisabled(false);
ui.decopo2->setDisabled(false);
ui.reserve_gas->setDisabled(true);
ui.conservatism_lvl->setDisabled(true);
}
}
@ -279,6 +284,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
prefs.drop_stone_mode = s.value("drop_stone_mode", prefs.drop_stone_mode).toBool();
prefs.bottomsac = s.value("bottomsac", prefs.bottomsac).toInt();
prefs.decosac = s.value("decosac", prefs.decosac).toInt();
prefs.conservatism_level = s.value("conservatism", prefs.conservatism_level).toInt();
plannerModel->getDiveplan().bottomsac = prefs.bottomsac;
plannerModel->getDiveplan().decosac = prefs.decosac;
s.endGroup();
@ -300,6 +306,8 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
ui.recreational_deco->setChecked(prefs.deco_mode == RECREATIONAL);
ui.buehlmann_deco->setChecked(prefs.deco_mode == BUEHLMANN);
ui.vpmb_deco->setChecked(prefs.deco_mode == VPMB);
ui.conservatism_lvl->setValue(prefs.conservatism_level);
disableDecoElements((int) prefs.deco_mode);
// should be the same order as in dive_comp_type!
rebreather_modes << tr("Open circuit") << tr("CCR") << tr("pSCR");
@ -341,11 +349,12 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
connect(ui.gflow, SIGNAL(valueChanged(int)), plannerModel, SLOT(setGFLow(int)));
connect(ui.gfhigh, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFHigh()));
connect(ui.gflow, SIGNAL(editingFinished()), plannerModel, SLOT(triggerGFLow()));
connect(ui.conservatism_lvl, SIGNAL(valueChanged(int)), plannerModel, SLOT(setConservatism(int)));
connect(ui.backgasBreaks, SIGNAL(toggled(bool)), this, SLOT(setBackgasBreaks(bool)));
connect(ui.switch_at_req_stop, SIGNAL(toggled(bool)), plannerModel, SLOT(setSwitchAtReqStop(bool)));
connect(ui.min_switch_duration, SIGNAL(valueChanged(int)), plannerModel, SLOT(setMinSwitchDuration(int)));
connect(ui.rebreathermode, SIGNAL(currentIndexChanged(int)), plannerModel, SLOT(setRebreatherMode(int)));
connect(plannerModel, SIGNAL(recreationChanged(bool)), this, SLOT(disableDecoElements(bool)));
connect(modeMapper, SIGNAL(mapped(int)), this, SLOT(disableDecoElements(int)));
settingsChanged();
ui.gflow->setValue(prefs.gflow);
@ -389,6 +398,7 @@ PlannerSettingsWidget::~PlannerSettingsWidget()
s.setValue("bottomsac", prefs.bottomsac);
s.setValue("decosac", prefs.decosac);
s.setValue("deco_mode", int(prefs.deco_mode));
s.setValue("conservatism", prefs.conservatism_level);
s.endGroup();
}

View file

@ -80,7 +80,7 @@ slots:
void setBottomPo2(double po2);
void setDecoPo2(double po2);
void setBackgasBreaks(bool dobreaks);
void disableDecoElements(bool value);
void disableDecoElements(int mode);
private:
Ui::plannerSettingsWidget ui;

View file

@ -255,165 +255,6 @@
<property name="spacing">
<number>2</number>
</property>
<item row="17" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Min. switch duration</string>
</property>
</widget>
</item>
<item row="19" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="18" column="1">
<widget class="QComboBox" name="rebreathermode">
<property name="currentText">
<string/>
</property>
<property name="maxVisibleItems">
<number>6</number>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QSpinBox" name="gflow">
<property name="suffix">
<string>%</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>150</number>
</property>
</widget>
</item>
<item row="13" column="1" colspan="2">
<widget class="QCheckBox" name="drop_stone_mode">
<property name="text">
<string>Drop to first depth</string>
</property>
</widget>
</item>
<item row="14" column="1" colspan="2">
<widget class="QCheckBox" name="lastStop">
<property name="text">
<string>Last stop at 6m</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="recreational_deco">
<property name="text">
<string>Recreational mode</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="label_15">
<property name="text">
<string>GF low</string>
</property>
<property name="indent">
<number>26</number>
</property>
</widget>
</item>
<item row="15" column="1" colspan="2">
<widget class="QCheckBox" name="backgasBreaks">
<property name="text">
<string>Plan backgas breaks</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLabel" name="label_16">
<property name="text">
<string>GF high</string>
</property>
<property name="indent">
<number>25</number>
</property>
</widget>
</item>
<item row="9" column="2">
<widget class="QSpinBox" name="gfhigh">
<property name="suffix">
<string>%</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>150</number>
</property>
</widget>
</item>
<item row="16" column="1" colspan="2">
<widget class="QCheckBox" name="switch_at_req_stop">
<property name="toolTip">
<string>Postpone gas change if a stop is not required</string>
</property>
<property name="text">
<string>Only switch at required stops</string>
</property>
</widget>
</item>
<item row="3" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="12" column="1">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="17" column="2">
<widget class="QSpinBox" name="min_switch_duration">
<property name="suffix">
<string>min</string>
</property>
<property name="prefix">
<string/>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>9</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QRadioButton" name="vpmb_deco">
<property name="text">
@ -460,6 +301,152 @@
</property>
</widget>
</item>
<item row="9" column="2">
<widget class="QSpinBox" name="gfhigh">
<property name="suffix">
<string>%</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>150</number>
</property>
</widget>
</item>
<item row="17" column="1" colspan="2">
<widget class="QCheckBox" name="switch_at_req_stop">
<property name="toolTip">
<string>Postpone gas change if a stop is not required</string>
</property>
<property name="text">
<string>Only switch at required stops</string>
</property>
</widget>
</item>
<item row="3" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="1">
<widget class="QLabel" name="label_15">
<property name="text">
<string>GF low</string>
</property>
<property name="indent">
<number>26</number>
</property>
</widget>
</item>
<item row="16" column="1" colspan="2">
<widget class="QCheckBox" name="backgasBreaks">
<property name="text">
<string>Plan backgas breaks</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLabel" name="label_16">
<property name="text">
<string>GF high</string>
</property>
<property name="indent">
<number>25</number>
</property>
</widget>
</item>
<item row="18" column="2">
<widget class="QSpinBox" name="min_switch_duration">
<property name="suffix">
<string>min</string>
</property>
<property name="prefix">
<string/>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>9</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
<item row="15" column="1" colspan="2">
<widget class="QCheckBox" name="lastStop">
<property name="text">
<string>Last stop at 6m</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QRadioButton" name="recreational_deco">
<property name="text">
<string>Recreational mode</string>
</property>
</widget>
</item>
<item row="19" column="1">
<widget class="QComboBox" name="rebreathermode">
<property name="currentText" stdset="0">
<string/>
</property>
<property name="maxVisibleItems">
<number>6</number>
</property>
</widget>
</item>
<item row="8" column="2">
<widget class="QSpinBox" name="gflow">
<property name="suffix">
<string>%</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>150</number>
</property>
</widget>
</item>
<item row="14" column="1" colspan="2">
<widget class="QCheckBox" name="drop_stone_mode">
<property name="text">
<string>Drop to first depth</string>
</property>
</widget>
</item>
<item row="18" column="1">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Min. switch duration</string>
</property>
</widget>
</item>
<item row="20" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="1" alignment="Qt::AlignHCenter">
<widget class="QCheckBox" name="safetystop">
<property name="layoutDirection">
@ -486,6 +473,33 @@
</property>
</spacer>
</item>
<item row="13" column="1">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="12" column="1">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Conservatism level</string>
</property>
</widget>
</item>
<item row="12" column="2">
<widget class="QSpinBox" name="conservatism_lvl">
<property name="maximum">
<number>4</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>