more work on making the settings acessble in a sane way from the Qml /
QWidgets frontend
the work on the settings wrapper is done, next batch of patches I'll change
qml code to actually use it.
From 0e3320c0d5a361226de84edd948a2f35268c940a Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tomaz.canabr...@intel.com>
Date: Fri, 22 Jan 2016 18:37:18 -0200
Subject: [PATCH 6/6] Make it compile

This is not hoocked up on Subsurface code yet, but it's already
being compilled. now I just need to hoock things up.

Signed-off-by: Tomaz Canabrava <tomaz.canabr...@intel.com>
---
 subsurface-core/CMakeLists.txt                     |   2 +-
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 174 ++++++++++++++-------
 .../subsurface-qt/SettingsObjectWrapper.h          |  48 +++---
 subsurface-core/units.h                            |  12 +-
 4 files changed, 147 insertions(+), 89 deletions(-)

diff --git a/subsurface-core/CMakeLists.txt b/subsurface-core/CMakeLists.txt
index 0e060b0..b172bc6 100644
--- a/subsurface-core/CMakeLists.txt
+++ b/subsurface-core/CMakeLists.txt
@@ -84,7 +84,7 @@ set(SUBSURFACE_CORE_LIB_SRCS
 
 	#Subsurface Qt have the Subsurface structs QObjectified for easy access via QML.
 	subsurface-qt/DiveObjectHelper.cpp
-	#subsurface-qt/SettingsObjectWrapper.cpp
+	subsurface-qt/SettingsObjectWrapper.cpp
 	${SERIAL_FTDI}
 	${PLATFORM_SRC}
 	${BT_CORE_SRC_FILES}
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index 37d53a4..f02f941 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -809,15 +809,10 @@ void CloudStorageSettings::setBackgroundSync(bool value)
 
 void CloudStorageSettings::setBaseUrl(const QString& value)
 {
-	free(prefs.cloud_base_url);
-	free(prefs.cloud_git_url);
+	free((void*)prefs.cloud_base_url);
+	free((void*)prefs.cloud_git_url);
 	prefs.cloud_base_url = copy_string(qPrintable(value));
-	prefs.cloud_git_url = strdup(qPrintable(QString(prefs.cloud_base_url) + "/git"));
-}
-
-void CloudStorageSettings::setCloudUrl(const QString& value) /* no-op */
-{
-	Q_UNUSED(value);
+	prefs.cloud_git_url = copy_string(qPrintable(QString(prefs.cloud_base_url) + "/git"));
 }
 
 void CloudStorageSettings::setGitUrl(const QString& value)
@@ -1060,7 +1055,7 @@ void DivePlannerSettings::setAscratelast6m(int value)
 	s.beginGroup(group);
 	s.setValue("ascratelast6m", value);
 	prefs.ascratelast6m = value;
-	emit ascratelast6mChanged();
+	emit ascratelast6mChanged(value);
 }
 
 void DivePlannerSettings::setDescrate(int value)
@@ -1144,46 +1139,46 @@ void DivePlannerSettings::setDecoMode(deco_mode value)
 	emit decoModeChanged(value);
 }
 
-UnitsSettings::UnitsSettings(QObject *parent = 0) :
+UnitsSettings::UnitsSettings(QObject *parent) :
 	QObject(parent),
 	group(QStringLiteral("Units"))
 {
 
 }
 
-units::length UnitsSettings::length() const
+int UnitsSettings::length() const
 {
 	return prefs.units.length;
 }
 
-units::pressure UnitsSettings::pressure() const
+int UnitsSettings::pressure() const
 {
 	return prefs.units.pressure;
 }
 
-units::volume UnitsSettings::volume() const
+int UnitsSettings::volume() const
 {
 	return prefs.units.volume;
 }
 
-units::temperature UnitsSettings::temperature() const
+int UnitsSettings::temperature() const
 {
 	return prefs.units.temperature;
 }
 
-units::weight UnitsSettings::weight() const
+int UnitsSettings::weight() const
 {
 	return prefs.units.weight;
 }
 
-units::vertical_speed_time UnitsSettings::verticalSpeedTime() const
+int UnitsSettings::verticalSpeedTime() const
 {
 	return prefs.units.vertical_speed_time;
 }
 
 QString UnitsSettings::unitSystem() const
 {
-	return prefs.unit_system;
+	return QString(); /*FIXME: there's no char * units on the prefs. */
 }
 
 bool UnitsSettings::coordinatesTraditional() const
@@ -1191,57 +1186,57 @@ bool UnitsSettings::coordinatesTraditional() const
 	return prefs.coordinates_traditional;
 }
 
-void UnitsSettings::setLength(units::length value)
+void UnitsSettings::setLength(int value)
 {
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("length", value);
-	prefs.units.length = value;
+	prefs.units.length = (units::LENGHT) value;
 	emit lengthChanged(value);
 }
 
-void UnitsSettings::setPressure(units::pressure value)
+void UnitsSettings::setPressure(int value)
 {
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("pressure", value);
-	prefs.units.pressure = value;
+	prefs.units.pressure = (units::PRESSURE) value;
 	emit pressureChanged(value);
 }
 
-void UnitsSettings::setVolume(units::volume value)
+void UnitsSettings::setVolume(int value)
 {
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("volume", value);
-	prefs.units.volume = value;
+	prefs.units.volume = (units::VOLUME) value;
 	emit volumeChanged(value);
 }
 
-void UnitsSettings::setTemperature(units::temperature value)
+void UnitsSettings::setTemperature(int value)
 {
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("temperature", value);
-	prefs.units.temperature = value;
+	prefs.units.temperature = (units::TEMPERATURE) value;
 	emit temperatureChanged(value);
 }
 
-void UnitsSettings::setWeight(units::weight value)
+void UnitsSettings::setWeight(int value)
 {
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("weight", value);
-	prefs.units.weight = value;
+	prefs.units.weight = (units::WEIGHT) value;
 	emit weightChanged(value);
 }
 
-void UnitsSettings::setVerticalSpeedTime(units::vertical_speed_time value)
+void UnitsSettings::setVerticalSpeedTime(int value)
 {
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("vertical_speed_time", value);
-	prefs.units.vertical_speed_time = value;
+	prefs.units.vertical_speed_time = (units::TIME) value;
 	emit verticalSpeedTimeChanged(value);
 }
 
@@ -1249,7 +1244,7 @@ void UnitsSettings::setCoordinatesTraditional(bool value)
 {
 	QSettings s;
 	s.setValue("coordinates", value);
-	prefs.coordinates_traditional = value.;
+	prefs.coordinates_traditional = value;
 	emit coordinatesTraditionalChanged(value);
 }
 
@@ -1257,7 +1252,6 @@ void UnitsSettings::setUnitSystem(const QString& value)
 {
 	QSettings s;
 	s.setValue("unit_system", value);
-	prefs.unit_system = value;
 
 	if (value == QStringLiteral("metric")) {
 		prefs.unit_system = METRIC;
@@ -1334,7 +1328,7 @@ void GeneralSettingsObjectWrapper::setDefaultFileBehavior(short value)
 {
 	QSettings s;
 	s.setValue("default_file_behavior", value);
-	prefs.default_file_behavior = value.;
+	prefs.default_file_behavior = value;
 	if (prefs.default_file_behavior == UNDEFINED_DEFAULT_FILE) {
 		// undefined, so check if there's a filename set and
 		// use that, otherwise go with no default file
@@ -1350,7 +1344,7 @@ void GeneralSettingsObjectWrapper::setUseDefaultFile(bool value)
 {
 	QSettings s;
 	s.setValue("use_default_file", value);
-	prefs.use_default_file = value.;
+	prefs.use_default_file = value;
 	emit useDefaultFileChanged(value);
 }
 
@@ -1358,7 +1352,7 @@ void GeneralSettingsObjectWrapper::setDefaultSetPoint(int value)
 {
 	QSettings s;
 	s.setValue("defaultsetpoint", value);
-	prefs.defaultsetpoint = value.;
+	prefs.defaultsetpoint = value;
 	emit defaultSetPointChanged(value);
 }
 
@@ -1366,7 +1360,7 @@ void GeneralSettingsObjectWrapper::setO2Consumption(int value)
 {
 	QSettings s;
 	s.setValue("o2consumption", value);
-	prefs.o2consumption = value.;
+	prefs.o2consumption = value;
 	emit o2ConsumptionChanged(value);
 }
 
@@ -1374,7 +1368,7 @@ void GeneralSettingsObjectWrapper::setPscrRatio(int value)
 {
 	QSettings s;
 	s.setValue("pscr_ratio", value);
-	prefs.pscr_ratio = value.;
+	prefs.pscr_ratio = value;
 	emit pscrRatioChanged(value);
 }
 
@@ -1403,22 +1397,23 @@ void DisplaySettingsObjectWrapper::setDivelistFont(const QString& value)
 {
 	QSettings s;
 	s.setValue("divelist_font", value);
+	QString newValue = value;
 	if (value.contains(","))
-		value = value.left(value.indexOf(","));
+		newValue = value.left(value.indexOf(","));
 
-	if (!subsurface_ignore_font(value.toUtf8().constData())) {
+	if (!subsurface_ignore_font(newValue.toUtf8().constData())) {
 		free((void *)prefs.divelist_font);
-		prefs.divelist_font = strdup(value.toUtf8().constData());
-		qApp->setFont(QFont(value));
+		prefs.divelist_font = strdup(newValue.toUtf8().constData());
+		qApp->setFont(QFont(newValue));
 	}
-	emit divelistFontChanged(value);
+	emit divelistFontChanged(newValue);
 }
 
 void DisplaySettingsObjectWrapper::setFontSize(double value)
 {
 	QSettings s;
 	s.setValue("font_size", value);
-	prefs.font_size = value.;
+	prefs.font_size = value;
 	QFont defaultFont = qApp->font();
 	defaultFont.setPointSizeF(prefs.font_size);
 	qApp->setFont(defaultFont);
@@ -1429,7 +1424,7 @@ void DisplaySettingsObjectWrapper::setDisplayInvalidDives(short value)
 {
 	QSettings s;
 	s.setValue("displayinvalid", value);
-	prefs.display_invalid_dives = value.;
+	prefs.display_invalid_dives = value;
 	emit displayInvalidDivesChanged(value);
 }
 
@@ -1518,7 +1513,7 @@ void  LanguageSettingsObjectWrapper::setTimeFormatOverride(bool value)
 {
 	QSettings s;
 	s.setValue("time_format_override", value);
-	prefs.time_format_override = value.;
+	prefs.time_format_override = value;
 	emit timeFormatOverrideChanged(value);
 }
 
@@ -1526,25 +1521,88 @@ void  LanguageSettingsObjectWrapper::setDateFormatOverride(bool value)
 {
 	QSettings s;
 	s.setValue("date_format_override", value);
-	prefs.date_format_override = value.;
+	prefs.date_format_override = value;
 	emit dateFormatOverrideChanged(value);
 }
 
+AnimationsSettingsObjectWrapper::AnimationsSettingsObjectWrapper(QObject* parent):
+	QObject(parent),
+	group("Animations")
+
+{
+}
+
+int AnimationsSettingsObjectWrapper::animationSpeed() const
+{
+	return prefs.animation_speed;
+}
+
+void AnimationsSettingsObjectWrapper::setAnimationSpeed(int value)
+{
+	QSettings s;
+	s.setValue("animation_speed", value);
+	prefs.animation_speed = value;
+	emit animationSpeedChanged(value);
+}
+
+LocationServiceSettingsObjectWrapper::LocationServiceSettingsObjectWrapper(QObject* parent):
+	QObject(parent),
+	group("locationService")
+{
+}
+
+int LocationServiceSettingsObjectWrapper::distanceThreshold() const
+{
+	return prefs.distance_threshold;
+}
+
+int LocationServiceSettingsObjectWrapper::timeThreshold() const
+{
+	return prefs.time_threshold;
+}
+
+void LocationServiceSettingsObjectWrapper::setDistanceThreshold(int value)
+{
+	QSettings s;
+	s.setValue("distance_threshold", value);
+	prefs.distance_threshold = value;
+	emit distanceThresholdChanged(value);
+}
+
+void LocationServiceSettingsObjectWrapper::setTimeThreshold(int value)
+{
+	QSettings s;
+	s.setValue("time_threshold", value);
+	prefs.time_threshold = value;
+	emit timeThresholdChanged(	value);
+}
+
 SettingsObjectWrapper::SettingsObjectWrapper(QObject* parent):
 QObject(parent),
-	techDetails(new TechnicalDetailsSettings()),
-	pp_gas(new PartialPressureGasSettings()),
-	facebook(new FacebookSettings()),
-	geocoding(new GeocodingPreferences()),
-	proxy(new ProxySettings()),
-	cloud_storage(new CloudStorageSettings()),
-	planner_settings(new DivePlannerSettings()),
-	unit_settings(new UnitsSettings()),
-	general_settings(new GeneralSettingsObjectWrapper()),
-	display_settings(new DisplaySettingsObjectWrapper()),
-	language_settings(new LanguageSettingsObjectWrapper()),
-	animation_settings(new AnimationsSettingsObjectWrapper()),
-	location_settings(new LocationServiceSettingsObjectWrapper())
+	techDetails(new TechnicalDetailsSettings(this)),
+	pp_gas(new PartialPressureGasSettings(this)),
+	facebook(new FacebookSettings(this)),
+	geocoding(new GeocodingPreferences(this)),
+	proxy(new ProxySettings(this)),
+	cloud_storage(new CloudStorageSettings(this)),
+	planner_settings(new DivePlannerSettings(this)),
+	unit_settings(new UnitsSettings(this)),
+	general_settings(new GeneralSettingsObjectWrapper(this)),
+	display_settings(new DisplaySettingsObjectWrapper(this)),
+	language_settings(new LanguageSettingsObjectWrapper(this)),
+	animation_settings(new AnimationsSettingsObjectWrapper(this)),
+	location_settings(new LocationServiceSettingsObjectWrapper(this))
+{
+}
+
+void SettingsObjectWrapper::setSaveUserIdLocal(short int value)
 {
+	//TODO: Find where this is stored on the preferences.
 }
 
+short int SettingsObjectWrapper::saveUserIdLocal() const
+{
+	return prefs.save_userid_local;
+}
+
+
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 2b28d21..6a8aa73 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -413,43 +413,43 @@ private:
 
 class UnitsSettings : public QObject {
 	Q_OBJECT
-	Q_PROPERTY(units::length length           READ length                 WRITE setLength                 NOTIFY lengthChanged)
-	Q_PROPERTY(units::pressure pressure       READ pressure               WRITE setPressure               NOTIFY pressureChanged)
-	Q_PROPERTY(units::volume volume           READ volume                 WRITE setVolume                 NOTIFY volumeChanged)
-	Q_PROPERTY(units::temperature temperature READ temperature            WRITE setTemperature            NOTIFY temperatureChanged)
-	Q_PROPERTY(units::weight weight           READ weight                 WRITE setWeight                 NOTIFY weightChanged)
+	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(units::vertical_speed_time vertical_speed_time READ verticalSpeedTime    WRITE setVerticalSpeedTime    NOTIFY verticalSpeedTimeChanged)
+	Q_PROPERTY(int vertical_speed_time READ verticalSpeedTime    WRITE setVerticalSpeedTime    NOTIFY verticalSpeedTimeChanged)
 
 public:
 	UnitsSettings(QObject *parent = 0);
-	units::length length() const;
-	units::pressure pressure() const;
-	units::volume volume() const;
-	units::temperature temperature() const;
-	units::weight weight() const;
-	units::vertical_speed_time verticalSpeedTime() const;
+	int length() const;
+	int pressure() const;
+	int volume() const;
+	int temperature() const;
+	int weight() const;
+	int verticalSpeedTime() const;
 	QString unitSystem() const;
 	bool coordinatesTraditional() const;
 
 public slots:
-	void setLength(units::length value);
-	void setPressure(units::pressure value);
-	void setVolume(units::volume value);
-	void setTemperature(units::temperature value);
-	void setWeight(units::weight value);
-	void setVerticalSpeedTime(units::vertical_speed_time value);
+	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 setUnitSystem(const QString& value);
 	void setCoordinatesTraditional(bool value);
 
 signals:
-	void lengthChanged(units::length value);
-	void pressureChanged(units::pressure value);
-	void volumeChanged(units::volume value);
-	void temperatureChanged(units::temperature value);
-	void weightChanged(units::weight value);
-	void verticalSpeedTimeChanged(units::vertical_speed_time value);
+	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);
 private:
diff --git a/subsurface-core/units.h b/subsurface-core/units.h
index 9d1b0fc..9ad4b72 100644
--- a/subsurface-core/units.h
+++ b/subsurface-core/units.h
@@ -228,29 +228,29 @@ static inline int mbar_to_PSI(int mbar)
 #undef PASCAL
 #endif
 struct units {
-	enum {
+	enum LENGHT {
 		METERS,
 		FEET
 	} length;
-	enum {
+	enum VOLUME {
 		LITER,
 		CUFT
 	} volume;
-	enum {
+	enum PRESSURE {
 		BAR,
 		PSI,
 		PASCAL
 	} pressure;
-	enum {
+	enum TEMPERATURE {
 		CELSIUS,
 		FAHRENHEIT,
 		KELVIN
 	} temperature;
-	enum {
+	enum WEIGHT {
 		KG,
 		LBS
 	} weight;
-	enum {
+	enum TIME {
 		SECONDS,
 		MINUTES
 	} vertical_speed_time;
-- 
2.7.0

From c7bb767f11ef57d39f589ef0eb41e6b4c0e8e50a Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tomaz.canabr...@intel.com>
Date: Fri, 22 Jan 2016 17:46:15 -0200
Subject: [PATCH 5/6] Finalize the Settings

This was the hammer part of the settings, now I need to make it able to compile ;p

Signed-off-by: Tomaz Canabrava <tomaz.canabr...@intel.com>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 66 ++++++++++++++++-
 .../subsurface-qt/SettingsObjectWrapper.h          | 83 ++++++++++++++++++----
 2 files changed, 135 insertions(+), 14 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index ec36e06..37d53a4 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -8,6 +8,13 @@
 
 static QString tecDetails = QStringLiteral("TecDetails");
 
+PartialPressureGasSettings::PartialPressureGasSettings(QObject* parent):
+	QObject(parent),
+	group("TecDetails")
+{
+
+}
+
 short PartialPressureGasSettings::showPo2() const
 {
 	return prefs.pp_graphs.po2;
@@ -93,6 +100,11 @@ void PartialPressureGasSettings::setPheThreshold(double value)
 }
 
 
+TechnicalDetailsSettings::TechnicalDetailsSettings(QObject* parent): QObject(parent)
+{
+
+}
+
 double TechnicalDetailsSettings:: modp02() const
 {
 	return prefs.modpO2;
@@ -203,7 +215,12 @@ short int TechnicalDetailsSettings::mod() const
 	return prefs.mod;
 }
 
-void TechnicalDetailsSettings::setModpO2(double value)
+bool TechnicalDetailsSettings::showPicturesInProfile() const
+{
+	return prefs.show_pictures_in_profile;
+}
+
+void TechnicalDetailsSettings::setModp02(double value)
 {
 	QSettings s;
 	s.beginGroup(tecDetails);
@@ -212,6 +229,15 @@ void TechnicalDetailsSettings::setModpO2(double value)
 	emit modpO2Changed(value);
 }
 
+void TechnicalDetailsSettings::setShowPicturesInProfile(bool value)
+{
+	QSettings s;
+	s.beginGroup(tecDetails);
+	s.setValue("show_pictures_in_profile", value);
+	prefs.show_pictures_in_profile = value;
+	emit showPicturesInProfileChanged(value);
+}
+
 void TechnicalDetailsSettings::setEad(short value)
 {
 	QSettings s;
@@ -230,7 +256,7 @@ void TechnicalDetailsSettings::setMod(short value)
 	emit modChanged(value);
 }
 
-void TechnicalDetailsSettings::setDcceiling(short value)
+void TechnicalDetailsSettings::setDCceiling(short value)
 {
 	QSettings s;
 	s.beginGroup(tecDetails);
@@ -405,6 +431,8 @@ void TechnicalDetailsSettings::setShowAverageDepth(short value)
 	emit showAverageDepthChanged(value);
 }
 
+
+
 FacebookSettings::FacebookSettings(QObject *parent) :
 	group(QStringLiteral("WebApps")),
 	subgroup(QStringLiteral("Facebook"))
@@ -651,6 +679,11 @@ CloudStorageSettings::CloudStorageSettings(QObject *parent) :
 
 }
 
+bool CloudStorageSettings::gitLocalOnly() const
+{
+	return prefs.git_local_only;
+}
+
 QString CloudStorageSettings::password() const
 {
 	return QString(prefs.cloud_storage_password);
@@ -787,6 +820,16 @@ void CloudStorageSettings::setCloudUrl(const QString& value) /* no-op */
 	Q_UNUSED(value);
 }
 
+void CloudStorageSettings::setGitUrl(const QString& value)
+{
+	Q_UNUSED(value); /* no op */
+}
+
+void CloudStorageSettings::setGitLocalOnly(bool value)
+{
+	prefs.git_local_only = value;
+}
+
 DivePlannerSettings::DivePlannerSettings(QObject *parent) :
 	QObject(parent),
 	group(QStringLiteral("Planner"))
@@ -1486,3 +1529,22 @@ void  LanguageSettingsObjectWrapper::setDateFormatOverride(bool value)
 	prefs.date_format_override = value.;
 	emit dateFormatOverrideChanged(value);
 }
+
+SettingsObjectWrapper::SettingsObjectWrapper(QObject* parent):
+QObject(parent),
+	techDetails(new TechnicalDetailsSettings()),
+	pp_gas(new PartialPressureGasSettings()),
+	facebook(new FacebookSettings()),
+	geocoding(new GeocodingPreferences()),
+	proxy(new ProxySettings()),
+	cloud_storage(new CloudStorageSettings()),
+	planner_settings(new DivePlannerSettings()),
+	unit_settings(new UnitsSettings()),
+	general_settings(new GeneralSettingsObjectWrapper()),
+	display_settings(new DisplaySettingsObjectWrapper()),
+	language_settings(new LanguageSettingsObjectWrapper()),
+	animation_settings(new AnimationsSettingsObjectWrapper()),
+	location_settings(new LocationServiceSettingsObjectWrapper())
+{
+}
+
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 6ce1ac1..2b28d21 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -45,6 +45,8 @@ signals:
 	void po2ThresholdChanged(double value);
 	void pn2ThresholdChanged(double value);
 	void pheThresholdChanged(double value);
+private:
+	QString group;
 };
 
 class TechnicalDetailsSettings : public QObject {
@@ -71,7 +73,7 @@ class TechnicalDetailsSettings : public QObject {
 	Q_PROPERTY(bool gf_low_at_maxdepth    READ gfLowAtMaxDepth    WRITE setGfLowAtMaxDepth    NOTIFY gfLowAtMaxDepthChanged)
 	Q_PROPERTY(short display_unused_tanks READ displayUnusedTanks WRITE setDisplayUnusedTanks NOTIFY displayUnusedTanksChanged)
 	Q_PROPERTY(short show_average_depth   READ showAverageDepth   WRITE setShowAverageDepth   NOTIFY showAverageDepthChanged)
-
+	Q_PROPERTY(bool show_pictures_in_profile READ showPicturesInProfile WRITE setShowPicturesInProfile NOTIFY showPicturesInProfileChanged)
 public:
 	TechnicalDetailsSettings(QObject *parent);
 
@@ -97,6 +99,7 @@ public:
 	bool gfLowAtMaxDepth() const;
 	short displayUnusedTanks() const;
 	short showAverageDepth() const;
+	bool showPicturesInProfile() const;
 
 public slots:
 	void setMod(short value);
@@ -121,6 +124,7 @@ public slots:
 	void setGfLowAtMaxDepth(bool value);
 	void setDisplayUnusedTanks(short value);
 	void setShowAverageDepth(short value);
+	void setShowPicturesInProfile(bool value);
 
 signals:
 	void modpO2Changed(double value);
@@ -145,6 +149,7 @@ signals:
 	void gfLowAtMaxDepthChanged(bool value);
 	void displayUnusedTanksChanged(short value);
 	void showAverageDepthChanged(short value);
+	void showPicturesInProfileChanged(bool value);
 };
 
 /* Control the state of the Facebook preferences */
@@ -257,6 +262,7 @@ class CloudStorageSettings : public QObject {
 	Q_PROPERTY(QString userid            READ userId             WRITE setUserId             NOTIFY userIdChanged)
 	Q_PROPERTY(QString base_url          READ baseUrl            WRITE setBaseUrl            NOTIFY baseUrlChanged)
 	Q_PROPERTY(QString git_url           READ gitUrl             WRITE setGitUrl             NOTIFY gitUrlChanged)
+	Q_PROPERTY(bool git_local_only       READ gitLocalOnly       WRITE setGitLocalOnly       NOTIFY gitLocalOnlyChanged)
 	Q_PROPERTY(bool save_password_local  READ savePasswordLocal  WRITE setSavePasswordLocal  NOTIFY savePasswordLocalChanged)
 	Q_PROPERTY(short verification_status READ verificationStatus WRITE setVerificationStatus NOTIFY verificationStatusChanged)
 	Q_PROPERTY(bool background_sync      READ backgroundSync     WRITE setBackgroundSync     NOTIFY backgroundSyncChanged)
@@ -272,6 +278,7 @@ public:
 	bool savePasswordLocal() const;
 	short verificationStatus() const;
 	bool backgroundSync() const;
+    bool gitLocalOnly() const;
 
 public slots:
 	void setPassword(const QString& value);
@@ -284,6 +291,7 @@ public slots:
 	void setSavePasswordLocal(bool value);
 	void setVerificationStatus(short value);
 	void setBackgroundSync(bool value);
+	void setGitLocalOnly(bool value);
 
 signals:
 	void passwordChanged(const QString& value);
@@ -296,6 +304,7 @@ signals:
 	void savePasswordLocalChanged(bool value);
 	void verificationStatusChanged(short value);
 	void backgroundSyncChanged(bool value);
+	void gitLocalOnlyChanged(bool value);
 private:
 	QString group;
 };
@@ -401,9 +410,6 @@ signals:
 private:
 	QString group;
 };
-/* Monster class, should be breaken into a few more understandable classes later, wich will be easy to do:
-* grab the Q_PROPERTYES and create a wrapper class like the ones above.
-*/
 
 class UnitsSettings : public QObject {
 	Q_OBJECT
@@ -554,15 +560,62 @@ private:
 	QString group;
 };
 
-class SettingsObjectWrapper : public QObject {
+class AnimationsSettingsObjectWrapper : public QObject {
 	Q_OBJECT
-
 	Q_PROPERTY(int animation_speed       READ animationSpeed     WRITE setAnimationSpeed       NOTIFY animationSpeedChanged)
-	Q_PROPERTY(short save_userid_local  READ saveUserIdLocal WRITE setSaveUserIdLocal NOTIFY saveUserIdLocalChanged)
-	Q_PROPERTY(bool show_pictures_in_profile READ showPicturesInProfile WRITE setShowPicturesInProfile NOTIFY showPicturesInProfileChanged)
+public:
+	AnimationsSettingsObjectWrapper(QObject *parent);
+	int animationSpeed() const;
+
+public slots:
+	void setAnimationSpeed(int value);
+
+signals:
+	void animationSpeedChanged(int value);
+
+private:
+	QString group;
+};
+
+class LocationServiceSettingsObjectWrapper : public QObject {
+	Q_OBJECT
 	Q_PROPERTY(int time_threshold            READ timeThreshold         WRITE setTimeThreshold         NOTIFY timeThresholdChanged)
 	Q_PROPERTY(int distance_threshold        READ distanceThreshold     WRITE setDistanceThreshold     NOTIFY distanceThresholdChanged)
-	Q_PROPERTY(bool git_local_only           READ gitLocalOnly          WRITE setGitLocalOnly          NOTIFY gitLocalOnlyChanged)
+public:
+	LocationServiceSettingsObjectWrapper(QObject *parent);
+	int timeThreshold() const;
+	int distanceThreshold() const;
+public slots:
+	void setTimeThreshold(int value);
+	void setDistanceThreshold(int value);
+signals:
+	void timeThresholdChanged(int value);
+	void distanceThresholdChanged(int value);
+private:
+	QString group;
+};
+
+class SettingsObjectWrapper : public QObject {
+	Q_OBJECT
+	Q_PROPERTY(short save_userid_local  READ saveUserIdLocal WRITE setSaveUserIdLocal NOTIFY saveUserIdLocalChanged)
+
+	Q_PROPERTY(TechnicalDetailsSettings*   techical_details MEMBER techDetails CONSTANT)
+	Q_PROPERTY(PartialPressureGasSettings* pp_gas           MEMBER pp_gas CONSTANT)
+	Q_PROPERTY(FacebookSettings*           facebook         MEMBER facebook CONSTANT)
+	Q_PROPERTY(GeocodingPreferences*       geocoding        MEMBER geocoding CONSTANT)
+	Q_PROPERTY(ProxySettings*              proxy            MEMBER proxy CONSTANT)
+	Q_PROPERTY(CloudStorageSettings*       cloud_storage    MEMBER cloud_storage CONSTANT)
+	Q_PROPERTY(DivePlannerSettings*        planner          MEMBER planner_settings CONSTANT)
+	Q_PROPERTY(UnitsSettings*              units            MEMBER unit_settings CONSTANT)
+
+	Q_PROPERTY(GeneralSettingsObjectWrapper*         general   MEMBER general_settings CONSTANT)
+	Q_PROPERTY(DisplaySettingsObjectWrapper*         display   MEMBER display_settings CONSTANT)
+	Q_PROPERTY(LanguageSettingsObjectWrapper*        language  MEMBER language_settings CONSTANT)
+	Q_PROPERTY(AnimationsSettingsObjectWrapper*      animation MEMBER animation_settings CONSTANT)
+	Q_PROPERTY(LocationServiceSettingsObjectWrapper* Location  MEMBER location_settings CONSTANT)
+public:
+	SettingsObjectWrapper(QObject *parent = NULL);
+	short saveUserIdLocal() const;
 
 	TechnicalDetailsSettings *techDetails;
 	PartialPressureGasSettings *pp_gas;
@@ -574,8 +627,14 @@ class SettingsObjectWrapper : public QObject {
 	UnitsSettings *unit_settings;
 	GeneralSettingsObjectWrapper *general_settings;
 	DisplaySettingsObjectWrapper *display_settings;
-public:
-	SettingsObjectWrapper(QObject *parent = NULL);
+	LanguageSettingsObjectWrapper *language_settings;
+	AnimationsSettingsObjectWrapper *animation_settings;
+	LocationServiceSettingsObjectWrapper *location_settings;
+
+public slots:
+	void setSaveUserIdLocal(short value);
+signals:
+	void saveUserIdLocalChanged(short value);
 };
 
-#endif
\ No newline at end of file
+#endif
-- 
2.7.0

From 99152ac402f461528c69621b568e114c1b79c656 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tomaz.canabr...@intel.com>
Date: Fri, 22 Jan 2016 16:58:17 -0200
Subject: [PATCH 4/6] Remove prefs already implemented.

Signed-off-by: Tomaz Canabrava <tomaz.canabr...@intel.com>
---
 subsurface-core/subsurface-qt/SettingsObjectWrapper.h | 2 --
 1 file changed, 2 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 9b81456..6ce1ac1 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -558,8 +558,6 @@ class SettingsObjectWrapper : public QObject {
 	Q_OBJECT
 
 	Q_PROPERTY(int animation_speed       READ animationSpeed     WRITE setAnimationSpeed       NOTIFY animationSpeedChanged)
-	Q_PROPERTY(short unit_system            READ unitSystem              WRITE setUnitSystem                NOTIFY uintSystemChanged)
-	Q_PROPERTY(bool coordinates_traditional READ coordinatesTraditional  WRITE setCoordinatesTraditional    NOTIFY coordinatesTraditionalChanged)
 	Q_PROPERTY(short save_userid_local  READ saveUserIdLocal WRITE setSaveUserIdLocal NOTIFY saveUserIdLocalChanged)
 	Q_PROPERTY(bool show_pictures_in_profile READ showPicturesInProfile WRITE setShowPicturesInProfile NOTIFY showPicturesInProfileChanged)
 	Q_PROPERTY(int time_threshold            READ timeThreshold         WRITE setTimeThreshold         NOTIFY timeThresholdChanged)
-- 
2.7.0

From cfc573af5a0fddf02c59144f669d6eb43240835f Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tomaz.canabr...@intel.com>
Date: Fri, 22 Jan 2016 16:55:03 -0200
Subject: [PATCH 3/6] Language Settings Wrapper

Signed-off-by: Tomaz Canabrava <tomaz.canabr...@intel.com>
---
 subsurface-core/pref.h                             |  6 ++
 subsurface-core/qthelper.cpp                       |  1 +
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 96 ++++++++++++++++++++++
 .../subsurface-qt/SettingsObjectWrapper.h          | 41 ++++++++-
 4 files changed, 142 insertions(+), 2 deletions(-)

diff --git a/subsurface-core/pref.h b/subsurface-core/pref.h
index 1e58a6a..be684fd 100644
--- a/subsurface-core/pref.h
+++ b/subsurface-core/pref.h
@@ -32,6 +32,11 @@ typedef struct {
 	enum taxonomy_category category[3];
 } geocoding_prefs_t;
 
+typedef struct {
+	const char *language;
+	bool use_system_language;
+} locale_prefs_t;
+
 enum deco_mode {
 	BUEHLMANN,
 	RECREATIONAL,
@@ -126,6 +131,7 @@ struct preferences {
 	int time_threshold;
 	int distance_threshold;
 	bool git_local_only;
+	locale_prefs_t locale; //: TODO: move the rest of locale based info here.
 };
 enum unit_system_values {
 	METRIC,
diff --git a/subsurface-core/qthelper.cpp b/subsurface-core/qthelper.cpp
index 915f263..b8e1688 100644
--- a/subsurface-core/qthelper.cpp
+++ b/subsurface-core/qthelper.cpp
@@ -1273,6 +1273,7 @@ void loadPreferences()
 	QSettings s;
 	QVariant v;
 
+	uiLanguage(NULL);
 	s.beginGroup("Units");
 	if (s.value("unit_system").toString() == "metric") {
 		prefs.unit_system = METRIC;
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index 1cd12b3..ec36e06 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -1390,3 +1390,99 @@ void DisplaySettingsObjectWrapper::setDisplayInvalidDives(short value)
 	emit displayInvalidDivesChanged(value);
 }
 
+LanguageSettingsObjectWrapper::LanguageSettingsObjectWrapper(QObject *parent) :
+	QObject(parent),
+	group("Language")
+{
+}
+
+QString LanguageSettingsObjectWrapper::language() const
+{
+	return prefs.locale.language;
+}
+
+QString LanguageSettingsObjectWrapper::timeFormat() const
+{
+	return prefs.time_format;
+}
+
+QString LanguageSettingsObjectWrapper::dateFormat() const
+{
+	return prefs.date_format;
+}
+
+QString LanguageSettingsObjectWrapper::dateFormatShort() const
+{
+	return prefs.date_format_short;
+}
+
+bool LanguageSettingsObjectWrapper::timeFormatOverride() const
+{
+	return prefs.time_format_override;
+}
+
+bool LanguageSettingsObjectWrapper::dateFormatOverride() const
+{
+	return prefs.date_format_override;
+}
+
+bool LanguageSettingsObjectWrapper::useSystemLanguage() const
+{
+	return prefs.locale.use_system_language;
+}
+
+void LanguageSettingsObjectWrapper::setUseSystemLanguage(bool value)
+{
+	QSettings s;
+	s.setValue("UseSystemLanguage", value);
+	prefs.locale.use_system_language = copy_string(qPrintable(value));
+	emit useSystemLanguageChanged(value);
+}
+
+void  LanguageSettingsObjectWrapper::setLanguage(const QString& value)
+{
+	QSettings s;
+	s.setValue("UiLanguage", value);
+	prefs.locale.language = copy_string(qPrintable(value));
+	emit languageChanged(value);
+}
+
+void  LanguageSettingsObjectWrapper::setTimeFormat(const QString& value)
+{
+	QSettings s;
+	s.setValue("time_format", value);
+	prefs.time_format = copy_string(qPrintable(value));;
+	emit timeFormatChanged(value);
+}
+
+void  LanguageSettingsObjectWrapper::setDateFormat(const QString& value)
+{
+	QSettings s;
+	s.setValue("date_format", value);
+	prefs.date_format = copy_string(qPrintable(value));;
+	emit dateFormatChanged(value);
+}
+
+void  LanguageSettingsObjectWrapper::setDateFormatShort(const QString& value)
+{
+	QSettings s;
+	s.setValue("date_format_short", value);
+	prefs.date_format_short = copy_string(qPrintable(value));;
+	emit dateFormatShortChanged(value);
+}
+
+void  LanguageSettingsObjectWrapper::setTimeFormatOverride(bool value)
+{
+	QSettings s;
+	s.setValue("time_format_override", value);
+	prefs.time_format_override = value.;
+	emit timeFormatOverrideChanged(value);
+}
+
+void  LanguageSettingsObjectWrapper::setDateFormatOverride(bool value)
+{
+	QSettings s;
+	s.setValue("date_format_override", value);
+	prefs.date_format_override = value.;
+	emit dateFormatOverrideChanged(value);
+}
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 877a4e5..9b81456 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -513,13 +513,50 @@ private:
 	QString group;
 };
 
-class SettingsObjectWrapper : public QObject {
+class LanguageSettingsObjectWrapper : public QObject {
 	Q_OBJECT
-
+	Q_PROPERTY(QString language          READ language           WRITE setLanguage           NOTIFY languageChanged)
 	Q_PROPERTY(QString time_format       READ timeFormat         WRITE setTimeFormat         NOTIFY timeFormatChanged)
+	Q_PROPERTY(QString date_format       READ dateFormat         WRITE setDateFormat         NOTIFY dateFormatChanged)
 	Q_PROPERTY(QString date_format_short READ dateFormatShort    WRITE setDateFormatShort    NOTIFY dateFormatShortChanged)
 	Q_PROPERTY(bool time_format_override READ timeFormatOverride WRITE setTimeFormatOverride NOTIFY timeFormatOverrideChanged)
 	Q_PROPERTY(bool date_format_override READ dateFormatOverride WRITE setDateFormatOverride NOTIFY dateFormatOverrideChanged)
+	Q_PROPERTY(bool use_system_language  READ useSystemLanguage  WRITE setUseSystemLanguage  NOTIFY useSystemLanguageChanged)
+
+public:
+	LanguageSettingsObjectWrapper(QObject *parent);
+	QString language() const;
+	QString timeFormat() const;
+	QString dateFormat() const;
+	QString dateFormatShort() const;
+	bool timeFormatOverride() const;
+	bool dateFormatOverride() const;
+	bool useSystemLanguage() const;
+
+public slots:
+	void  setLanguage           (const QString& value);
+	void  setTimeFormat         (const QString& value);
+	void  setDateFormat         (const QString& value);
+	void  setDateFormatShort    (const QString& value);
+	void  setTimeFormatOverride (bool value);
+	void  setDateFormatOverride (bool value);
+	void  setUseSystemLanguage  (bool value);
+signals:
+	void languageChanged(const QString& value);
+	void timeFormatChanged(const QString& value);
+	void dateFormatChanged(const QString& value);
+	void dateFormatShortChanged(const QString& value);
+	void timeFormatOverrideChanged(bool value);
+	void dateFormatOverrideChanged(bool value);
+	void useSystemLanguageChanged(bool value);
+
+private:
+	QString group;
+};
+
+class SettingsObjectWrapper : public QObject {
+	Q_OBJECT
+
 	Q_PROPERTY(int animation_speed       READ animationSpeed     WRITE setAnimationSpeed       NOTIFY animationSpeedChanged)
 	Q_PROPERTY(short unit_system            READ unitSystem              WRITE setUnitSystem                NOTIFY uintSystemChanged)
 	Q_PROPERTY(bool coordinates_traditional READ coordinatesTraditional  WRITE setCoordinatesTraditional    NOTIFY coordinatesTraditionalChanged)
-- 
2.7.0

From 746661af9de1fb69e21d0091cbcedb62c69b3838 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tomaz.canabr...@intel.com>
Date: Fri, 22 Jan 2016 16:00:44 -0200
Subject: [PATCH 2/6] Added Display Settings

Signed-off-by: Tomaz Canabrava <tomaz.canabr...@intel.com>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 59 ++++++++++++++++++++++
 .../subsurface-qt/SettingsObjectWrapper.h          | 27 ++++++++--
 2 files changed, 82 insertions(+), 4 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index 4684b74..1cd12b3 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -1,5 +1,8 @@
 #include "SettingsObjectWrapper.h"
 #include <QSettings>
+#include <QApplication>
+#include <QFont>
+
 #include "../dive.h" // TODO: remove copy_string from dive.h
 
 
@@ -1331,3 +1334,59 @@ void GeneralSettingsObjectWrapper::setPscrRatio(int value)
 	prefs.pscr_ratio = value.;
 	emit pscrRatioChanged(value);
 }
+
+DisplaySettingsObjectWrapper::DisplaySettingsObjectWrapper(QObject *parent) :
+	QObject(parent),
+	group(QStringLiteral("Display"))
+{
+}
+
+QString DisplaySettingsObjectWrapper::divelistFont() const
+{
+	return prefs.divelist_font;
+}
+
+double DisplaySettingsObjectWrapper::fontSize() const
+{
+	return prefs.font_size;
+}
+
+short DisplaySettingsObjectWrapper::displayInvalidDives() const
+{
+	return prefs.display_invalid_dives;
+}
+
+void DisplaySettingsObjectWrapper::setDivelistFont(const QString& value)
+{
+	QSettings s;
+	s.setValue("divelist_font", value);
+	if (value.contains(","))
+		value = value.left(value.indexOf(","));
+
+	if (!subsurface_ignore_font(value.toUtf8().constData())) {
+		free((void *)prefs.divelist_font);
+		prefs.divelist_font = strdup(value.toUtf8().constData());
+		qApp->setFont(QFont(value));
+	}
+	emit divelistFontChanged(value);
+}
+
+void DisplaySettingsObjectWrapper::setFontSize(double value)
+{
+	QSettings s;
+	s.setValue("font_size", value);
+	prefs.font_size = value.;
+	QFont defaultFont = qApp->font();
+	defaultFont.setPointSizeF(prefs.font_size);
+	qApp->setFont(defaultFont);
+	emit fontSizeChanged(value);
+}
+
+void DisplaySettingsObjectWrapper::setDisplayInvalidDives(short value)
+{
+	QSettings s;
+	s.setValue("displayinvalid", value);
+	prefs.display_invalid_dives = value.;
+	emit displayInvalidDivesChanged(value);
+}
+
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index fd8cdac..877a4e5 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -489,20 +489,38 @@ signals:
 	void pscrRatioChanged(int value);
 private:
 	QString group;
+};
 
+class DisplaySettingsObjectWrapper : public QObject {
+	Q_OBJECT
+	Q_PROPERTY(QString divelist_font     READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
+	Q_PROPERTY(double font_size          READ fontSize           WRITE setFontSize           NOTIFY fontSizeChanged)
+	Q_PROPERTY(short display_invalid_dives  READ displayInvalidDives     WRITE setDisplayInvalidDives       NOTIFY displayInvalidDivesChanged)
+public:
+	DisplaySettingsObjectWrapper(QObject *parent);
+	QString divelistFont() const;
+	double fontSize() const;
+	short displayInvalidDives() const;
+public slots:
+	void setDivelistFont(const QString& value);
+	void setFontSize(double value);
+	void setDisplayInvalidDives(short value);
+signals:
+	void divelistFontChanged(const QString& value);
+	void fontSizeChanged(double value);
+	void displayInvalidDivesChanged(short value);
+private:
+	QString group;
 };
 
 class SettingsObjectWrapper : public QObject {
 	Q_OBJECT
-	Q_PROPERTY(QString divelist_font     READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
+
 	Q_PROPERTY(QString time_format       READ timeFormat         WRITE setTimeFormat         NOTIFY timeFormatChanged)
-	Q_PROPERTY(QString date_format       READ dateFormat         WRITE setDateFormat         NOTIFY dateFormatChanged)
 	Q_PROPERTY(QString date_format_short READ dateFormatShort    WRITE setDateFormatShort    NOTIFY dateFormatShortChanged)
 	Q_PROPERTY(bool time_format_override READ timeFormatOverride WRITE setTimeFormatOverride NOTIFY timeFormatOverrideChanged)
 	Q_PROPERTY(bool date_format_override READ dateFormatOverride WRITE setDateFormatOverride NOTIFY dateFormatOverrideChanged)
-	Q_PROPERTY(double font_size          READ fontSize           WRITE setFontSize           NOTIFY fontSizeChanged)
 	Q_PROPERTY(int animation_speed       READ animationSpeed     WRITE setAnimationSpeed       NOTIFY animationSpeedChanged)
-	Q_PROPERTY(short display_invalid_dives  READ displayInvalidDives     WRITE setDisplayInvalidDives       NOTIFY displayInvalidDivesChanged)
 	Q_PROPERTY(short unit_system            READ unitSystem              WRITE setUnitSystem                NOTIFY uintSystemChanged)
 	Q_PROPERTY(bool coordinates_traditional READ coordinatesTraditional  WRITE setCoordinatesTraditional    NOTIFY coordinatesTraditionalChanged)
 	Q_PROPERTY(short save_userid_local  READ saveUserIdLocal WRITE setSaveUserIdLocal NOTIFY saveUserIdLocalChanged)
@@ -520,6 +538,7 @@ class SettingsObjectWrapper : public QObject {
 	DivePlannerSettings *planner_settings;
 	UnitsSettings *unit_settings;
 	GeneralSettingsObjectWrapper *general_settings;
+	DisplaySettingsObjectWrapper *display_settings;
 public:
 	SettingsObjectWrapper(QObject *parent = NULL);
 };
-- 
2.7.0

From d966161cde366bb004e1ce0e30fadc3ef954bbf8 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tomaz.canabr...@intel.com>
Date: Fri, 22 Jan 2016 15:39:40 -0200
Subject: [PATCH 1/6] Added a GeneralSettingsWrapper

Signed-off-by: Tomaz Canabrava <tomaz.canabr...@intel.com>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 105 +++++++++++++++++++++
 .../subsurface-qt/SettingsObjectWrapper.h          |  50 ++++++++--
 2 files changed, 148 insertions(+), 7 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index ef48dfa..4684b74 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -1226,3 +1226,108 @@ void UnitsSettings::setUnitSystem(const QString& value)
 	emit unitSystemChanged(value);
 	// TODO: emit the other values here?
 }
+
+GeneralSettingsObjectWrapper::GeneralSettingsObjectWrapper(QObject *parent) :
+	QObject(parent),
+	group(QStringLiteral("GeneralSettings"))
+{
+}
+
+QString GeneralSettingsObjectWrapper::defaultFilename() const
+{
+	return prefs.default_filename;
+}
+
+QString GeneralSettingsObjectWrapper::defaultCylinder() const
+{
+	return prefs.default_cylinder;
+}
+
+short GeneralSettingsObjectWrapper::defaultFileBehavior() const
+{
+	return prefs.default_file_behavior;
+}
+
+bool GeneralSettingsObjectWrapper::useDefaultFile() const
+{
+	return prefs.use_default_file;
+}
+
+int GeneralSettingsObjectWrapper::defaultSetPoint() const
+{
+	return prefs.defaultsetpoint;
+}
+
+int GeneralSettingsObjectWrapper::o2Consumption() const
+{
+	return prefs.o2consumption;
+}
+
+int GeneralSettingsObjectWrapper::pscrRatio() const
+{
+	return prefs.pscr_ratio;
+}
+
+void GeneralSettingsObjectWrapper::setDefaultFilename(const QString& value)
+{
+	QSettings s;
+	s.setValue("default_filename", value);
+	prefs.default_filename = copy_string(qPrintable(value));
+	emit defaultFilenameChanged(value);
+}
+
+void GeneralSettingsObjectWrapper::setDefaultCylinder(const QString& value)
+{
+	QSettings s;
+	s.setValue("default_cylinder", value);
+	prefs.default_cylinder = copy_string(qPrintable(value));
+	emit defaultCylinderChanged(value);
+}
+
+void GeneralSettingsObjectWrapper::setDefaultFileBehavior(short value)
+{
+	QSettings s;
+	s.setValue("default_file_behavior", value);
+	prefs.default_file_behavior = value.;
+	if (prefs.default_file_behavior == UNDEFINED_DEFAULT_FILE) {
+		// undefined, so check if there's a filename set and
+		// use that, otherwise go with no default file
+		if (QString(prefs.default_filename).isEmpty())
+			prefs.default_file_behavior = NO_DEFAULT_FILE;
+		else
+			prefs.default_file_behavior = LOCAL_DEFAULT_FILE;
+	}
+	emit defaultFileBehaviorChanged(value);
+}
+
+void GeneralSettingsObjectWrapper::setUseDefaultFile(bool value)
+{
+	QSettings s;
+	s.setValue("use_default_file", value);
+	prefs.use_default_file = value.;
+	emit useDefaultFileChanged(value);
+}
+
+void GeneralSettingsObjectWrapper::setDefaultSetPoint(int value)
+{
+	QSettings s;
+	s.setValue("defaultsetpoint", value);
+	prefs.defaultsetpoint = value.;
+	emit defaultSetPointChanged(value);
+}
+
+void GeneralSettingsObjectWrapper::setO2Consumption(int value)
+{
+	QSettings s;
+	s.setValue("o2consumption", value);
+	prefs.o2consumption = value.;
+	emit o2ConsumptionChanged(value);
+}
+
+void GeneralSettingsObjectWrapper::setPscrRatio(int value)
+{
+	QSettings s;
+	s.setValue("pscr_ratio", value);
+	prefs.pscr_ratio = value.;
+	emit pscrRatioChanged(value);
+}
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index c0d0cab..fd8cdac 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -450,11 +450,51 @@ private:
 	QString group;
 };
 
+class GeneralSettingsObjectWrapper : public QObject {
+	Q_OBJECT
+	Q_PROPERTY(QString default_filename      READ defaultFilename       WRITE setDefaultFilename       NOTIFY defaultFilenameChanged)
+	Q_PROPERTY(QString default_cylinder      READ defaultCylinder       WRITE setDefaultCylinder       NOTIFY defaultCylinderChanged)
+	Q_PROPERTY(short default_file_behavior   READ defaultFileBehavior   WRITE setDefaultFileBehavior   NOTIFY defaultFileBehaviorChanged)
+	Q_PROPERTY(bool use_default_file         READ useDefaultFile        WRITE setUseDefaultFile        NOTIFY useDefaultFileChanged)
+	Q_PROPERTY(int defaultsetpoint           READ defaultSetPoint       WRITE setDefaultSetPoint       NOTIFY defaultSetPointChanged)
+	Q_PROPERTY(int o2consumption             READ o2Consumption         WRITE setO2Consumption         NOTIFY o2ConsumptionChanged)
+	Q_PROPERTY(int pscr_ratio                READ pscrRatio             WRITE setPscrRatio             NOTIFY pscrRatioChanged)
+
+public:
+	GeneralSettingsObjectWrapper(QObject *parent);
+	QString defaultFilename() const;
+	QString defaultCylinder() const;
+	short defaultFileBehavior() const;
+	bool useDefaultFile() const;
+	int defaultSetPoint() const;
+	int o2Consumption() const;
+	int pscrRatio() const;
+
+public slots:
+	void setDefaultFilename       (const QString& value);
+	void setDefaultCylinder       (const QString& value);
+	void setDefaultFileBehavior   (short value);
+	void setUseDefaultFile        (bool value);
+	void setDefaultSetPoint       (int value);
+	void setO2Consumption         (int value);
+	void setPscrRatio             (int value);
+
+signals:
+	void defaultFilenameChanged(const QString& value);
+	void defaultCylinderChanged(const QString& value);
+	void defaultFileBehaviorChanged(short value);
+	void useDefaultFileChanged(bool value);
+	void defaultSetPointChanged(int value);
+	void o2ConsumptionChanged(int value);
+	void pscrRatioChanged(int value);
+private:
+	QString group;
+
+};
+
 class SettingsObjectWrapper : public QObject {
 	Q_OBJECT
 	Q_PROPERTY(QString divelist_font     READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
-	Q_PROPERTY(QString default_filename  READ defaultFilename    WRITE setDefaultFilename    NOTIFY defaultFilenameChanged)
-	Q_PROPERTY(QString default_cylinder  READ defaultCylinder    WRITE setDefaultCylinder    NOTIFY defaultCylinderChanged)
 	Q_PROPERTY(QString time_format       READ timeFormat         WRITE setTimeFormat         NOTIFY timeFormatChanged)
 	Q_PROPERTY(QString date_format       READ dateFormat         WRITE setDateFormat         NOTIFY dateFormatChanged)
 	Q_PROPERTY(QString date_format_short READ dateFormatShort    WRITE setDateFormatShort    NOTIFY dateFormatShortChanged)
@@ -466,12 +506,7 @@ class SettingsObjectWrapper : public QObject {
 	Q_PROPERTY(short unit_system            READ unitSystem              WRITE setUnitSystem                NOTIFY uintSystemChanged)
 	Q_PROPERTY(bool coordinates_traditional READ coordinatesTraditional  WRITE setCoordinatesTraditional    NOTIFY coordinatesTraditionalChanged)
 	Q_PROPERTY(short save_userid_local  READ saveUserIdLocal WRITE setSaveUserIdLocal NOTIFY saveUserIdLocalChanged)
-	Q_PROPERTY(int o2consumption             READ o2Consumption         WRITE setO2Consumption         NOTIFY o2ConsumptionChanged)
-	Q_PROPERTY(int pscr_ratio                READ pscrRatio             WRITE setPscrRatio             NOTIFY pscrRatioChanged)
-	Q_PROPERTY(int defaultsetpoint           READ defaultSetPoint       WRITE setDefaultSetPoint       NOTIFY defaultSetPointChanged)
 	Q_PROPERTY(bool show_pictures_in_profile READ showPicturesInProfile WRITE setShowPicturesInProfile NOTIFY showPicturesInProfileChanged)
-	Q_PROPERTY(bool use_default_file         READ useDefaultFile        WRITE setUseDefaultFile        NOTIFY useDefaultFileChanged)
-	Q_PROPERTY(short default_file_behavior   READ defaultFileBehavior   WRITE setDefaultFileBehavior   NOTIFY defaultFileBehaviorChanged)
 	Q_PROPERTY(int time_threshold            READ timeThreshold         WRITE setTimeThreshold         NOTIFY timeThresholdChanged)
 	Q_PROPERTY(int distance_threshold        READ distanceThreshold     WRITE setDistanceThreshold     NOTIFY distanceThresholdChanged)
 	Q_PROPERTY(bool git_local_only           READ gitLocalOnly          WRITE setGitLocalOnly          NOTIFY gitLocalOnlyChanged)
@@ -484,6 +519,7 @@ class SettingsObjectWrapper : public QObject {
 	CloudStorageSettings *cloud_storage;
 	DivePlannerSettings *planner_settings;
 	UnitsSettings *unit_settings;
+	GeneralSettingsObjectWrapper *general_settings;
 public:
 	SettingsObjectWrapper(QObject *parent = NULL);
 };
-- 
2.7.0

_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface
  • [no subject] Tomaz Canabrava
    • Re: Tomaz Canabrava

Reply via email to