diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/prefs-macros.h | 7 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.cpp | 17 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.h | 4 | ||||
-rw-r--r-- | core/units.h | 25 |
4 files changed, 44 insertions, 9 deletions
diff --git a/core/prefs-macros.h b/core/prefs-macros.h index bd1fc9a33..9208fb82e 100644 --- a/core/prefs-macros.h +++ b/core/prefs-macros.h @@ -11,6 +11,13 @@ else \ prefs.units.field = default_prefs.units.field +#define GET_UNIT3(name, field, f, l, type) \ + v = s.value(QString(name)); \ + if (v.isValid() && v.toInt() >= (f) && v.toInt() <= (l)) \ + prefs.units.field = (type)v.toInt(); \ + else \ + prefs.units.field = default_prefs.units.field + #define GET_BOOL(name, field) \ v = s.value(QString(name)); \ if (v.isValid()) \ diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp index 2752567ae..25161a904 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.cpp +++ b/core/subsurface-qt/SettingsObjectWrapper.cpp @@ -1626,6 +1626,11 @@ int UnitsSettings::verticalSpeedTime() const return prefs.units.vertical_speed_time; } +int UnitsSettings::durationUnits() const +{ + return prefs.units.duration_units; +} + QString UnitsSettings::unitSystem() const { return prefs.unit_system == METRIC ? QStringLiteral("metric") @@ -1705,6 +1710,17 @@ void UnitsSettings::setVerticalSpeedTime(int value) emit verticalSpeedTimeChanged(value); } +void UnitsSettings::setDurationUnits(int value) +{ + if (value == prefs.units.duration_units) + return; + QSettings s; + s.beginGroup(group); + s.setValue("duration_units", value); + prefs.units.duration_units = (units::DURATION) value; + emit durationUnitChanged(value); +} + void UnitsSettings::setCoordinatesTraditional(bool value) { if (value == prefs.coordinates_traditional) @@ -2180,6 +2196,7 @@ void SettingsObjectWrapper::load() GET_UNIT("weight", weight, units::LBS, units::KG); } 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_BOOL("coordinates", coordinates_traditional); s.endGroup(); s.beginGroup("TecDetails"); diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h index bb0e9db62..7116e682e 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.h +++ b/core/subsurface-qt/SettingsObjectWrapper.h @@ -511,6 +511,7 @@ class UnitsSettings : public QObject { Q_PROPERTY(QString unit_system READ unitSystem WRITE setUnitSystem NOTIFY unitSystemChanged) 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 duration_units READ durationUnits WRITE setDurationUnits NOTIFY durationUnitChanged) public: UnitsSettings(QObject *parent = 0); @@ -520,6 +521,7 @@ public: int temperature() const; int weight() const; int verticalSpeedTime() const; + int durationUnits() const; QString unitSystem() const; bool coordinatesTraditional() const; @@ -530,6 +532,7 @@ public slots: void setTemperature(int value); void setWeight(int value); void setVerticalSpeedTime(int value); + void setDurationUnits(int value); void setUnitSystem(const QString& value); void setCoordinatesTraditional(bool value); @@ -542,6 +545,7 @@ signals: void verticalSpeedTimeChanged(int value); void unitSystemChanged(const QString& value); void coordinatesTraditionalChanged(bool value); + void durationUnitChanged(int value); private: const QString group = QStringLiteral("Units"); }; diff --git a/core/units.h b/core/units.h index c92c23d3a..7e4c2e7d2 100644 --- a/core/units.h +++ b/core/units.h @@ -255,6 +255,11 @@ struct units { SECONDS, MINUTES } vertical_speed_time; + enum DURATION { + MIXED, + MINUTES_ONLY, + ALWAYS_HOURS + } duration_units; }; /* @@ -264,15 +269,17 @@ struct units { * actually use. Similarly, C instead of Kelvin. * And kg instead of g. */ -#define SI_UNITS \ - { \ - .length = METERS, .volume = LITER, .pressure = BAR, .temperature = CELSIUS, .weight = KG, .vertical_speed_time = MINUTES \ - } - -#define IMPERIAL_UNITS \ - { \ - .length = FEET, .volume = CUFT, .pressure = PSI, .temperature = FAHRENHEIT, .weight = LBS, .vertical_speed_time = MINUTES \ - } +#define SI_UNITS \ + { \ + .length = METERS, .volume = LITER, .pressure = BAR, .temperature = CELSIUS, .weight = KG, \ + .vertical_speed_time = MINUTES, .duration_units = MIXED \ + } + +#define IMPERIAL_UNITS \ + { \ + .length = FEET, .volume = CUFT, .pressure = PSI, .temperature = FAHRENHEIT, .weight = LBS, \ + .vertical_speed_time = MINUTES, .duration_units = MIXED \ + } #ifdef __cplusplus } |