a few more. still working on them.
a bit slow because it's a bit tedious work.

On Wed, Jan 13, 2016 at 6:16 PM, Tomaz Canabrava <[email protected]> wrote:

> still need a bit more to finish.
> one thing I realized two minutes ago that this will greatly improve
> testability,
> I'm already starting to write the unittests for it.
>
>
>
From ddb09a8658d3990ea37fe8a367b0fd77d83a8e0e Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Thu, 14 Jan 2016 17:06:55 -0200
Subject: [PATCH 11/11] Implement the Unit Settings

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 132 ++++++++++++++++++++-
 .../subsurface-qt/SettingsObjectWrapper.h          |  48 ++++++--
 2 files changed, 171 insertions(+), 9 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index 3deaafd..32a42e4 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -1094,6 +1094,136 @@ void DivePlannerSettings::setDecoMode(deco_mode value)
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("deco_mode", value);
-	prefs.deco_mode = value.;
+	prefs.deco_mode = value;
 	emit decoModeChanged(value);
 }
+
+UnitsSettings::UnitsSettings(QObject *parent = 0) :
+	QObject(parent),
+	group(QStringLiteral("Units"))
+{
+
+}
+
+units::length UnitsSettings::length() const
+{
+	return prefs.units.length;
+}
+
+units::pressure UnitsSettings::pressure() const
+{
+	return prefs.units.pressure;
+}
+
+units::volume UnitsSettings::volume() const
+{
+	return prefs.units.volume;
+}
+
+units::temperature UnitsSettings::temperature() const
+{
+	return prefs.units.temperature;
+}
+
+units::weight UnitsSettings::weight() const
+{
+	return prefs.units.weight;
+}
+
+units::vertical_speed_time UnitsSettings::verticalSpeedTime() const
+{
+	return prefs.units.vertical_speed_time;
+}
+
+QString UnitsSettings::unitSystem() const
+{
+	return prefs.unit_system;
+}
+
+bool UnitsSettings::coordinatesTraditional() const
+{
+	return prefs.coordinates_traditional;
+}
+
+void UnitsSettings::setLength(units::length value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("length", value);
+	prefs.units.length = value;
+	emit lengthChanged(value);
+}
+
+void UnitsSettings::setPressure(units::pressure value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("pressure", value);
+	prefs.units.pressure = value;
+	emit pressureChanged(value);
+}
+
+void UnitsSettings::setVolume(units::volume value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("volume", value);
+	prefs.units.volume = value;
+	emit volumeChanged(value);
+}
+
+void UnitsSettings::setTemperature(units::temperature value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("temperature", value);
+	prefs.units.temperature = value;
+	emit temperatureChanged(value);
+}
+
+void UnitsSettings::setWeight(units::weight value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("weight", value);
+	prefs.units.weight = value;
+	emit weightChanged(value);
+}
+
+void UnitsSettings::setVerticalSpeedTime(units::vertical_speed_time value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("vertical_speed_time", value);
+	prefs.units.vertical_speed_time = value;
+	emit verticalSpeedTimeChanged(value);
+}
+
+void UnitsSettings::setCoordinatesTraditional(bool value)
+{
+	QSettings s;
+	s.setValue("coordinates", value);
+	prefs.coordinates_traditional = value.;
+	emit coordinatesTraditionalChanged(value);
+}
+
+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;
+		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?
+}
+
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 3275113..c0d0cab 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -407,15 +407,47 @@ private:
 
 class UnitsSettings : public QObject {
 	Q_OBJECT
-	Q_PROPERTY(units::length length           READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
-	Q_PROPERTY(units::pressure pressure       READ defaultFilename    WRITE setDefaultFilename    NOTIFY defaultFilenameChanged)
-	Q_PROPERTY(units::volume volume           READ defaultCylinder    WRITE setDefaultCylinder    NOTIFY defaultCylinderChanged)
-	Q_PROPERTY(units::temperature temperature READ timeFormat         WRITE setTimeFormat         NOTIFY timeFormatChanged)
-	Q_PROPERTY(units::weight weight           READ dateFormat         WRITE setDateFormat         NOTIFY dateFormatChanged)
-	Q_PROPERTY(units::vertical_speed_time vertical_speed_time READ dateFormatShort    WRITE setDateFormatShort    NOTIFY dateFormatShortChanged)
-	Q_PROPERTY(QString unit_system            READ unitSystem         WRITE setUnitSystem         NOTIFY unitSystemChanged)
+	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(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)
 
+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;
+	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 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 unitSystemChanged(const QString& value);
+	void coordinatesTraditionalChanged(bool value);
+private:
+	QString group;
 };
 
 class SettingsObjectWrapper : public QObject {
@@ -451,7 +483,7 @@ class SettingsObjectWrapper : public QObject {
 	ProxySettings *proxy;
 	CloudStorageSettings *cloud_storage;
 	DivePlannerSettings *planner_settings;
-
+	UnitsSettings *unit_settings;
 public:
 	SettingsObjectWrapper(QObject *parent = NULL);
 };
-- 
2.7.0

From 4cca908f3acff23c5958fb078c312c4acdbaf00c Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Thu, 14 Jan 2016 16:21:28 -0200
Subject: [PATCH 10/11] Start the UnitSystem QObjectification

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 .../subsurface-qt/SettingsObjectWrapper.h          | 23 ++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index bf45a11..3275113 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -48,6 +48,7 @@ signals:
 };
 
 class TechnicalDetailsSettings : public QObject {
+	Q_OBJECT
 	Q_PROPERTY(double modpO2          READ modp02          WRITE setModp02          NOTIFY modpO2Changed)
 	Q_PROPERTY(short ead              READ ead             WRITE setEad             NOTIFY eadChanged)
 	Q_PROPERTY(short mod              READ mod                WRITE setMod                NOTIFY modChanged);
@@ -254,7 +255,7 @@ class CloudStorageSettings : public QObject {
 	Q_PROPERTY(QString email             READ email              WRITE setEmail              NOTIFY emailChanged)
 	Q_PROPERTY(QString email_encoded     READ emailEncoded       WRITE setEmailEncoded       NOTIFY emailEncodedChanged)
 	Q_PROPERTY(QString userid            READ userId             WRITE setUserId             NOTIFY userIdChanged)
-	Q_PROPERTY(QString base_url          READ baseUrl            WRITE setBaseURL            NOTIFY baseUrlChanged)
+	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 save_password_local  READ savePasswordLocal  WRITE setSavePasswordLocal  NOTIFY savePasswordLocalChanged)
 	Q_PROPERTY(short verification_status READ verificationStatus WRITE setVerificationStatus NOTIFY verificationStatusChanged)
@@ -279,7 +280,7 @@ public slots:
 	void setEmailEncoded(const QString& value);
 	void setUserId(const QString& value);
 	void setBaseUrl(const QString& value);
-	void setCloudUrl(const QString& value);
+	void setGitUrl(const QString& value);
 	void setSavePasswordLocal(bool value);
 	void setVerificationStatus(short value);
 	void setBackgroundSync(bool value);
@@ -300,6 +301,7 @@ private:
 };
 
 class DivePlannerSettings : public QObject {
+	Q_OBJECT
 	Q_PROPERTY(bool last_stop           READ lastStop             WRITE setLastStop             NOTIFY lastStopChanged)
 	Q_PROPERTY(bool verbatim_plan       READ verbatimPlan         WRITE setVerbatimPlan         NOTIFY verbatimPlanChanged)
 	Q_PROPERTY(bool display_runtime     READ displayRuntime       WRITE setDisplayRuntime       NOTIFY displayRuntimeChanged)
@@ -403,6 +405,19 @@ private:
 * grab the Q_PROPERTYES and create a wrapper class like the ones above.
 */
 
+class UnitsSettings : public QObject {
+	Q_OBJECT
+	Q_PROPERTY(units::length length           READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
+	Q_PROPERTY(units::pressure pressure       READ defaultFilename    WRITE setDefaultFilename    NOTIFY defaultFilenameChanged)
+	Q_PROPERTY(units::volume volume           READ defaultCylinder    WRITE setDefaultCylinder    NOTIFY defaultCylinderChanged)
+	Q_PROPERTY(units::temperature temperature READ timeFormat         WRITE setTimeFormat         NOTIFY timeFormatChanged)
+	Q_PROPERTY(units::weight weight           READ dateFormat         WRITE setDateFormat         NOTIFY dateFormatChanged)
+	Q_PROPERTY(units::vertical_speed_time vertical_speed_time READ dateFormatShort    WRITE setDateFormatShort    NOTIFY dateFormatShortChanged)
+	Q_PROPERTY(QString unit_system            READ unitSystem         WRITE setUnitSystem         NOTIFY unitSystemChanged)
+	Q_PROPERTY(bool coordinates_traditional   READ coordinatesTraditional WRITE setCoordinatesTraditional NOTIFY coordinatesTraditionalChanged)
+
+};
+
 class SettingsObjectWrapper : public QObject {
 	Q_OBJECT
 	Q_PROPERTY(QString divelist_font     READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
@@ -436,10 +451,6 @@ class SettingsObjectWrapper : public QObject {
 	ProxySettings *proxy;
 	CloudStorageSettings *cloud_storage;
 	DivePlannerSettings *planner_settings;
-	// Units
-	struct units units;
-
-
 
 public:
 	SettingsObjectWrapper(QObject *parent = NULL);
-- 
2.7.0

From 04b08094f3cd822c971663568c7dd46b77f5c0eb Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Thu, 14 Jan 2016 16:08:34 -0200
Subject: [PATCH 09/11] Dive Planner Settings QObjectification

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 319 ++++++++++++++++++++-
 .../subsurface-qt/SettingsObjectWrapper.h          |  80 +++++-
 2 files changed, 390 insertions(+), 9 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index dfc02e2..3deaafd 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -749,7 +749,6 @@ void CloudStorageSettings::setSavePasswordLocal(bool value)
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("save_password_local", value);
-	free(prefs.save_password_local);
 	prefs.save_password_local = value;
 	emit savePasswordLocalChanged(value);
 }
@@ -759,7 +758,6 @@ void CloudStorageSettings::setVerificationStatus(short value)
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("cloud_verification_status", value);
-	free(prefs.cloud_verification_status);
 	prefs.cloud_verification_status = value;
 	emit verificationStatusChanged(value);
 }
@@ -769,8 +767,7 @@ void CloudStorageSettings::setBackgroundSync(bool value)
 	QSettings s;
 	s.beginGroup(group);
 	s.setValue("cloud_background_sync", value);
-	free(prefs.cloud_background_sync);
-	prefs.cloud_background_sync = copy_string(qPrintable(value));
+	prefs.cloud_background_sync = value;
 	emit backgroundSyncChanged(value);
 }
 
@@ -786,3 +783,317 @@ void CloudStorageSettings::setCloudUrl(const QString& value) /* no-op */
 {
 	Q_UNUSED(value);
 }
+
+DivePlannerSettings::DivePlannerSettings(QObject *parent) :
+	QObject(parent),
+	group(QStringLiteral("Planner"))
+{
+}
+
+bool DivePlannerSettings::lastStop() const
+{
+	return prefs.last_stop;
+}
+
+bool DivePlannerSettings::verbatimPlan() const
+{
+	return prefs.verbatim_plan;
+}
+
+bool DivePlannerSettings::displayRuntime() const
+{
+	return prefs.display_runtime;
+}
+
+bool DivePlannerSettings::displayDuration() const
+{
+	return prefs.display_duration;
+}
+
+bool DivePlannerSettings::displayTransitions() const
+{
+	return prefs.display_transitions;
+}
+
+bool DivePlannerSettings::doo2breaks() const
+{
+	return prefs.doo2breaks;
+}
+
+bool DivePlannerSettings::dropStoneMode() const
+{
+	return prefs.drop_stone_mode;
+}
+
+bool DivePlannerSettings::safetyStop() const
+{
+	return prefs.safetystop;
+}
+
+bool DivePlannerSettings::switchAtRequiredStop() const
+{
+	return prefs.switch_at_req_stop;
+}
+
+int DivePlannerSettings::ascrate75() const
+{
+	return prefs.ascrate75;
+}
+
+int DivePlannerSettings::ascrate50() const
+{
+	return prefs.ascrate50;
+}
+
+int DivePlannerSettings::ascratestops() const
+{
+	return prefs.ascratestops;
+}
+
+int DivePlannerSettings::ascratelast6m() const
+{
+	return prefs.ascratelast6m;
+}
+
+int DivePlannerSettings::descrate() const
+{
+	return prefs.descrate;
+}
+
+int DivePlannerSettings::bottompo2() const
+{
+	return prefs.bottompo2;
+}
+
+int DivePlannerSettings::decopo2() const
+{
+	return prefs.decopo2;
+}
+
+int DivePlannerSettings::reserveGas() const
+{
+	return prefs.reserve_gas;
+}
+
+int DivePlannerSettings::minSwitchDuration() const
+{
+	return prefs.min_switch_duration;
+}
+
+int DivePlannerSettings::bottomSac() const
+{
+	return prefs.bottomsac;
+}
+
+int DivePlannerSettings::decoSac() const
+{
+	return prefs.decosac;
+}
+
+short DivePlannerSettings::conservatismLevel() const
+{
+	return prefs.conservatism_level;
+}
+
+deco_mode DivePlannerSettings::decoMode() const
+{
+	return prefs.deco_mode;
+}
+
+void DivePlannerSettings::setLastStop(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("last_stop", value);
+	prefs.last_stop = value;
+	emit lastStopChanged(value);
+}
+
+void DivePlannerSettings::setVerbatimPlan(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("verbatim_plan", value);
+	prefs.verbatim_plan = value;
+	emit verbatimPlanChanged(value);
+}
+
+void DivePlannerSettings::setDisplayRuntime(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("display_runtime", value);
+	prefs.display_runtime = value;
+	emit displayRuntimeChanged(value);
+}
+
+void DivePlannerSettings::setDisplayDuration(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("display_duration", value);
+	prefs.display_duration = value;
+	emit displayDurationChanged(value);
+}
+
+void DivePlannerSettings::setDisplayTransitions(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("display_transitions", value);
+	prefs.display_transitions = value;
+	emit displayTransitionsChanged(value);
+}
+
+void DivePlannerSettings::setDoo2breaks(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("doo2breaks", value);
+	prefs.doo2breaks = value;
+	emit doo2breaksChanged(value);
+}
+
+void DivePlannerSettings::setDropStoneMode(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("drop_stone_mode", value);
+	prefs.drop_stone_mode = value;
+	emit dropStoneModeChanged(value);
+}
+
+void DivePlannerSettings::setSafetyStop(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("safetystop", value);
+	prefs.safetystop = value;
+	emit safetyStopChanged(value);
+}
+
+void DivePlannerSettings::setSwitchAtRequiredStop(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("switch_at_req_stop", value);
+	prefs.switch_at_req_stop = value;
+	emit switchAtRequiredStopChanged(value);
+}
+
+void DivePlannerSettings::setAscrate75(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("ascrate75", value);
+	prefs.ascrate75 = value;
+	emit ascrate75Changed(value);
+}
+
+void DivePlannerSettings::setAscrate50(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("ascrate50", value);
+	prefs.ascrate50 = value;
+	emit ascrate50Changed(value);
+}
+
+void DivePlannerSettings::setAscratestops(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("ascratestops", value);
+	prefs.ascratestops = value;
+	emit ascratestopsChanged(value);
+}
+
+void DivePlannerSettings::setAscratelast6m(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("ascratelast6m", value);
+	prefs.ascratelast6m = value;
+	emit ascratelast6mChanged();
+}
+
+void DivePlannerSettings::setDescrate(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("descrate", value);
+	prefs.descrate = value;
+	emit descrateChanged(value);
+}
+
+void DivePlannerSettings::setBottompo2(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("bottompo2", value);
+	prefs.bottompo2 = value;
+	emit bottompo2Changed(value);
+}
+
+void DivePlannerSettings::setDecopo2(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("decopo2", value);
+	prefs.decopo2 = value;
+	emit decopo2Changed(value);
+}
+
+void DivePlannerSettings::setReserveGas(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("reserve_gas", value);
+	prefs.reserve_gas = value;
+	emit reserveGasChanged(value);
+}
+
+void DivePlannerSettings::setMinSwitchDuration(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("min_switch_duration", value);
+	prefs.min_switch_duration = value;
+	emit minSwitchDurationChanged(value);
+}
+
+void DivePlannerSettings::setBottomSac(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("bottomsac", value);
+	prefs.bottomsac = value;
+	emit bottomSacChanged(value);
+}
+
+void DivePlannerSettings::setSecoSac(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("decosac", value);
+	prefs.decosac = value;
+	emit decoSacChanged(value);
+}
+
+void DivePlannerSettings::setConservatismLevel(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("conservatism", value);
+	prefs.conservatism_level = value;
+	emit conservatismLevelChanged(value);
+}
+
+void DivePlannerSettings::setDecoMode(deco_mode value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("deco_mode", value);
+	prefs.deco_mode = value.;
+	emit decoModeChanged(value);
+}
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index cd58ab5..bf45a11 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -320,14 +320,84 @@ class DivePlannerSettings : public QObject {
 	Q_PROPERTY(int min_switch_duration  READ minSwitchDuration    WRITE setMinSwitchDuration    NOTIFY minSwitchDurationChanged)
 	Q_PROPERTY(int bottomsac            READ bottomSac            WRITE setBottomSac            NOTIFY bottomSacChanged)
 	Q_PROPERTY(int decosac              READ decoSac              WRITE setSecoSac              NOTIFY decoSacChanged)
-	Q_PROPERTY(short conservatism_level READ conservatism_level   WRITE setConservatismLevel    NOTIFY conservatismLevelChanged)
+	Q_PROPERTY(short conservatism_level READ conservatismLevel    WRITE setConservatismLevel    NOTIFY conservatismLevelChanged)
+	Q_PROPERTY(deco_mode decoMode       READ decoMode             WRITE setDecoMode             NOTIFY decoModeChanged)
+
+public:
+	DivePlannerSettings(QObject *parent = 0);
+	bool lastStop() const;
+	bool verbatimPlan() const;
+	bool displayRuntime() const;
+	bool displayDuration() const;
+	bool displayTransitions() const;
+	bool doo2breaks() const;
+	bool dropStoneMode() const;
+	bool safetyStop() const;
+	bool switchAtRequiredStop() const;
+	int ascrate75() const;
+	int ascrate50() const;
+	int ascratestops() const;
+	int ascratelast6m() const;
+	int descrate() const;
+	int bottompo2() const;
+	int decopo2() const;
+	int reserveGas() const;
+	int minSwitchDuration() const;
+	int bottomSac() const;
+	int decoSac() const;
+	short conservatismLevel() const;
+	deco_mode decoMode() const;
+
+public slots:
+	void setLastStop(bool value);
+	void setVerbatimPlan(bool value);
+	void setDisplayRuntime(bool value);
+	void setDisplayDuration(bool value);
+	void setDisplayTransitions(bool value);
+	void setDoo2breaks(bool value);
+	void setDropStoneMode(bool value);
+	void setSafetyStop(bool value);
+	void setSwitchAtRequiredStop(bool value);
+	void setAscrate75(int value);
+	void setAscrate50(int value);
+	void setAscratestops(int value);
+	void setAscratelast6m(int value);
+	void setDescrate(int value);
+	void setBottompo2(int value);
+	void setDecopo2(int value);
+	void setReserveGas(int value);
+	void setMinSwitchDuration(int value);
+	void setBottomSac(int value);
+	void setSecoSac(int value);
+	void setConservatismLevel(int value);
+	void setDecoMode(deco_mode value);
+
+signals:
+	void lastStopChanged(bool value);
+	void verbatimPlanChanged(bool value);
+	void displayRuntimeChanged(bool value);
+	void displayDurationChanged(bool value);
+	void displayTransitionsChanged(bool value);
+	void doo2breaksChanged(bool value);
+	void dropStoneModeChanged(bool value);
+	void safetyStopChanged(bool value);
+	void switchAtRequiredStopChanged(bool value);
+	void ascrate75Changed(int value);
+	void ascrate50Changed(int value);
+	void ascratestopsChanged(int value);
+	void ascratelast6mChanged(int value);
+	void descrateChanged(int value);
+	void bottompo2Changed(int value);
+	void decopo2Changed(int value);
+	void reserveGasChanged(int value);
+	void minSwitchDurationChanged(int value);
+	void bottomSacChanged(int value);
+	void decoSacChanged(int value);
+	void conservatismLevelChanged(int value);
+	void decoModeChanged(deco_mode value);
 
 private:
 	QString group;
-
-	// Decompression Mode
-	enum deco_mode deco_mode;
-};
 };
 /* 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.
-- 
2.7.0

From 30b8a0b73aa17317248f5ef954104475aee10628 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Thu, 14 Jan 2016 14:00:41 -0200
Subject: [PATCH 08/11] Added a new class, PlannerSettings

We probably wanna change that on the prefs struct too.

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 .../subsurface-qt/SettingsObjectWrapper.h          | 58 +++++++++++++---------
 1 file changed, 34 insertions(+), 24 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 9133cb1..cd58ab5 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -299,9 +299,40 @@ private:
 	QString group;
 };
 
+class DivePlannerSettings : public QObject {
+	Q_PROPERTY(bool last_stop           READ lastStop             WRITE setLastStop             NOTIFY lastStopChanged)
+	Q_PROPERTY(bool verbatim_plan       READ verbatimPlan         WRITE setVerbatimPlan         NOTIFY verbatimPlanChanged)
+	Q_PROPERTY(bool display_runtime     READ displayRuntime       WRITE setDisplayRuntime       NOTIFY displayRuntimeChanged)
+	Q_PROPERTY(bool display_duration    READ displayDuration      WRITE setDisplayDuration      NOTIFY displayDurationChanged)
+	Q_PROPERTY(bool display_transitions READ displayTransitions   WRITE setDisplayTransitions   NOTIFY displayTransitionsChanged)
+	Q_PROPERTY(bool doo2breaks          READ doo2breaks           WRITE setDoo2breaks           NOTIFY doo2breaksChanged)
+	Q_PROPERTY(bool drop_stone_mode     READ dropStoneMode        WRITE setDropStoneMode        NOTIFY dropStoneModeChanged)
+	Q_PROPERTY(bool safetystop          READ safetyStop           WRITE setSafetyStop           NOTIFY safetyStopChanged)
+	Q_PROPERTY(bool switch_at_req_stop  READ switchAtRequiredStop WRITE setSwitchAtRequiredStop NOTIFY switchAtRequiredStopChanged)
+	Q_PROPERTY(int ascrate75            READ ascrate75            WRITE setAscrate75            NOTIFY ascrate75Changed)
+	Q_PROPERTY(int ascrate50            READ ascrate50            WRITE setAscrate50            NOTIFY ascrate50Changed)
+	Q_PROPERTY(int ascratestops         READ ascratestops         WRITE setAscratestops         NOTIFY ascratestopsChanged)
+	Q_PROPERTY(int ascratelast6m        READ ascratelast6m        WRITE setAscratelast6m        NOTIFY ascratelast6mChanged)
+	Q_PROPERTY(int descrate             READ descrate             WRITE setDescrate             NOTIFY descrateChanged)
+	Q_PROPERTY(int bottompo2            READ bottompo2            WRITE setBottompo2            NOTIFY bottompo2Changed)
+	Q_PROPERTY(int decopo2              READ decopo2              WRITE setDecopo2              NOTIFY decopo2Changed)
+	Q_PROPERTY(int reserve_gas          READ reserveGas           WRITE setReserveGas           NOTIFY reserveGasChanged)
+	Q_PROPERTY(int min_switch_duration  READ minSwitchDuration    WRITE setMinSwitchDuration    NOTIFY minSwitchDurationChanged)
+	Q_PROPERTY(int bottomsac            READ bottomSac            WRITE setBottomSac            NOTIFY bottomSacChanged)
+	Q_PROPERTY(int decosac              READ decoSac              WRITE setSecoSac              NOTIFY decoSacChanged)
+	Q_PROPERTY(short conservatism_level READ conservatism_level   WRITE setConservatismLevel    NOTIFY conservatismLevelChanged)
+
+private:
+	QString group;
+
+	// Decompression Mode
+	enum deco_mode deco_mode;
+};
+};
 /* 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 SettingsObjectWrapper : public QObject {
 	Q_OBJECT
 	Q_PROPERTY(QString divelist_font     READ divelistFont       WRITE setDivelistFont       NOTIFY divelistFontChanged)
@@ -318,33 +349,12 @@ 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 ascrate75            READ ascrate75       WRITE setAscrate75       NOTIFY ascrate75Changed)
-	Q_PROPERTY(int ascrate50            READ ascrate50       WRITE setAscrate50       NOTIFY ascrate50Changed)
-	Q_PROPERTY(int ascratestops         READ ascratestops    WRITE setAscratestops    NOTIFY ascratestopsChanged)
-	Q_PROPERTY(int ascratelast6m        READ ascratelast6m   WRITE setAscratelast6m   NOTIFY ascratelast6mChanged)
-	Q_PROPERTY(int descrate             READ descrate        WRITE setDescrate        NOTIFY descrateChanged)
-	Q_PROPERTY(int bottompo2            READ bottompo2       WRITE setBottompo2       NOTIFY bottompo2Changed)
-	Q_PROPERTY(int decopo2              READ decopo2         WRITE setDecopo2         NOTIFY decopo2Changed)
-	Q_PROPERTY(bool doo2breaks          READ doo2breaks      WRITE setDoo2breaks      NOTIFY doo2breaksChanged)
-	Q_PROPERTY(bool drop_stone_mode     READ dropStoneMode   WRITE setDropStoneMode   NOTIFY dropStoneModeChanged)
-	Q_PROPERTY(bool last_stop           READ lastStop        WRITE setLastStop        NOTIFY lastStopChanged)
-	Q_PROPERTY(bool verbatim_plan       READ verbatimPlan    WRITE setVerbatimPlan    NOTIFY verbatimPlanChanged)
-	Q_PROPERTY(bool display_runtime          READ displayRuntime        WRITE setDisplayRuntime        NOTIFY displayRuntimeChanged)
-	Q_PROPERTY(bool display_duration         READ displayDuration       WRITE setDisplayDuration       NOTIFY displayDurationChanged)
-	Q_PROPERTY(bool display_transitions      READ displayTransitions    WRITE setDisplayTransitions    NOTIFY displayTransitionsChanged)
-	Q_PROPERTY(bool safetystop               READ safetyStop            WRITE setSafetyStop            NOTIFY safetyStopChanged)
-	Q_PROPERTY(bool switch_at_req_stop       READ switchAtRequiredStop  WRITE setSwitchAtRequiredStop  NOTIFY switchAtRequiredStopChanged)
-	Q_PROPERTY(int reserve_gas               READ reserveGas            WRITE setReserveGas            NOTIFY reserveGasChanged)
-	Q_PROPERTY(int min_switch_duration       READ minSwitchDuration     WRITE setMinSwitchDuration     NOTIFY minSwitchDurationChanged)
-	Q_PROPERTY(int bottomsac                 READ bottomSac             WRITE setBottomSac             NOTIFY bottomSacChanged)
-	Q_PROPERTY(int decosac                   READ decoSac               WRITE setSecoSac               NOTIFY decoSacChanged)
 	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(short conservatism_level      READ conservatism_level    WRITE setConservatismLevel     NOTIFY conservatismLevelChanged)
 	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)
@@ -354,12 +364,12 @@ class SettingsObjectWrapper : public QObject {
 	FacebookSettings *facebook;
 	GeocodingPreferences *geocoding;
 	ProxySettings *proxy;
+	CloudStorageSettings *cloud_storage;
+	DivePlannerSettings *planner_settings;
 	// Units
 	struct units units;
 
-	// Decompression Mode
-	enum deco_mode deco_mode;
-};
+
 
 public:
 	SettingsObjectWrapper(QObject *parent = NULL);
-- 
2.7.0

From 74fbeb9537271bb1cea4b787ebf48593d8270793 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Thu, 14 Jan 2016 13:38:35 -0200
Subject: [PATCH 07/11] Cloud Storage Settings Objectified

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 145 +++++++++++++++++++++
 .../subsurface-qt/SettingsObjectWrapper.h          |  42 +++++-
 2 files changed, 184 insertions(+), 3 deletions(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index ea91e43..dfc02e2 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -641,3 +641,148 @@ void ProxySettings::setPass(const QString& value)
 	prefs.proxy_pass = copy_string(qPrintable(value));
 	emit passChanged(value);
 }
+
+CloudStorageSettings::CloudStorageSettings(QObject *parent) :
+	group(QStringLiteral("CloudStorage"))
+{
+
+}
+
+QString CloudStorageSettings::password() const
+{
+	return QString(prefs.cloud_storage_password);
+}
+
+QString CloudStorageSettings::newPassword() const
+{
+	return QString(prefs.cloud_storage_newpassword);
+}
+
+QString CloudStorageSettings::email() const
+{
+	return QString(prefs.cloud_storage_email);
+}
+
+QString CloudStorageSettings::emailEncoded() const
+{
+	return QString(prefs.cloud_storage_email_encoded);
+}
+
+bool CloudStorageSettings::savePasswordLocal() const
+{
+	return prefs.save_password_local;
+}
+
+short CloudStorageSettings::verificationStatus() const
+{
+	return prefs.cloud_verification_status;
+}
+
+bool CloudStorageSettings::backgroundSync() const
+{
+	return prefs.cloud_background_sync;
+}
+
+QString CloudStorageSettings::userId() const
+{
+	return QString(prefs.userid);
+}
+
+QString CloudStorageSettings::baseUrl() const
+{
+	return QString(prefs.cloud_base_url);
+}
+
+QString CloudStorageSettings::gitUrl() const
+{
+	return QString(prefs.cloud_git_url);
+}
+
+void CloudStorageSettings::setPassword(const QString& value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("password", value);
+	free(prefs.proxy_pass);
+	prefs.proxy_pass = copy_string(qPrintable(value));
+	emit passwordChanged(value);
+}
+
+void CloudStorageSettings::setNewPassword(const QString& value)
+{
+	/*TODO: This looks like wrong, but 'new password' is not saved on disk, why it's on prefs? */
+	free(prefs.cloud_storage_newpassword);
+	prefs.cloud_storage_newpassword = copy_string(qPrintable(value));
+	emit newPasswordChanged(value);
+}
+
+void CloudStorageSettings::setEmail(const QString& value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("email", value);
+	free(prefs.cloud_storage_email);
+	prefs.cloud_storage_email = copy_string(qPrintable(value));
+	emit emailChanged(value);
+}
+
+void CloudStorageSettings::setUserId(const QString& value)
+{
+	//WARNING: UserId is stored outside of any group, but it belongs to Cloud Storage.
+	QSettings s;
+	s.setValue("subsurface_webservice_uid", value);
+	free(prefs.userid);
+	prefs.userid = copy_string(qPrintable(value));
+	emit userIdChanged(value);
+}
+
+void CloudStorageSettings::setEmailEncoded(const QString& value)
+{
+	/*TODO: This looks like wrong, but 'email encoded' is not saved on disk, why it's on prefs? */
+	free(prefs.cloud_storage_email_encoded);
+	prefs.cloud_storage_email_encoded = copy_string(qPrintable(value));
+	emit emailEncodedChanged(value);
+}
+
+void CloudStorageSettings::setSavePasswordLocal(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("save_password_local", value);
+	free(prefs.save_password_local);
+	prefs.save_password_local = value;
+	emit savePasswordLocalChanged(value);
+}
+
+void CloudStorageSettings::setVerificationStatus(short value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("cloud_verification_status", value);
+	free(prefs.cloud_verification_status);
+	prefs.cloud_verification_status = value;
+	emit verificationStatusChanged(value);
+}
+
+void CloudStorageSettings::setBackgroundSync(bool value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("cloud_background_sync", value);
+	free(prefs.cloud_background_sync);
+	prefs.cloud_background_sync = copy_string(qPrintable(value));
+	emit backgroundSyncChanged(value);
+}
+
+void CloudStorageSettings::setBaseUrl(const QString& value)
+{
+	free(prefs.cloud_base_url);
+	free(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);
+}
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 0a2da44..9133cb1 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -253,11 +253,50 @@ class CloudStorageSettings : public QObject {
 	Q_PROPERTY(QString newpassword       READ newPassword        WRITE setNewPassword        NOTIFY newPasswordChanged)
 	Q_PROPERTY(QString email             READ email              WRITE setEmail              NOTIFY emailChanged)
 	Q_PROPERTY(QString email_encoded     READ emailEncoded       WRITE setEmailEncoded       NOTIFY emailEncodedChanged)
+	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 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)
 public:
 	CloudStorageSettings(QObject *parent);
+	QString password() const;
+	QString newPassword() const;
+	QString email() const;
+	QString emailEncoded() const;
+	QString userId() const;
+	QString baseUrl() const;
+	QString gitUrl() const;
+	bool savePasswordLocal() const;
+	short verificationStatus() const;
+	bool backgroundSync() const;
+
+public slots:
+	void setPassword(const QString& value);
+	void setNewPassword(const QString& value);
+	void setEmail(const QString& value);
+	void setEmailEncoded(const QString& value);
+	void setUserId(const QString& value);
+	void setBaseUrl(const QString& value);
+	void setCloudUrl(const QString& value);
+	void setSavePasswordLocal(bool value);
+	void setVerificationStatus(short value);
+	void setBackgroundSync(bool value);
+
+signals:
+	void passwordChanged(const QString& value);
+	void newPasswordChanged(const QString& value);
+	void emailChanged(const QString& value);
+	void emailEncodedChanged(const QString& value);
+	void userIdChanged(const QString& value);
+	void baseUrlChanged(const QString& value);
+	void gitUrlChanged(const QString& value);
+	void savePasswordLocalChanged(bool value);
+	void verificationStatusChanged(short value);
+	void backgroundSyncChanged(bool value);
+private:
+	QString group;
 };
 
 /* Monster class, should be breaken into a few more understandable classes later, wich will be easy to do:
@@ -268,8 +307,6 @@ class SettingsObjectWrapper : public QObject {
 	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 cloud_base_url    READ cloudBaseUrl       WRITE setCloudBaseURL       NOTIFY cloudBaseUrlChanged)
-	Q_PROPERTY(QString cloud_git_url     READ cloudGitUrl        WRITE setCloudGitUrl        NOTIFY cloudGitUrlChanged)
 	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)
@@ -281,7 +318,6 @@ 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(QString userid           READ userId          WRITE setUserId          NOTIFY userIdChanged)
 	Q_PROPERTY(int ascrate75            READ ascrate75       WRITE setAscrate75       NOTIFY ascrate75Changed)
 	Q_PROPERTY(int ascrate50            READ ascrate50       WRITE setAscrate50       NOTIFY ascrate50Changed)
 	Q_PROPERTY(int ascratestops         READ ascratestops    WRITE setAscratestops    NOTIFY ascratestopsChanged)
-- 
2.7.0

From 104310bd11f9883a957c4e71409e7206c43d7820 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <[email protected]>
Date: Thu, 14 Jan 2016 11:55:31 -0200
Subject: [PATCH 06/11] Finish Network Settings

Signed-off-by: Tomaz Canabrava <[email protected]>
---
 .../subsurface-qt/SettingsObjectWrapper.cpp        | 94 +++++++++++++++++++++-
 .../subsurface-qt/SettingsObjectWrapper.h          | 11 +++
 2 files changed, 104 insertions(+), 1 deletion(-)

diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
index 73137b8..ea91e43 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -548,4 +548,96 @@ void GeocodingPreferences::setThirdTaxonomyCategory(taxonomy_category value)
 	s.setValue("cat2", value);
 	prefs.show_average_depth = value;
 	emit thirdTaxonomyCategoryChanged(value);
-}
\ No newline at end of file
+}
+
+ProxySettings::ProxySettings(QObject *parent) :
+	group(QStringLiteral("Network"))
+{
+}
+
+int ProxySettings::type() const
+{
+	return prefs.proxy_type;
+}
+
+QString ProxySettings::host() const
+{
+	return prefs.proxy_host;
+}
+
+int ProxySettings::port() const
+{
+	return prefs.proxy_port;
+}
+
+short ProxySettings::auth() const
+{
+	return prefs.proxy_auth;
+}
+
+QString ProxySettings::user() const
+{
+	return prefs.proxy_user;
+}
+
+QString ProxySettings::pass() const
+{
+	return prefs.proxy_pass;
+}
+
+void ProxySettings::setType(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("proxy_type", value);
+	prefs.proxy_type = value;
+	emit typeChanged(value);
+}
+
+void ProxySettings::setHost(const QString& value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("proxy_host", value);
+	free(prefs.proxy_host);
+	prefs.proxy_host = copy_string(qPrintable(value));;
+	emit hostChanged(value);
+}
+
+void ProxySettings::setPort(int value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("proxy_port", value);
+	prefs.proxy_port = value;
+	emit portChanged(value);
+}
+
+void ProxySettings::setAuth(short value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("proxy_auth", value);
+	prefs.proxy_auth = value;
+	emit authChanged(value);
+}
+
+void ProxySettings::setUser(const QString& value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("proxy_user", value);
+	free(prefs.proxy_user);
+	prefs.proxy_user = copy_string(qPrintable(value));
+	emit userChanged(value);
+}
+
+void ProxySettings::setPass(const QString& value)
+{
+	QSettings s;
+	s.beginGroup(group);
+	s.setValue("proxy_pass", value);
+	free(prefs.proxy_pass);
+	prefs.proxy_pass = copy_string(qPrintable(value));
+	emit passChanged(value);
+}
diff --git a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
index 6098b0d..0a2da44 100644
--- a/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
+++ b/subsurface-core/subsurface-qt/SettingsObjectWrapper.h
@@ -218,6 +218,7 @@ class ProxySettings : public QObject {
 	Q_PROPERTY(short auth   READ auth WRITE setAuth NOTIFY authChanged)
 	Q_PROPERTY(QString user READ user WRITE setUser NOTIFY userChanged)
 	Q_PROPERTY(QString pass READ pass WRITE setPass NOTIFY passChanged)
+
 public:
 	ProxySettings(QObject *parent);
 	int type() const;
@@ -234,6 +235,16 @@ public slots:
 	void setAuth(short value);
 	void setUser(const QString& value);
 	void setPass(const QString& value);
+
+signals:
+	void typeChanged(int value);
+	void hostChanged(const QString& value);
+	void portChanged(int value);
+	void authChanged(short value);
+	void userChanged(const QString& value);
+	void passChanged(const QString& value);
+private:
+	QString group;
 };
 
 class CloudStorageSettings : public QObject {
-- 
2.7.0

_______________________________________________
subsurface mailing list
[email protected]
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to