From a0ebb1938054c31f89148a40d4080aef16bb6e56 Mon Sep 17 00:00:00 2001 From: "Robert C. Helling" Date: Thu, 1 Jan 2015 17:00:46 +0100 Subject: [PATCH 3/7] Maintab combobox to set dive type still needs some work Signed-off-by: Robert C. Helling --- dive.c | 22 +++++++++++++++++++++- dive.h | 3 ++- pref.h | 1 + qt-ui/maintab.cpp | 23 +++++++++++++++++++++++ qt-ui/maintab.h | 1 + qt-ui/maintab.ui | 35 ++++++++++++++++++++++------------- qt-ui/preferences.cpp | 1 + subsurfacestartup.c | 1 + 8 files changed, 72 insertions(+), 15 deletions(-) diff --git a/dive.c b/dive.c index 17b67a5..680ceeb 100644 --- a/dive.c +++ b/dive.c @@ -29,7 +29,7 @@ static const char *default_tags[] = { const char *cylinderuse_text[] = { QT_TRANSLATE_NOOP("gettextFromC", "OC-gas"), QT_TRANSLATE_NOOP("gettextFromC", "diluent"), QT_TRANSLATE_NOOP("gettextFromC", "oxygen") }; -const char *dctype_text[] = { "OC", "CCR", "PSCR" }; +const char *dctype_text[] = { "OC", "CCR", "PSCR", "Freedive" }; int event_is_gaschange(struct event *ev) { @@ -872,6 +872,26 @@ int explicit_first_cylinder(struct dive *dive, struct divecomputer *dc) return 0; } +void update_setpoint_events(struct divecomputer *dc) +{ + struct event *ev = get_next_event(dc->events, "SP change"); + bool changed = false; + int new_setpoint = 0; + + if (dc->dctype == CCR) + new_setpoint = prefs.defaultsetpoint; + + while (ev) { + if (ev->time.seconds == 0) { + ev->value = new_setpoint; + changed = true; + } + ev = get_next_event(ev->next, "SP change"); + } + if (!changed) + add_event(dc, 0, SAMPLE_EVENT_PO2, 0, new_setpoint, "SP change"); +} + void sanitize_gasmix(struct gasmix *mix) { unsigned int o2, he; diff --git a/dive.h b/dive.h index d99f900..bcae405 100644 --- a/dive.h +++ b/dive.h @@ -47,7 +47,7 @@ extern "C" { #include #endif -enum dive_comp_type {OC, CCR, PSCR, NUM_DC_TYPE}; // Flags (Open-circuit and Closed-circuit-rebreather) for setting dive computer type +enum dive_comp_type {OC, CCR, PSCR, FREEDIVE, NUM_DC_TYPE}; // Flags (Open-circuit and Closed-circuit-rebreather) for setting dive computer type enum cylinderuse {OC_GAS, DILUENT, OXYGEN, NUM_GAS_USE}; // The different uses for cylinders extern const char *cylinderuse_text[]; @@ -850,6 +850,7 @@ extern void set_save_userid_local(short value); extern void set_userid(char *user_id); extern const char *get_dive_date_c_string(timestamp_t when); +extern void update_setpoint_events(struct divecomputer *dc); #ifdef __cplusplus } #endif diff --git a/pref.h b/pref.h index 49e1afa..8a8802c 100644 --- a/pref.h +++ b/pref.h @@ -76,6 +76,7 @@ struct preferences { int decosac; int o2consumption; // ml per min int pscr_ratio; // dump ratio times 1000 + int defaultsetpoint; // default setpoint in mbar bool show_pictures_in_profile; bool use_default_file; facebook_prefs_t facebook; diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index e6e530d..1a25f19 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -86,6 +86,7 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), ui.dateEdit->installEventFilter(this); ui.timeEdit->installEventFilter(this); ui.tagWidget->installEventFilter(this); + ui.DiveType->installEventFilter(this); Q_FOREACH (QObject *obj, ui.statisticsTab->children()) { QLabel *label = qobject_cast(obj); @@ -100,6 +101,10 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), ui.weights->setBtnToolTip(tr("Add weight system")); connect(ui.weights, SIGNAL(addButtonClicked()), this, SLOT(addWeight_clicked())); + // This needs to be the same order as enum dive_comp_type in dive.h! + ui.DiveType->insertItems(0, QStringList() << "OC" << "CCR" << "pSCR" << "Freedive"); + connect(ui.DiveType, SIGNAL(currentIndexChanged(int)), this, SLOT(on_divetype_Changed(int))); + connect(ui.cylinders->view(), SIGNAL(clicked(QModelIndex)), this, SLOT(editCylinderWidget(QModelIndex))); connect(ui.weights->view(), SIGNAL(clicked(QModelIndex)), this, SLOT(editWeightWidget(QModelIndex))); @@ -425,6 +430,7 @@ void MainTab::updateDiveInfo(bool clear) UPDATE_TEXT(displayed_dive, buddy); UPDATE_TEMP(displayed_dive, airtemp); UPDATE_TEMP(displayed_dive, watertemp); + ui.DiveType->setCurrentIndex(displayed_dive.dc.dctype); if (!clear) { updateGpsCoordinates(&displayed_dive); @@ -454,6 +460,8 @@ void MainTab::updateDiveInfo(bool clear) ui.TagLabel->setVisible(false); ui.airTempLabel->setVisible(false); ui.airtemp->setVisible(false); + ui.DiveType->setVisible(false); + ui.TypeLabel->setVisible(false); ui.waterTempLabel->setVisible(false); ui.watertemp->setVisible(false); // rename the remaining fields and fill data from selected trip @@ -483,6 +491,8 @@ void MainTab::updateDiveInfo(bool clear) ui.tagWidget->setVisible(true); ui.airTempLabel->setVisible(true); ui.airtemp->setVisible(true); + ui.TypeLabel->setVisible(true); + ui.DiveType->setVisible(true); ui.waterTempLabel->setVisible(true); ui.watertemp->setVisible(true); /* and fill them from the dive */ @@ -504,6 +514,7 @@ void MainTab::updateDiveInfo(bool clear) ui.otuText->setText(QString("%1").arg(displayed_dive.otu)); ui.waterTemperatureText->setText(get_temperature_string(displayed_dive.watertemp, true)); ui.airTemperatureText->setText(get_temperature_string(displayed_dive.airtemp, true)); + ui.DiveType->setCurrentIndex(current_dc->dctype); volume_t gases[MAX_CYLINDERS] = {}; get_gas_used(&displayed_dive, gases); QString volumes; @@ -761,6 +772,8 @@ void MainTab::acceptChanges() MODIFY_SELECTED_DIVES(EDIT_VALUE(visibility)); if (displayed_dive.airtemp.mkelvin != cd->airtemp.mkelvin) MODIFY_SELECTED_DIVES(EDIT_VALUE(airtemp.mkelvin)); + if (displayed_dive.dc.dctype != cd->dc.dctype) + MODIFY_SELECTED_DIVES(EDIT_VALUE(dc.dctype)); if (displayed_dive.watertemp.mkelvin != cd->watertemp.mkelvin) MODIFY_SELECTED_DIVES(EDIT_VALUE(watertemp.mkelvin)); if (displayed_dive.when != cd->when) { @@ -887,6 +900,7 @@ void MainTab::resetPallete() ui.divemaster->setPalette(p); ui.suit->setPalette(p); ui.airtemp->setPalette(p); + ui.DiveType->setPalette(p); ui.watertemp->setPalette(p); ui.dateEdit->setPalette(p); ui.timeEdit->setPalette(p); @@ -998,6 +1012,15 @@ void MainTab::on_airtemp_textChanged(const QString &text) validate_temp_field(ui.airtemp, text); } +void MainTab::on_divetype_Changed(const int &index) +{ + if (editMode == IGNORE) + return; + displayed_dive.dc.dctype = (enum dive_comp_type) index; + update_setpoint_events(&displayed_dive.dc); + markChangedWidget(ui.DiveType); +} + void MainTab::on_watertemp_textChanged(const QString &text) { if (editMode == IGNORE || acceptingEdit == true) diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 668ed02..8b98119 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -71,6 +71,7 @@ slots: void on_suit_textChanged(const QString &text); void on_notes_textChanged(); void on_airtemp_textChanged(const QString &text); + void on_divetype_Changed(const int &index); void on_watertemp_textChanged(const QString &text); void validate_temp_field(QLineEdit *tempField, const QString &text); void on_dateEdit_dateChanged(const QDate &date); diff --git a/qt-ui/maintab.ui b/qt-ui/maintab.ui index ac0f1a7..226442f 100644 --- a/qt-ui/maintab.ui +++ b/qt-ui/maintab.ui @@ -175,28 +175,28 @@ 0 - + 0 0 - - Rating + + Qt::StrongFocus - + 0 0 - - Visibility + + Qt::StrongFocus @@ -236,28 +236,28 @@ 0 - + 0 0 - - Qt::StrongFocus + + Rating - + 0 0 - - Qt::StrongFocus + + Visibility @@ -301,6 +301,16 @@ false + + + + + 0 + 0 + + + + @@ -1019,7 +1029,6 @@ airtemp watertemp location - coordinates divemaster buddy rating diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index 80bd3e4..32237ae 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -367,6 +367,7 @@ void PreferencesDialog::loadSettings() GET_BOOL("show_sac", show_sac); GET_BOOL("display_unused_tanks", display_unused_tanks); GET_BOOL("show_average_depth", show_average_depth); + GET_INT("default_setpoint", defaultsetpoint); s.endGroup(); s.beginGroup("GeneralSettings"); diff --git a/subsurfacestartup.c b/subsurfacestartup.c index 1e3a2c1..c673813 100644 --- a/subsurfacestartup.c +++ b/subsurfacestartup.c @@ -55,6 +55,7 @@ struct preferences default_prefs = { .album_id = NULL, .access_token = NULL } + .defaultsetpoint = 1100 }; int run_survey; -- 1.9.3 (Apple Git-50)