aboutsummaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tab-widgets/TabDiveInformation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/tab-widgets/TabDiveInformation.cpp')
-rw-r--r--desktop-widgets/tab-widgets/TabDiveInformation.cpp93
1 files changed, 80 insertions, 13 deletions
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
index 928627311..641e762f2 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
@@ -1,6 +1,8 @@
// SPDX-License-Identifier: GPL-2.0
#include "TabDiveInformation.h"
#include "ui_TabDiveInformation.h"
+#include "desktop-widgets/mainwindow.h" // TODO: Only used temporarilly for edit mode changes
+#include "profile-widget/profilewidget2.h"
#include "../tagwidget.h"
#include "core/units.h"
#include "core/dive.h"
@@ -12,6 +14,7 @@
#define COMBO_CHANGED 0
#define TEXT_EDITED 1
+#define CSS_SET_HEADING_BLUE "QLabel { color: mediumblue;} "
TabDiveInformation::TabDiveInformation(QWidget *parent) : TabBase(parent), ui(new Ui::TabDiveInformation())
{
@@ -20,6 +23,28 @@ TabDiveInformation::TabDiveInformation(QWidget *parent) : TabBase(parent), ui(ne
QStringList atmPressTypes { "mbar", get_depth_unit() ,"use dc"};
ui->atmPressType->insertItems(0, atmPressTypes);
pressTypeIndex = 0;
+ // This needs to be the same order as enum dive_comp_type in dive.h!
+ QStringList types;
+ for (int i = 0; i < NUM_DIVEMODE; i++)
+ types.append(gettextFromC::tr(divemode_text_ui[i]));
+ ui->diveType->insertItems(0, types);
+ connect(ui->diveType, SIGNAL(currentIndexChanged(int)), this, SLOT(diveModeChanged(int)));
+ QString CSSSetSmallLabel = "QLabel { color: mediumblue; font-size: " + /* // Using label height ... */
+ QString::number((int)(0.5 + ui->diveHeadingLabel->geometry().height() * 0.66)) + "px;}"; // .. set CSS font size of star widget subscripts
+ ui->scrollAreaWidgetContents_3->setStyleSheet("QGroupBox::title { color: mediumblue;} ");
+ ui->diveModeBox->setStyleSheet("QGroupBox{ padding: 0;} ");
+ ui->diveHeadingLabel->setStyleSheet(CSS_SET_HEADING_BLUE);
+ ui->gasHeadingLabel->setStyleSheet(CSS_SET_HEADING_BLUE);
+ ui->environmentHeadingLabel->setStyleSheet(CSS_SET_HEADING_BLUE);
+ ui->groupBox_visibility->setStyleSheet(CSSSetSmallLabel);
+ QAction *action = new QAction(tr("OK"), this);
+ connect(action, &QAction::triggered, this, &TabDiveInformation::closeWarning);
+ ui->multiDiveWarningMessage->addAction(action);
+ action = new QAction(tr("Undo"), this);
+ connect(action, &QAction::triggered, Command::undoAction(this), &QAction::trigger);
+ connect(action, &QAction::triggered, this, &TabDiveInformation::closeWarning);
+ ui->multiDiveWarningMessage->addAction(action);
+ ui->multiDiveWarningMessage->hide();
}
TabDiveInformation::~TabDiveInformation()
@@ -34,7 +59,6 @@ void TabDiveInformation::clear()
ui->maxcnsText->clear();
ui->oxygenHeliumText->clear();
ui->gasUsedText->clear();
- ui->dateText->clear();
ui->diveTimeText->clear();
ui->surfaceIntervalText->clear();
ui->maximumDepthText->clear();
@@ -43,6 +67,22 @@ void TabDiveInformation::clear()
ui->airTemperatureText->clear();
ui->atmPressVal->clear();
ui->salinityText->clear();
+ ui->waterTypeText->clear();
+}
+
+void TabDiveInformation::divesEdited(int i)
+{
+ // No warning if only one dive was edited
+ if (i <= 1)
+ return;
+ ui->multiDiveWarningMessage->setCloseButtonVisible(false);
+ ui->multiDiveWarningMessage->setText(tr("Warning: edited %1 dives").arg(i));
+ ui->multiDiveWarningMessage->show();
+}
+
+void TabDiveInformation::closeWarning()
+{
+ ui->multiDiveWarningMessage->hide();
}
// Update fields that depend on the dive profile
@@ -87,7 +127,6 @@ void TabDiveInformation::updateProfile()
if (current_dive->surface_pressure.mbar == 0) {
ui->atmPressVal->clear(); // If no atm pressure for dive then clear text box
} else {
-
ui->atmPressVal->setEnabled(true);
QString pressStr;
pressStr.sprintf("%d",current_dive->surface_pressure.mbar);
@@ -98,7 +137,6 @@ void TabDiveInformation::updateProfile()
// Update fields that depend on start of dive
void TabDiveInformation::updateWhen()
{
- ui->dateText->setText(get_short_dive_date_string(current_dive->when));
timestamp_t surface_interval = get_surface_interval(current_dive->when);
if (surface_interval >= 0)
ui->surfaceIntervalText->setText(get_dive_surfint_string(surface_interval, tr("d"), tr("h"), tr("min")));
@@ -108,10 +146,19 @@ void TabDiveInformation::updateWhen()
void TabDiveInformation::updateSalinity()
{
- if (current_dive->salinity)
+ if (current_dive->salinity) { // Set up the salinity string:
ui->salinityText->setText(QString("%1g/ℓ").arg(current_dive->salinity / 10.0));
- else
+ if (current_dive->salinity < 10050) // Set water type indicator:
+ ui->waterTypeText->setText(tr("Fresh"));
+ else if (current_dive->salinity < 10190)
+ ui->waterTypeText->setText(tr("Salty"));
+ else if (current_dive->salinity < 10210) // (EN13319 = 1.019 - 1.021 g/l)
+ ui->waterTypeText->setText(tr("EN13319"));
+ else ui->waterTypeText->setText(tr("Salt"));
+ } else {
ui->salinityText->clear();
+ ui->waterTypeText->clear();
+ }
}
void TabDiveInformation::updateData()
@@ -125,12 +172,11 @@ void TabDiveInformation::updateData()
updateWhen();
ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true));
ui->airTemperatureText->setText(get_temperature_string(current_dive->airtemp, true));
- updateSalinity();
-
- ui->atmPressType->setEditable(true);
ui->atmPressType->setItemText(1, get_depth_unit()); // Check for changes in depth unit (imperial/metric)
- ui->atmPressType->setEditable(false);
- ui->atmPressType->setCurrentIndex(0); // Set the atmospheric pressure combo box to mbar
+ ui->atmPressType->setCurrentIndex(0); // Set the atmospheric pressure combo box to mbar
+ updateMode(current_dive);
+ updateSalinity();
+ ui->visibility->setCurrentStars(current_dive->visibility);
}
// This function gets called if a field gets updated by an undo command.
@@ -141,6 +187,10 @@ void TabDiveInformation::divesChanged(const QVector<dive *> &dives, DiveField fi
if (!current_dive || !dives.contains(current_dive))
return;
+ if (field.visibility)
+ ui->visibility->setCurrentStars(current_dive->visibility);
+ if (field.mode)
+ updateMode(current_dive);
if (field.duration || field.depth || field.mode)
updateProfile();
if (field.air_temp)
@@ -149,12 +199,29 @@ void TabDiveInformation::divesChanged(const QVector<dive *> &dives, DiveField fi
ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true));
if (field.atm_press)
ui->atmPressVal->setText(ui->atmPressVal->text().sprintf("%d",current_dive->surface_pressure.mbar));
- if (field.datetime)
- updateWhen();
if (field.salinity)
updateSalinity();
}
+
+void TabDiveInformation::on_visibility_valueChanged(int value)
+{
+ if (current_dive)
+ divesEdited(Command::editVisibility(value, false));
+}
+
+void TabDiveInformation::updateMode(struct dive *d)
+{
+ ui->diveType->setCurrentIndex(get_dive_dc(d, dc_number)->divemode);
+ MainWindow::instance()->graphics->replot();
+}
+
+void TabDiveInformation::diveModeChanged(int index)
+{
+ if (current_dive)
+ divesEdited(Command::editMode(dc_number, (enum divemode_t)index, false));
+}
+
void TabDiveInformation::on_atmPressType_currentIndexChanged(int index) { updateTextBox(COMBO_CHANGED); }
void TabDiveInformation::on_atmPressVal_editingFinished() { updateTextBox(TEXT_EDITED); }
@@ -193,7 +260,7 @@ void TabDiveInformation::updateTextBox(int event) // Either the text box has bee
break;
}
if (atmpress.mbar)
- Command::editAtmPress(atmpress.mbar, false); // and save the pressure for undo
+ divesEdited(Command::editAtmPress(atmpress.mbar, false)); // and save the pressure for undo
}
}