Display units in dive list table based on prefs option

Add a preferences option which enables or disables display of units in the
main dive liste table.

Signed-off-by: Stefan Fuchs <sfuchs@gmx.de>
This commit is contained in:
Stefan Fuchs 2017-10-09 08:46:18 +02:00 committed by Lubomir I. Ivanov
parent 2cb5d45231
commit 78cda85444
8 changed files with 94 additions and 16 deletions

View file

@ -18,6 +18,13 @@
else \ else \
prefs.units.field = default_prefs.units.field prefs.units.field = default_prefs.units.field
#define GET_UNIT_INT(name, field) \
v = s.value(QString(name)); \
if (v.isValid()) \
prefs.units.field = v.toInt(); \
else \
prefs.units.field = default_prefs.units.field
#define GET_BOOL(name, field) \ #define GET_BOOL(name, field) \
v = s.value(QString(name)); \ v = s.value(QString(name)); \
if (v.isValid()) \ if (v.isValid()) \

View file

@ -1631,6 +1631,11 @@ int UnitsSettings::durationUnits() const
return prefs.units.duration_units; return prefs.units.duration_units;
} }
int UnitsSettings::showUnitsTable() const
{
return prefs.units.show_units_table;
}
QString UnitsSettings::unitSystem() const QString UnitsSettings::unitSystem() const
{ {
return prefs.unit_system == METRIC ? QStringLiteral("metric") return prefs.unit_system == METRIC ? QStringLiteral("metric")
@ -1721,6 +1726,17 @@ void UnitsSettings::setDurationUnits(int value)
emit durationUnitChanged(value); emit durationUnitChanged(value);
} }
void UnitsSettings::setShowUnitsTable(int value)
{
if (value == prefs.units.show_units_table)
return;
QSettings s;
s.beginGroup(group);
s.setValue("show_units_table", value);
prefs.units.show_units_table = value;
emit showUnitsTableChanged(value);
}
void UnitsSettings::setCoordinatesTraditional(bool value) void UnitsSettings::setCoordinatesTraditional(bool value)
{ {
if (value == prefs.coordinates_traditional) if (value == prefs.coordinates_traditional)
@ -2197,6 +2213,7 @@ void SettingsObjectWrapper::load()
} }
GET_UNIT("vertical_speed_time", vertical_speed_time, units::MINUTES, units::SECONDS); GET_UNIT("vertical_speed_time", vertical_speed_time, units::MINUTES, units::SECONDS);
GET_UNIT3("duration_units", duration_units, units::MIXED, units::ALWAYS_HOURS, units::DURATION); GET_UNIT3("duration_units", duration_units, units::MIXED, units::ALWAYS_HOURS, units::DURATION);
GET_UNIT_INT("show_units_table", show_units_table);
GET_BOOL("coordinates", coordinates_traditional); GET_BOOL("coordinates", coordinates_traditional);
s.endGroup(); s.endGroup();
s.beginGroup("TecDetails"); s.beginGroup("TecDetails");

View file

@ -513,6 +513,7 @@ class UnitsSettings : public QObject {
Q_PROPERTY(bool coordinates_traditional READ coordinatesTraditional WRITE setCoordinatesTraditional NOTIFY coordinatesTraditionalChanged) Q_PROPERTY(bool coordinates_traditional READ coordinatesTraditional WRITE setCoordinatesTraditional NOTIFY coordinatesTraditionalChanged)
Q_PROPERTY(int vertical_speed_time READ verticalSpeedTime WRITE setVerticalSpeedTime NOTIFY verticalSpeedTimeChanged) Q_PROPERTY(int vertical_speed_time READ verticalSpeedTime WRITE setVerticalSpeedTime NOTIFY verticalSpeedTimeChanged)
Q_PROPERTY(int duration_units READ durationUnits WRITE setDurationUnits NOTIFY durationUnitChanged) Q_PROPERTY(int duration_units READ durationUnits WRITE setDurationUnits NOTIFY durationUnitChanged)
Q_PROPERTY(int show_units_table READ showUnitsTable WRITE setShowUnitsTable NOTIFY showUnitsTableChanged)
public: public:
UnitsSettings(QObject *parent = 0); UnitsSettings(QObject *parent = 0);
@ -523,6 +524,7 @@ public:
int weight() const; int weight() const;
int verticalSpeedTime() const; int verticalSpeedTime() const;
int durationUnits() const; int durationUnits() const;
int showUnitsTable() const;
QString unitSystem() const; QString unitSystem() const;
bool coordinatesTraditional() const; bool coordinatesTraditional() const;
@ -534,6 +536,7 @@ public slots:
void setWeight(int value); void setWeight(int value);
void setVerticalSpeedTime(int value); void setVerticalSpeedTime(int value);
void setDurationUnits(int value); void setDurationUnits(int value);
void setShowUnitsTable(int value);
void setUnitSystem(const QString& value); void setUnitSystem(const QString& value);
void setCoordinatesTraditional(bool value); void setCoordinatesTraditional(bool value);
@ -547,6 +550,7 @@ signals:
void unitSystemChanged(const QString& value); void unitSystemChanged(const QString& value);
void coordinatesTraditionalChanged(bool value); void coordinatesTraditionalChanged(bool value);
void durationUnitChanged(int value); void durationUnitChanged(int value);
void showUnitsTableChanged(int value);
private: private:
const QString group = QStringLiteral("Units"); const QString group = QStringLiteral("Units");
}; };

View file

@ -260,6 +260,7 @@ struct units {
MINUTES_ONLY, MINUTES_ONLY,
ALWAYS_HOURS ALWAYS_HOURS
} duration_units; } duration_units;
int show_units_table;
}; };
/* /*
@ -272,13 +273,13 @@ struct units {
#define SI_UNITS \ #define SI_UNITS \
{ \ { \
.length = METERS, .volume = LITER, .pressure = BAR, .temperature = CELSIUS, .weight = KG, \ .length = METERS, .volume = LITER, .pressure = BAR, .temperature = CELSIUS, .weight = KG, \
.vertical_speed_time = MINUTES, .duration_units = MIXED \ .vertical_speed_time = MINUTES, .duration_units = MIXED, .show_units_table = false \
} }
#define IMPERIAL_UNITS \ #define IMPERIAL_UNITS \
{ \ { \
.length = FEET, .volume = CUFT, .pressure = PSI, .temperature = FAHRENHEIT, .weight = LBS, \ .length = FEET, .volume = CUFT, .pressure = PSI, .temperature = FAHRENHEIT, .weight = LBS, \
.vertical_speed_time = MINUTES, .duration_units = MIXED \ .vertical_speed_time = MINUTES, .duration_units = MIXED, .show_units_table = false \
} }
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -43,6 +43,7 @@ void PreferencesUnits::refreshSettings()
ui->duration_mixed->setChecked(prefs.units.duration_units == units::MIXED); ui->duration_mixed->setChecked(prefs.units.duration_units == units::MIXED);
ui->duration_no_hours->setChecked(prefs.units.duration_units == units::MINUTES_ONLY); ui->duration_no_hours->setChecked(prefs.units.duration_units == units::MINUTES_ONLY);
ui->duration_show_hours->setChecked(prefs.units.duration_units == units::ALWAYS_HOURS); ui->duration_show_hours->setChecked(prefs.units.duration_units == units::ALWAYS_HOURS);
ui->show_units_table->setChecked(prefs.units.show_units_table);
} }
void PreferencesUnits::syncSettings() void PreferencesUnits::syncSettings()
@ -60,4 +61,5 @@ void PreferencesUnits::syncSettings()
units->setVerticalSpeedTime(ui->vertical_speed_minutes->isChecked() ? units::MINUTES : units::SECONDS); units->setVerticalSpeedTime(ui->vertical_speed_minutes->isChecked() ? units::MINUTES : units::SECONDS);
units->setCoordinatesTraditional(ui->gpsTraditional->isChecked()); units->setCoordinatesTraditional(ui->gpsTraditional->isChecked());
units->setDurationUnits(ui->duration_mixed->isChecked() ? units::MIXED : (ui->duration_no_hours->isChecked() ? units::MINUTES_ONLY : units::ALWAYS_HOURS)); units->setDurationUnits(ui->duration_mixed->isChecked() ? units::MIXED : (ui->duration_no_hours->isChecked() ? units::MINUTES_ONLY : units::ALWAYS_HOURS));
units->setShowUnitsTable(ui->show_units_table->isChecked());
} }

View file

@ -269,7 +269,23 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="groupBox_11"> <widget class="QGroupBox" name="groupBox_divelist">
<property name="title">
<string>Dive list table</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="show_units_table">
<property name="text">
<string>Show units in dive list table</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_gps">
<property name="title"> <property name="title">
<string>GPS coordinates</string> <string>GPS coordinates</string>
</property> </property>

View file

@ -157,16 +157,16 @@ QVariant DiveItem::data(int column, int role) const
retVal = displayDate(); retVal = displayDate();
break; break;
case DEPTH: case DEPTH:
retVal = displayDepth(); retVal = prefs.units.show_units_table ? displayDepthWithUnit() : displayDepth();
break; break;
case DURATION: case DURATION:
retVal = displayDuration(); retVal = displayDuration();
break; break;
case TEMPERATURE: case TEMPERATURE:
retVal = displayTemperature(); retVal = prefs.units.show_units_table ? retVal = displayTemperatureWithUnit() : displayTemperature();
break; break;
case TOTALWEIGHT: case TOTALWEIGHT:
retVal = displayWeight(); retVal = prefs.units.show_units_table ? retVal = displayWeightWithUnit() : displayWeight();
break; break;
case SUIT: case SUIT:
retVal = QString(dive->suit); retVal = QString(dive->suit);
@ -175,13 +175,16 @@ QVariant DiveItem::data(int column, int role) const
retVal = QString(dive->cylinder[0].type.description); retVal = QString(dive->cylinder[0].type.description);
break; break;
case SAC: case SAC:
retVal = displaySac(); retVal = prefs.units.show_units_table ? retVal = displaySacWithUnit() : displaySac();
break; break;
case OTU: case OTU:
retVal = dive->otu; retVal = dive->otu;
break; break;
case MAXCNS: case MAXCNS:
retVal = dive->maxcns; if (prefs.units.show_units_table)
retVal = QString("%1%").arg(dive->maxcns);
else
retVal = dive->maxcns;
break; break;
case PHOTOS: case PHOTOS:
break; break;
@ -359,9 +362,10 @@ int DiveItem::countPhotos(dive *dive) const
QString DiveItem::displayDuration() const QString DiveItem::displayDuration() const
{ {
struct dive *dive = get_dive_by_uniq_id(diveId); struct dive *dive = get_dive_by_uniq_id(diveId);
return get_dive_duration_string(dive->duration.seconds, "", "", "", ":", dive->dc.divemode == FREEDIVE); if (prefs.units.show_units_table)
// Next line is test for alternative display with units return get_dive_duration_string(dive->duration.seconds, tr("h"), tr("min"), "", ":", dive->dc.divemode == FREEDIVE);
// return get_dive_duration_string(dive->duration.seconds, tr("h"), tr("min"), "", ":", dive->dc.divemode == FREEDIVE); else
return get_dive_duration_string(dive->duration.seconds, "", "", "", ":", dive->dc.divemode == FREEDIVE);
} }
QString DiveItem::displayTemperature() const QString DiveItem::displayTemperature() const
@ -370,11 +374,16 @@ QString DiveItem::displayTemperature() const
struct dive *dive = get_dive_by_uniq_id(diveId); struct dive *dive = get_dive_by_uniq_id(diveId);
if (!dive->watertemp.mkelvin) if (!dive->watertemp.mkelvin)
return str; return str;
if (get_units()->temperature == units::CELSIUS) return get_temperature_string(dive->watertemp, false);
str = QString::number(mkelvin_to_C(dive->watertemp.mkelvin), 'f', 1); }
else
str = QString::number(mkelvin_to_F(dive->watertemp.mkelvin), 'f', 1); QString DiveItem::displayTemperatureWithUnit() const
return str; {
QString str;
struct dive *dive = get_dive_by_uniq_id(diveId);
if (!dive->watertemp.mkelvin)
return str;
return get_temperature_string(dive->watertemp, true);
} }
QString DiveItem::displaySac() const QString DiveItem::displaySac() const
@ -390,12 +399,31 @@ QString DiveItem::displaySac() const
return QString(""); return QString("");
} }
QString DiveItem::displaySacWithUnit() const
{
QString str;
struct dive *dive = get_dive_by_uniq_id(diveId);
if (dive->sac) {
const char *unit;
int decimal;
double value = get_volume_units(dive->sac, &decimal, &unit);
return QString::number(value, 'f', decimal) + QString(unit).append(tr("/min"));
}
return QString("");
}
QString DiveItem::displayWeight() const QString DiveItem::displayWeight() const
{ {
QString str = weight_string(weight()); QString str = weight_string(weight());
return str; return str;
} }
QString DiveItem::displayWeightWithUnit() const
{
QString str = weight_string(weight()) + ((get_units()->weight == units::KG) ? tr("kg") : tr("lbs"));
return str;
}
int DiveItem::weight() const int DiveItem::weight() const
{ {
struct dive *dive = get_dive_by_uniq_id(diveId); struct dive *dive = get_dive_by_uniq_id(diveId);

View file

@ -38,8 +38,11 @@ public:
QString displayDepth() const; QString displayDepth() const;
QString displayDepthWithUnit() const; QString displayDepthWithUnit() const;
QString displayTemperature() const; QString displayTemperature() const;
QString displayTemperatureWithUnit() const;
QString displayWeight() const; QString displayWeight() const;
QString displayWeightWithUnit() const;
QString displaySac() const; QString displaySac() const;
QString displaySacWithUnit() const;
int countPhotos(dive *dive) const; int countPhotos(dive *dive) const;
int weight() const; int weight() const;
QString icon_names[4]; QString icon_names[4];