diff options
-rw-r--r-- | core/settings/qPref.cpp | 1 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.cpp | 210 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.h | 57 | ||||
-rw-r--r-- | desktop-widgets/preferences/preferences_units.cpp | 20 | ||||
-rw-r--r-- | subsurface-helper.cpp | 1 | ||||
-rw-r--r-- | tests/testpreferences.cpp | 72 |
6 files changed, 54 insertions, 307 deletions
diff --git a/core/settings/qPref.cpp b/core/settings/qPref.cpp index aae226d30..135cb6818 100644 --- a/core/settings/qPref.cpp +++ b/core/settings/qPref.cpp @@ -20,6 +20,7 @@ void qPref::loadSync(bool doSync) qPrefDiveComputer::instance()->loadSync(doSync); // qPrefFaceook does not use disk. qPrefProxy::instance()->loadSync(doSync); + qPrefUnits::instance()->loadSync(doSync); } const QString qPref::canonical_version() const diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp index 296414be3..7997852e6 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.cpp +++ b/core/subsurface-qt/SettingsObjectWrapper.cpp @@ -1138,191 +1138,6 @@ void DivePlannerSettings::setDecoMode(deco_mode value) emit decoModeChanged(value); } -UnitsSettings::UnitsSettings(QObject *parent) : - QObject(parent) -{ - -} - -int UnitsSettings::length() const -{ - return prefs.units.length; -} - -int UnitsSettings::pressure() const -{ - return prefs.units.pressure; -} - -int UnitsSettings::volume() const -{ - return prefs.units.volume; -} - -int UnitsSettings::temperature() const -{ - return prefs.units.temperature; -} - -int UnitsSettings::weight() const -{ - return prefs.units.weight; -} - -int UnitsSettings::verticalSpeedTime() const -{ - return prefs.units.vertical_speed_time; -} - -int UnitsSettings::durationUnits() const -{ - return prefs.units.duration_units; -} - -bool UnitsSettings::showUnitsTable() const -{ - return prefs.units.show_units_table; -} - -QString UnitsSettings::unitSystem() const -{ - return prefs.unit_system == METRIC ? QStringLiteral("metric") - : prefs.unit_system == IMPERIAL ? QStringLiteral("imperial") - : QStringLiteral("personalized"); -} - -bool UnitsSettings::coordinatesTraditional() const -{ - return prefs.coordinates_traditional; -} - -void UnitsSettings::setLength(int value) -{ - if (value == prefs.units.length) - return; - - QSettings s; - s.beginGroup(group); - s.setValue("length", value); - prefs.units.length = (units::LENGTH) value; - emit lengthChanged(value); -} - -void UnitsSettings::setPressure(int value) -{ - if (value == prefs.units.pressure) - return; - QSettings s; - s.beginGroup(group); - s.setValue("pressure", value); - prefs.units.pressure = (units::PRESSURE) value; - emit pressureChanged(value); -} - -void UnitsSettings::setVolume(int value) -{ - if (value == prefs.units.volume) - return; - QSettings s; - s.beginGroup(group); - s.setValue("volume", value); - prefs.units.volume = (units::VOLUME) value; - emit volumeChanged(value); -} - -void UnitsSettings::setTemperature(int value) -{ - if (value == prefs.units.temperature) - return; - QSettings s; - s.beginGroup(group); - s.setValue("temperature", value); - prefs.units.temperature = (units::TEMPERATURE) value; - emit temperatureChanged(value); -} - -void UnitsSettings::setWeight(int value) -{ - if (value == prefs.units.weight) - return; - QSettings s; - s.beginGroup(group); - s.setValue("weight", value); - prefs.units.weight = (units::WEIGHT) value; - emit weightChanged(value); -} - -void UnitsSettings::setVerticalSpeedTime(int value) -{ - if (value == prefs.units.vertical_speed_time) - return; - QSettings s; - s.beginGroup(group); - s.setValue("vertical_speed_time", value); - prefs.units.vertical_speed_time = (units::TIME) 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::setShowUnitsTable(bool 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) -{ - if (value == prefs.coordinates_traditional) - return; - QSettings s; - s.beginGroup(group); - s.setValue("coordinates", value); - prefs.coordinates_traditional = value; - emit coordinatesTraditionalChanged(value); -} - -void UnitsSettings::setUnitSystem(const QString& value) -{ - short int v = value == QStringLiteral("metric") ? METRIC - : value == QStringLiteral("imperial")? IMPERIAL - : PERSONALIZE; - - if (v == prefs.unit_system) - return; - - QSettings s; - s.beginGroup(group); - s.setValue("unit_system", value); - - if (value == QStringLiteral("metric")) { - prefs.unit_system = METRIC; - prefs.units = SI_units; - } else if (value == QStringLiteral("imperial")) { - prefs.unit_system = IMPERIAL; - prefs.units = IMPERIAL_units; - } else { - prefs.unit_system = PERSONALIZE; - } - - emit unitSystemChanged(value); - // TODO: emit the other values here? -} - GeneralSettingsObjectWrapper::GeneralSettingsObjectWrapper(QObject *parent) : QObject(parent) { @@ -1714,7 +1529,7 @@ QObject(parent), proxy(new qPrefProxy(this)), cloud_storage(new qPrefCloudStorage(this)), planner_settings(new DivePlannerSettings(this)), - unit_settings(new UnitsSettings(this)), + unit_settings(new qPrefUnits(this)), general_settings(new GeneralSettingsObjectWrapper(this)), display_settings(new qPrefDisplay(this)), language_settings(new LanguageSettingsObjectWrapper(this)), @@ -1731,26 +1546,9 @@ void SettingsObjectWrapper::load() QVariant v; uiLanguage(NULL); - s.beginGroup("Units"); - if (s.value("unit_system").toString() == "metric") { - prefs.unit_system = METRIC; - prefs.units = SI_units; - } else if (s.value("unit_system").toString() == "imperial") { - prefs.unit_system = IMPERIAL; - prefs.units = IMPERIAL_units; - } else { - prefs.unit_system = PERSONALIZE; - GET_UNIT("length", length, units::FEET, units::METERS); - GET_UNIT("pressure", pressure, units::PSI, units::BAR); - GET_UNIT("volume", volume, units::CUFT, units::LITER); - GET_UNIT("temperature", temperature, units::FAHRENHEIT, units::CELSIUS); - 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_UNIT_BOOL("show_units_table", show_units_table); - GET_BOOL("coordinates", coordinates_traditional); - s.endGroup(); + + qPrefUnits::instance()->load(); + s.beginGroup("TecDetails"); GET_BOOL("po2graph", pp_graphs.po2); GET_BOOL("pn2graph", pp_graphs.pn2); diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h index 5afcfccc4..9099b0ceb 100644 --- a/core/subsurface-qt/SettingsObjectWrapper.h +++ b/core/subsurface-qt/SettingsObjectWrapper.h @@ -343,59 +343,6 @@ private: const QString group = QStringLiteral("Planner"); }; -class UnitsSettings : public QObject { - Q_OBJECT - Q_PROPERTY(int length READ length WRITE setLength NOTIFY lengthChanged) - Q_PROPERTY(int pressure READ pressure WRITE setPressure NOTIFY pressureChanged) - Q_PROPERTY(int volume READ volume WRITE setVolume NOTIFY volumeChanged) - Q_PROPERTY(int temperature READ temperature WRITE setTemperature NOTIFY temperatureChanged) - Q_PROPERTY(int weight READ weight WRITE setWeight NOTIFY weightChanged) - 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) - Q_PROPERTY(bool show_units_table READ showUnitsTable WRITE setShowUnitsTable NOTIFY showUnitsTableChanged) - -public: - UnitsSettings(QObject *parent = 0); - int length() const; - int pressure() const; - int volume() const; - int temperature() const; - int weight() const; - int verticalSpeedTime() const; - int durationUnits() const; - bool showUnitsTable() const; - QString unitSystem() const; - bool coordinatesTraditional() const; - -public slots: - void setLength(int value); - void setPressure(int value); - void setVolume(int value); - void setTemperature(int value); - void setWeight(int value); - void setVerticalSpeedTime(int value); - void setDurationUnits(int value); - void setShowUnitsTable(bool value); - void setUnitSystem(const QString& value); - void setCoordinatesTraditional(bool value); - -signals: - void lengthChanged(int value); - void pressureChanged(int value); - void volumeChanged(int value); - void temperatureChanged(int value); - void weightChanged(int value); - void verticalSpeedTimeChanged(int value); - void unitSystemChanged(const QString& value); - void coordinatesTraditionalChanged(bool value); - void durationUnitChanged(int value); - void showUnitsTableChanged(bool value); -private: - const QString group = QStringLiteral("Units"); -}; - class GeneralSettingsObjectWrapper : public QObject { Q_OBJECT Q_PROPERTY(QString default_filename READ defaultFilename WRITE setDefaultFilename NOTIFY defaultFilenameChanged) @@ -526,7 +473,7 @@ class SettingsObjectWrapper : public QObject { Q_PROPERTY(qPrefProxy* proxy MEMBER proxy CONSTANT) Q_PROPERTY(qPrefCloudStorage* cloud_storage MEMBER cloud_storage CONSTANT) Q_PROPERTY(DivePlannerSettings* planner MEMBER planner_settings CONSTANT) - Q_PROPERTY(UnitsSettings* units MEMBER unit_settings CONSTANT) + Q_PROPERTY(qPrefUnits* units MEMBER unit_settings CONSTANT) Q_PROPERTY(GeneralSettingsObjectWrapper* general MEMBER general_settings CONSTANT) Q_PROPERTY(qPrefDisplay* display MEMBER display_settings CONSTANT) @@ -546,7 +493,7 @@ public: qPrefProxy *proxy; qPrefCloudStorage *cloud_storage; DivePlannerSettings *planner_settings; - UnitsSettings *unit_settings; + qPrefUnits *unit_settings; GeneralSettingsObjectWrapper *general_settings; qPrefDisplay *display_settings; LanguageSettingsObjectWrapper *language_settings; diff --git a/desktop-widgets/preferences/preferences_units.cpp b/desktop-widgets/preferences/preferences_units.cpp index 1dc006fc8..7985ffb0c 100644 --- a/desktop-widgets/preferences/preferences_units.cpp +++ b/desktop-widgets/preferences/preferences_units.cpp @@ -51,14 +51,14 @@ void PreferencesUnits::syncSettings() QString unitSystem[] = {"metric", "imperial", "personal"}; short unitValue = ui->metric->isChecked() ? METRIC : (ui->imperial->isChecked() ? IMPERIAL : PERSONALIZE); - units->setUnitSystem(unitSystem[unitValue]); - units->setTemperature(ui->fahrenheit->isChecked() ? units::FAHRENHEIT : units::CELSIUS); - units->setLength(ui->feet->isChecked() ? units::FEET : units::METERS); - units->setPressure(ui->psi->isChecked() ? units::PSI : units::BAR); - units->setVolume(ui->cuft->isChecked() ? units::CUFT : units::LITER); - units->setWeight(ui->lbs->isChecked() ? units::LBS : units::KG); - units->setVerticalSpeedTime(ui->vertical_speed_minutes->isChecked() ? units::MINUTES : units::SECONDS); - 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->setShowUnitsTable(ui->show_units_table->isChecked()); + units->set_unit_system(unitSystem[unitValue]); + units->set_temperature(ui->fahrenheit->isChecked() ? units::FAHRENHEIT : units::CELSIUS); + units->set_length(ui->feet->isChecked() ? units::FEET : units::METERS); + units->set_pressure(ui->psi->isChecked() ? units::PSI : units::BAR); + units->set_volume(ui->cuft->isChecked() ? units::CUFT : units::LITER); + units->set_weight(ui->lbs->isChecked() ? units::LBS : units::KG); + units->set_vertical_speed_time(ui->vertical_speed_minutes->isChecked() ? units::MINUTES : units::SECONDS); + units->set_coordinates_traditional(ui->gpsTraditional->isChecked()); + units->set_duration_units(ui->duration_mixed->isChecked() ? units::MIXED : (ui->duration_no_hours->isChecked() ? units::MINUTES_ONLY : units::ALWAYS_HOURS)); + units->set_show_units_table(ui->show_units_table->isChecked()); } diff --git a/subsurface-helper.cpp b/subsurface-helper.cpp index 20dd47ec7..e59cab046 100644 --- a/subsurface-helper.cpp +++ b/subsurface-helper.cpp @@ -162,6 +162,7 @@ void register_qml_types() REGISTER_TYPE(qPrefDiveComputer, "SsrfDiveComputerPrefs"); REGISTER_TYPE(qPrefFacebook, "SsrfFacebookPrefs"); REGISTER_TYPE(qPrefProxy, "SsrfProxyPrefs"); + REGISTER_TYPE(qPrefUnits, "SsrfUnitPrefs"); #ifndef SUBSURFACE_TEST_DATA #ifdef SUBSURFACE_MOBILE diff --git a/tests/testpreferences.cpp b/tests/testpreferences.cpp index 185d52a9b..fa3c08e23 100644 --- a/tests/testpreferences.cpp +++ b/tests/testpreferences.cpp @@ -278,42 +278,42 @@ void TestPreferences::testPreferences() TEST(planner->decoMode(), RECREATIONAL); - auto units = pref->unit_settings; - units->setLength(0); - units->setPressure(0); - units->setVolume(0); - units->setTemperature(0); - units->setWeight(0); - units->setVerticalSpeedTime(0); - units->setUnitSystem(QStringLiteral("metric")); - units->setCoordinatesTraditional(false); - - TEST(units->length(), 0); - TEST(units->pressure(), 0); - TEST(units->volume(), 0); - TEST(units->temperature(), 0); - TEST(units->weight(), 0); - TEST(units->verticalSpeedTime(), 0); - TEST(units->unitSystem(), QStringLiteral("metric")); - TEST(units->coordinatesTraditional(), false); - - units->setLength(1); - units->setPressure(1); - units->setVolume(1); - units->setTemperature(1); - units->setWeight(1); - units->setVerticalSpeedTime(1); - units->setUnitSystem(QStringLiteral("fake-metric-system")); - units->setCoordinatesTraditional(true); - - TEST(units->length(), 1); - TEST(units->pressure(), 1); - TEST(units->volume(), 1); - TEST(units->temperature(), 1); - TEST(units->weight(), 1); - TEST(units->verticalSpeedTime(), 1); - TEST(units->unitSystem(), QStringLiteral("personalized")); - TEST(units->coordinatesTraditional(), true); + auto units = qPrefUnits::instance(); + units->set_length(units::METERS); + units->set_pressure(units::BAR); + units->set_volume(units::LITER); + units->set_temperature(units::CELSIUS); + units->set_weight(units::KG); + units->set_vertical_speed_time(units::SECONDS); + units->set_unit_system(QStringLiteral("metric")); + units->set_coordinates_traditional(false); + + TEST(units->length(), units::METERS); + TEST(units->pressure(), units::BAR); + TEST(units->volume(), units::LITER); + TEST(units->temperature(), units::CELSIUS); + TEST(units->weight(), units::KG); + TEST(units->vertical_speed_time(), units::SECONDS); + TEST(units->unit_system(), QStringLiteral("metric")); + TEST(units->coordinates_traditional(), false); + + units->set_length(units::FEET); + units->set_pressure(units::PSI); + units->set_volume(units::CUFT); + units->set_temperature(units::FAHRENHEIT); + units->set_weight(units::LBS); + units->set_vertical_speed_time(units::MINUTES); + units->set_unit_system(QStringLiteral("fake-metric-system")); + units->set_coordinates_traditional(true); + + TEST(units->length(), units::FEET); + TEST(units->pressure(), units::PSI); + TEST(units->volume(), units::CUFT); + TEST(units->temperature(), units::FAHRENHEIT); + TEST(units->weight(), units::LBS); + TEST(units->vertical_speed_time(), units::MINUTES); + TEST(units->unit_system(), QStringLiteral("personalized")); + TEST(units->coordinates_traditional(), true); auto general = pref->general_settings; general->setDefaultFilename("filename"); |