diff options
-rw-r--r-- | deco.c | 5 | ||||
-rw-r--r-- | deco.h | 12 | ||||
-rw-r--r-- | pref.h | 1 | ||||
-rw-r--r-- | profile.c | 15 | ||||
-rw-r--r-- | profile.h | 1 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 2 | ||||
-rw-r--r-- | qt-ui/preferences.cpp | 3 | ||||
-rw-r--r-- | qt-ui/preferences.ui | 38 | ||||
-rw-r--r-- | qt-ui/profilegraphics.cpp | 26 |
9 files changed, 88 insertions, 15 deletions
@@ -83,6 +83,9 @@ int ci_pointing_to_guiding_tissue; double gf_low_pressure_this_dive; #define TISSUE_ARRAY_SZ sizeof(tissue_n2_sat) +double tolerated_by_tissue[16]; + + static double tissue_tolerance_calc(const struct dive *dive) { int ci = -1; @@ -117,6 +120,8 @@ static double tissue_tolerance_calc(const struct dive *dive) (1.0 - buehlmann_inertgas_b)*(gf_low * gf_low_pressure_this_dive - gf_high * surface) + buehlmann_inertgas_b * (gf_low_pressure_this_dive - surface)); + tolerated_by_tissue[ci] = tolerated; + if (tolerated > ret_tolerance_limit_ambient_pressure) { ci_pointing_to_guiding_tissue = ci; @@ -0,0 +1,12 @@ +#ifndef DECO_H +#define DECO_H + +#ifdef __cplusplus +extern "C" { +#endif + + extern double tolerated_by_tissue[]; + + extern double buehlmann_N2_t_halflife[]; + +#endif @@ -39,6 +39,7 @@ struct preferences { short profile_red_ceiling; short profile_calc_ceiling; short calc_ceiling_3m_incr; + short calc_all_tissues; short gflow; short gfhigh; int map_provider; @@ -12,6 +12,7 @@ #include "divelist.h" #include "profile.h" +#include "deco.h" #include "libdivecomputer/parser.h" #include "libdivecomputer/version.h" @@ -971,7 +972,7 @@ static void calculate_deco_information(struct dive *dive, struct divecomputer *d double surface_pressure = (dc->surface_pressure.mbar ? dc->surface_pressure.mbar : get_surface_pressure_in_mbar(dive, TRUE)) / 1000.0; for (i = 1; i < pi->nr; i++) { - int fo2, fhe, j, t0, t1; + int fo2, fhe, j, k, t0, t1; double tissue_tolerance; struct plot_data *entry = pi->entry + i; int cylinderindex = entry->cylinderindex; @@ -1038,6 +1039,8 @@ static void calculate_deco_information(struct dive *dive, struct divecomputer *d entry->ceiling = (entry - 1)->ceiling; else entry->ceiling = deco_allowed_depth(tissue_tolerance, surface_pressure, dive, !prefs.calc_ceiling_3m_incr); + for (k=0; k<16; k++) + entry->ceilings[k] = deco_allowed_depth(tolerated_by_tissue[k], surface_pressure, dive, 1); } #if DECO_CALC_DEBUG & 1 @@ -1137,6 +1140,16 @@ static void plot_string(struct plot_data *entry, char *buf, int bufsize, depthvalue = get_depth_units(entry->ceiling, NULL, &depth_unit); memcpy(buf2, buf, bufsize); snprintf(buf, bufsize, _("%s\nCalculated ceiling %.0f %s"), buf2, depthvalue, depth_unit); + if (prefs.calc_all_tissues){ + int k; + for (k=0; k<16; k++){ + if (entry->ceilings[k]){ + depthvalue = get_depth_units(entry->ceilings[k], NULL, &depth_unit); + memcpy(buf2, buf, bufsize); + snprintf(buf, bufsize, _("%s\nTissue %.0fmin: %.0f %s"), buf2, buehlmann_N2_t_halflife[k], depthvalue, depth_unit); + } + } + } } if (entry->stopdepth) { depthvalue = get_depth_units(entry->stopdepth, NULL, &depth_unit); @@ -23,6 +23,7 @@ struct plot_data { /* Depth info */ int depth; int ceiling; + int ceilings[16]; int ndl; int stoptime; int stopdepth; diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index 14958b50f..79e3f2c7d 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -403,6 +403,7 @@ void MainWindow::readSettings() GET_BOOL(v, "dcceiling", prefs.profile_dc_ceiling); GET_BOOL(v, "calcceiling", prefs.profile_calc_ceiling); GET_BOOL(v, "calcceiling3m", prefs.calc_ceiling_3m_incr); + GET_BOOL(v, "calcalltissues", prefs.calc_all_tissues); v = settings.value(QString("gflow")); if (v.isValid()) prefs.gflow = v.toInt(); @@ -479,6 +480,7 @@ void MainWindow::writeSettings() SAVE_VALUE("redceiling", profile_red_ceiling); SAVE_VALUE("calcceiling", profile_calc_ceiling); SAVE_VALUE("calcceiling3m", calc_ceiling_3m_incr); + SAVE_VALUE("calcalltissues", calc_all_tissues); SAVE_VALUE("dcceiling", profile_dc_ceiling); SAVE_VALUE("gflow", gflow); SAVE_VALUE("gfhigh", gfhigh); diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index 453f20c34..68dcbf2a0 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -41,6 +41,8 @@ PreferencesDialog::PreferencesDialog(QWidget* parent, Qt::WindowFlags f) : QDial ui->calculated_ceiling->setChecked(B(calcceiling, profile_calc_ceiling)); ui->increment_3m->setEnabled(ui->calculated_ceiling->isChecked()); ui->increment_3m->setChecked(B(calcceiling3m, calc_ceiling_3m_incr)); + ui->all_tissues->setEnabled(ui->all_tissues->isChecked()); + ui->all_tissues->setChecked(B(calcalltissues, calc_all_tissues)); ui->gflow->setValue((int)(I(gflow, gflow))); ui->gfhigh->setValue((int)(I(gfhigh, gfhigh))); @@ -112,6 +114,7 @@ void PreferencesDialog::syncSettings() SB("redceiling", ui->red_ceiling); SB("calcceiling", ui->calculated_ceiling); SB("calcceiling3m", ui->increment_3m); + SB("calcalltissues", ui->all_tissues); s.setValue("gflow", ui->gflow->value()); s.setValue("gfhigh", ui->gfhigh->value()); s.endGroup(); diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui index 348e62ecd..1617c453b 100644 --- a/qt-ui/preferences.ui +++ b/qt-ui/preferences.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>444</width> - <height>386</height> + <width>604</width> + <height>490</height> </rect> </property> <property name="windowTitle"> @@ -116,7 +116,7 @@ </sizepolicy> </property> <property name="currentIndex"> - <number>1</number> + <number>2</number> </property> <widget class="QWidget" name="page_2"> <layout class="QVBoxLayout" name="verticalLayout_3"> @@ -624,8 +624,8 @@ </property> </widget> </item> - </layout> - </item> + </layout> + </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_10"> <item> @@ -649,6 +649,16 @@ </spacer> </item> <item> + <widget class="QCheckBox" name="all_tissues"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>show all tissues</string> + </property> + </widget> + </item> + <item> <widget class="QCheckBox" name="increment_3m"> <property name="enabled"> <bool>false</bool> @@ -891,18 +901,18 @@ </hints> </connection> <connection> - <sender>dc_ceiling</sender> + <sender>calculated_ceiling</sender> <signal>clicked(bool)</signal> - <receiver>red_ceiling</receiver> + <receiver>all_tissues</receiver> <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> <x>288</x> - <y>364</y> + <y>344</y> </hint> <hint type="destinationlabel"> <x>555</x> - <y>371</y> + <y>351</y> </hint> </hints> </connection> @@ -913,21 +923,21 @@ <slot>setEnabled(bool)</slot> <hints> <hint type="sourcelabel"> - <x>288</x> - <y>344</y> + <x>198</x> + <y>286</y> </hint> <hint type="destinationlabel"> - <x>555</x> - <y>351</y> + <x>503</x> + <y>286</y> </hint> </hints> </connection> </connections> <buttongroups> - <buttongroup name="buttonGroup"/> <buttongroup name="buttonGroup_2"/> <buttongroup name="buttonGroup_3"/> <buttongroup name="buttonGroup_4"/> <buttongroup name="buttonGroup_5"/> + <buttongroup name="buttonGroup"/> </buttongroups> </ui> diff --git a/qt-ui/profilegraphics.cpp b/qt-ui/profilegraphics.cpp index 663aefe25..d635e1956 100644 --- a/qt-ui/profilegraphics.cpp +++ b/qt-ui/profilegraphics.cpp @@ -1072,6 +1072,32 @@ void ProfileGraphicsView::plot_depth_profile() neatFill->setBrush(pat); scene()->addItem(neatFill); } + + /* plot the calculated ceiling for all tissues */ + if (prefs.calc_all_tissues){ + int k; + for (k=0; k<16; k++){ + if (prefs.profile_calc_ceiling) { + pat.setColorAt(0, profile_color[CALC_CEILING_SHALLOW].first()); + pat.setColorAt(1, QColor(100, 100, 100, 50)); + + entry = gc.pi.entry; + p.clear(); + p.append(QPointF(SCALEGC(0, 0))); + for (i = 0; i < gc.pi.nr; i++, entry++) { + if ((entry->ceilings)[k]) + p.append(QPointF(SCALEGC(entry->sec, (entry->ceilings)[k]))); + else + p.append(QPointF(SCALEGC(entry->sec, 0))); + } + p.append(QPointF(SCALEGC((entry-1)->sec, 0))); + neatFill = new QGraphicsPolygonItem(); + neatFill->setPolygon(p); + neatFill->setBrush(pat); + scene()->addItem(neatFill); + } + } + } /* next show where we have been bad and crossed the dc's ceiling */ if (prefs.profile_dc_ceiling) { pat.setColorAt(0, profile_color[CEILING_SHALLOW].first()); |