and I ran....
I ran so far away...
I just ran...
I ran all night and day...
From f5ef5826d6787246d08e34b88ebbd7c9b218fa93 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tcanabr...@kde.org>
Date: Thu, 6 Feb 2014 15:38:32 -0200
Subject: [PATCH 5/5] Process events just after starting the StateMachine

This is needed because of a braindead issue on the Qt event
loop:

http://stackoverflow.com/questions/10059721/qt-qstatemachine-sync-problems-initial-state-not-set-on-started-signali

For the "event 1" to be received, the machine must already be
in a state that react to that signal. Even it was a queued
connection, the slot would be queued but only after the signal
 was received, which it isn't since there is no connection
yet at that point.

To solve your problem, you can wait for the machine is in
"state A" before emitting the signal:

machine->start();
qApp->processEvents();

Signed-off-by: Tomaz Canabrava <tcanabr...@kde.org>
---
 qt-ui/profile/profilewidget2.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 3f6be03..4ebc8c3 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -292,6 +292,7 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 
 	// Starting the transitions:
 	stateMachine->start();
+	qApp->processEvents();
 	scene()->installEventFilter(this);
 #ifndef QT_NO_DEBUG
 	QTableView *diveDepthTableView = new QTableView();
-- 
1.8.5.3

From 4ffd49efe8d7131563291f3df29858008e8b0e7c Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tcanabr...@kde.org>
Date: Thu, 6 Feb 2014 15:37:56 -0200
Subject: [PATCH 4/5] Removed a lot of unused code.

This will probably be added back in the future, but for now
they have no use and it was making me nauseaus.

Signed-off-by: Tomaz Canabrava <tcanabr...@kde.org>
---
 qt-ui/profile/profilewidget2.cpp | 77 +++++-----------------------------------
 qt-ui/profile/profilewidget2.h   |  7 ----
 2 files changed, 8 insertions(+), 76 deletions(-)

diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 251ea38..3f6be03 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -208,44 +208,17 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 	// TopLevel States
 	QState *emptyState = new QState();
 	QState *profileState = new QState();
-	QState *editState = new QState();
-	QState *addState = new QState();
-	QState *planState = new QState();
 
 	// Conections:
 	stateMachine->addState(emptyState);
 	stateMachine->addState(profileState);
-	stateMachine->addState(editState);
-	stateMachine->addState(addState);
-	stateMachine->addState(planState);
 	stateMachine->setInitialState(emptyState);
 
 	// All Empty State Connections.
 	QSignalTransition *tEmptyToProfile = emptyState->addTransition(this, SIGNAL(startProfileState()), profileState);
-	QSignalTransition *tEmptyToAdd = emptyState->addTransition(this, SIGNAL(startAddState()), addState);
-	QSignalTransition *tEmptyToPlan = emptyState->addTransition(this, SIGNAL(startPlanState()), planState);
-
-	// All Plan Connections
-	QSignalTransition *tPlanToEmpty = planState->addTransition(this, SIGNAL(startEmptyState()), emptyState);
-	QSignalTransition *tPlanToProfile = planState->addTransition(this, SIGNAL(startProfileState()), profileState);
-	QSignalTransition *tPlanToAdd = planState->addTransition(this, SIGNAL(startAddState()), addState);
-
-	// All Add Dive Connections
-	QSignalTransition *tAddToEmpty = addState->addTransition(this, SIGNAL(startEmptyState()), emptyState);
-	QSignalTransition *tAddToPlan = addState->addTransition(this, SIGNAL(startPlanState()), planState);
-	QSignalTransition *tAddToProfile = addState->addTransition(this, SIGNAL(startProfileState()), profileState);
 
 	// All Profile State Connections
-	QSignalTransition *tProfileToEdit = profileState->addTransition(this, SIGNAL(startEditState()), editState);
 	QSignalTransition *tProfileToEmpty = profileState->addTransition(this, SIGNAL(startEmptyState()), emptyState);
-	QSignalTransition *tProfileToPlan = profileState->addTransition(this, SIGNAL(startPlanState()), planState);
-	QSignalTransition *tProfileToAdd = profileState->addTransition(this, SIGNAL(startAddState()), addState);
-
-	// All "Edit" state connections
-	QSignalTransition *tEditToEmpty = editState->addTransition(this, SIGNAL(startEmptyState()), emptyState);
-	QSignalTransition *tEditToPlan = editState->addTransition(this, SIGNAL(startPlanState()), planState);
-	QSignalTransition *tEditToProfile = editState->addTransition(this, SIGNAL(startProfileState()), profileState);
-	QSignalTransition *tEditToAdd = editState->addTransition(this, SIGNAL(startAddState()), addState);
 
 	// Constants:
 	const int backgroundOnCanvas = 0;
@@ -253,7 +226,7 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 	const int profileYAxisOnCanvas = 3;
 	const int profileYAxisOffCanvas = profileYAxis->boundingRect().width() - 10;
 	// unused so far:
-	// const int gasYAxisOnCanvas = gasYAxis->boundingRect().width();
+	const int gasYAxisOnCanvas = gasYAxis->boundingRect().width();
 	const int depthControllerOnCanvas = sceneRect().height() - depthController->boundingRect().height();
 	const int timeControllerOnCanvas = sceneRect().height() - timeController->boundingRect().height();
 	const int gasYAxisOffCanvas = gasYAxis->boundingRect().width() - 10;
@@ -280,7 +253,7 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 	profileState->assignProperty(this, "backgroundBrush", getColor(::BACKGROUND));
 	profileState->assignProperty(background, "y",  backgroundOffCanvas);
 	profileState->assignProperty(profileYAxis, "x", profileYAxisOnCanvas);
-	//profileState->assignProperty(profileYAxis, "line", profileYAxisExpanded);
+	profileState->assignProperty(profileYAxis, "line", profileYAxisExpanded);
 	profileState->assignProperty(gasYAxis, "x", profileYAxisOnCanvas);
 	profileState->assignProperty(timeAxis, "y", timeAxisOnCanvas);
 	profileState->assignProperty(depthController, "y", depthControllerOffCanvas);
@@ -288,36 +261,6 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 	profileState->assignProperty(cartesianPlane, "verticalLine", profileYAxisExpanded);
 	profileState->assignProperty(cartesianPlane, "horizontalLine", timeAxis->line());
 
-	// Edit, everything but the background and gasYAxis are shown.
-	editState->assignProperty(this, "backgroundBrush", QBrush(Qt::darkGray));
-	editState->assignProperty(background, "y",  backgroundOffCanvas);
-	editState->assignProperty(profileYAxis, "x", profileYAxisOnCanvas);
-	editState->assignProperty(profileYAxis, "line", profileYAxisExpanded);
-	editState->assignProperty(gasYAxis, "x", gasYAxisOffCanvas);
-	editState->assignProperty(timeAxis, "y", timeAxisEditMode);
-	editState->assignProperty(depthController, "y", depthControllerOnCanvas);
-	editState->assignProperty(timeController, "y", timeControllerOnCanvas);
-
-	// Add, everything but the background and gasYAxis are shown.
-	addState->assignProperty(this, "backgroundBrush", QBrush(Qt::darkGray));
-	addState->assignProperty(background, "y",  backgroundOffCanvas);
-	addState->assignProperty(profileYAxis, "x", profileYAxisOnCanvas);
-	addState->assignProperty(profileYAxis, "rect", profileYAxisExpanded);
-	addState->assignProperty(gasYAxis, "x", gasYAxisOffCanvas);
-	addState->assignProperty(timeAxis, "y", timeAxisEditMode);
-	addState->assignProperty(depthController, "y", depthControllerOnCanvas);
-	addState->assignProperty(timeController, "y", timeControllerOnCanvas);
-
-	// Plan, everything but the background and gasYAxis are shown.
-	planState->assignProperty(this, "backgroundBrush", QBrush(Qt::darkGray));
-	planState->assignProperty(background, "y",  backgroundOffCanvas);
-	planState->assignProperty(profileYAxis, "x", profileYAxisOnCanvas);
-	planState->assignProperty(profileYAxis, "line", profileYAxisExpanded);
-	planState->assignProperty(gasYAxis, "x", gasYAxisOffCanvas);
-	planState->assignProperty(timeAxis, "y", timeAxisEditMode);
-	planState->assignProperty(depthController, "y", depthControllerOnCanvas);
-	planState->assignProperty(timeController, "y", timeControllerOnCanvas);
-
 	// All animations for the State Transitions.
 	QPropertyAnimation *backgroundYAnim = new QPropertyAnimation(background, "y");
 	QPropertyAnimation *depthAxisAnim = new QPropertyAnimation(profileYAxis, "x");
@@ -329,9 +272,10 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 
 // Animations
 	QList<QSignalTransition*> transitions;
-	transitions << tAddToEmpty << tAddToPlan << tAddToProfile << tEditToAdd << tEditToEmpty << tEditToPlan <<
-		       tEditToProfile << tEmptyToAdd << tEmptyToPlan << tEmptyToProfile << tProfileToAdd <<
-		       tProfileToEdit << tProfileToEmpty << tProfileToPlan << tPlanToAdd << tPlanToEmpty << tPlanToProfile;
+	transitions
+		<< tEmptyToProfile
+		<< tProfileToEmpty;
+
 	Q_FOREACH(QSignalTransition *s, transitions) {
 		s->addAnimation(backgroundYAnim);
 		s->addAnimation(depthAxisAnim);
@@ -345,9 +289,6 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
 		// Configuration so we can search for the States later, and it helps debugging.
 	emptyState->setObjectName("Empty State");
 	profileState->setObjectName("Profile State");
-	addState->setObjectName("Add State");
-	editState->setObjectName("Edit State");
-	planState->setObjectName("Plan State");
 
 	// Starting the transitions:
 	stateMachine->start();
@@ -368,6 +309,8 @@ void ProfileWidget2::plotDives(QList<dive*> dives)
 	if (!d)
 		return;
 
+		emit startProfileState();
+
 	// Here we need to probe for the limits of the dive.
 	// There's already a function that does exactly that,
 	// but it's using the graphics context, and I need to
@@ -441,7 +384,6 @@ void ProfileWidget2::plotDives(QList<dive*> dives)
 
 	diveComputerText->setText(currentdc->model);
 	diveComputerText->animateMoveTo(1 , sceneRect().height());
-	emit startProfileState();
 }
 
 void ProfileWidget2::settingsChanged()
@@ -455,9 +397,6 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent* event)
 	QMenu m;
 	m.addAction("Set Empty", this, SIGNAL(startEmptyState()));
 	m.addAction("Set Profile", this, SIGNAL(startProfileState()));
-	m.addAction("Set Add", this, SIGNAL(startAddState()));
-	m.addAction("Set Edit", this, SIGNAL(startEditState()));
-	m.addAction("Set Plan", this, SIGNAL(startPlanState()));
 	m.exec(event->globalPos());
 }
 
diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h
index d2fbb2b..631a805 100644
--- a/qt-ui/profile/profilewidget2.h
+++ b/qt-ui/profile/profilewidget2.h
@@ -63,14 +63,7 @@ protected:
 
 signals:
 	void startProfileState();
-	void startAddState();
-	void startPlanState();
 	void startEmptyState();
-	void startEditState();
-	void startHideGasState();
-	void startShowGasState();
-	void startShowTissueState();
-	void startHideTissueState();
 private:
 	DivePlotDataModel *dataModel;
 	State currentState;
-- 
1.8.5.3

From 1894d3c37a7136b4b46a31147c2c1ec9d6f37f88 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tcanabr...@kde.org>
Date: Thu, 6 Feb 2014 14:59:06 -0200
Subject: [PATCH 3/5] Load options as soon as the progrm starts

Populate the status of the profile tool box as soon as the program
starts.

Signed-off-by: Tomaz Canabrava <tcanabr...@kde.org>
---
 qt-ui/mainwindow.cpp | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index a44247a..6d7123a 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -591,6 +591,22 @@ void MainWindow::readSettings()
 	QFont defaultFont = s.value("divelist_font", qApp->font()).value<QFont>();
 	defaultFont.setPointSizeF(s.value("font_size", qApp->font().pointSizeF()).toFloat());
 	qApp->setFont(defaultFont);
+	s.endGroup();
+
+	s.beginGroup("TecDetails");
+	ui.profCalcAllTissues->setChecked(s.value("calcalltissues").toBool());
+	ui.profCalcCeiling->setChecked(s.value("calcceiling").toBool());
+	ui.profDcCeiling->setChecked(s.value("dcceiling").toBool());
+	ui.profEad->setChecked(s.value("ead").toBool());
+	ui.profIncrement3m->setChecked(s.value("calcceiling3m").toBool());
+	ui.profMod->setChecked(s.value("mod").toBool());
+	ui.profNtl_tts->setChecked(s.value("calcndltts").toBool());
+	ui.profPhe->setChecked(s.value("phegraph").toBool());
+	ui.profPn2->setChecked(s.value("pn2graph").toBool());
+	ui.profPO2->setChecked(s.value("po2graph").toBool());
+	ui.profRuler->setChecked(s.value("rulergraph").toBool());
+	ui.profSAC->setChecked(s.value("show_sac").toBool());
+
 }
 
 void MainWindow::writeSettings()
-- 
1.8.5.3

From a009b85817dd7f1f41d9c84340f89395d6985cbb Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tcanabr...@kde.org>
Date: Thu, 6 Feb 2014 14:51:20 -0200
Subject: [PATCH 2/5] Save the old pref system when changing the new one

Since we have now a mix of old / new prefs, remember
to change both when we alter something.

Signed-off-by: Tomaz Canabrava <tcanabr...@kde.org>
---
 qt-ui/mainwindow.cpp | 16 ++++++++++++----
 qt-ui/mainwindow.h   |  1 -
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index c9528f9..a44247a 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -826,42 +826,52 @@ void MainWindow::editCurrentDive()
 
 void MainWindow::on_profCalcAllTissues_clicked(bool triggered)
 {
+	prefs.calc_all_tissues = triggered;
 	TOOLBOX_PREF_PROFILE(calcalltissues);
 }
 void MainWindow::on_profCalcCeiling_clicked(bool triggered)
 {
+	prefs.profile_calc_ceiling = triggered;
 	TOOLBOX_PREF_PROFILE(calcceiling);
 }
 void MainWindow::on_profDcCeiling_clicked(bool triggered)
 {
+	prefs.profile_dc_ceiling = triggered;
 	TOOLBOX_PREF_PROFILE(dcceiling);
 }
 void MainWindow::on_profEad_clicked(bool triggered)
 {
+	prefs.ead = triggered;
 	TOOLBOX_PREF_PROFILE(ead);
 }
 void MainWindow::on_profIncrement3m_clicked(bool triggered)
 {
+	prefs.calc_ceiling_3m_incr = triggered;
 	TOOLBOX_PREF_PROFILE(calcceiling3m);
 }
 void MainWindow::on_profMod_clicked(bool triggered)
 {
+	prefs.mod = triggered;
 	TOOLBOX_PREF_PROFILE(mod);
 }
 void MainWindow::on_profNtl_tts_clicked(bool triggered)
 {
+	prefs.calc_ndl_tts = triggered;
 	TOOLBOX_PREF_PROFILE(calcndltts);
 }
 void MainWindow::on_profPhe_clicked(bool triggered)
 {
+	prefs.pp_graphs.phe = triggered;
 	TOOLBOX_PREF_PROFILE(phegraph);
 }
 void MainWindow::on_profPn2_clicked(bool triggered)
 {
+	prefs.pp_graphs.pn2 = triggered;
 	TOOLBOX_PREF_PROFILE(pn2graph);
 }
 void MainWindow::on_profPO2_clicked(bool triggered)
 {
+	prefs.pp_graphs.po2 = triggered;
 	TOOLBOX_PREF_PROFILE(po2graph);
 }
 void MainWindow::on_profRuler_clicked(bool triggered)
@@ -870,10 +880,8 @@ void MainWindow::on_profRuler_clicked(bool triggered)
 }
 void MainWindow::on_profSAC_clicked(bool triggered)
 {
+	prefs.show_sac = triggered;
 	TOOLBOX_PREF_PROFILE(show_sac);
 }
-void MainWindow::on_profUnusedTanks_clicked(bool triggered)
-{
-	TOOLBOX_PREF_PROFILE(display_unused_tanks);
-}
+
 #undef TOOLBOX_PREF_PROFILE
\ No newline at end of file
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index c9d2005..2d91745 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -118,7 +118,6 @@ private slots:
 	void on_profPn2_clicked(bool triggered);
 	void on_profRuler_clicked(bool triggered);
 	void on_profSAC_clicked(bool triggered);
-	void on_profUnusedTanks_clicked(bool triggered);
 
 protected:
 	void closeEvent(QCloseEvent *);
-- 
1.8.5.3

From eff5cb02be4165313341dd97dba63a1e1290c681 Mon Sep 17 00:00:00 2001
From: Tomaz Canabrava <tcanabr...@kde.org>
Date: Thu, 6 Feb 2014 14:18:00 -0200
Subject: [PATCH 1/5] Move save of preferences to the preferences dialog.

Move save of preferences to the preferences dialog.
I had a few very strange bugs regarding to preferences
( like clicking on apply twice so things worked ), because
the code that moved from "QSettings" to 'Internal Settings
Struct' was being triggered on the mainwindow, *after* the
settingsChanged signal was emmited. this should fix this.

Signed-off-by: Tomaz Canabrava <tcanabr...@kde.org>
---
 qt-ui/mainwindow.cpp  |  95 ----------------------------------------------
 qt-ui/preferences.cpp | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 102 insertions(+), 95 deletions(-)

diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index e904165..c9528f9 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -563,49 +563,6 @@ bool MainWindow::askSaveChanges()
 	return false;
 }
 
-#define GET_UNIT(name, field, f, t)				\
-	v = s.value(QString(name));				\
-	if (v.isValid())					\
-		prefs.units.field = (v.toInt() == (t)) ? (t) : (f); \
-	else							\
-		prefs.units.field = default_prefs.units.field
-
-#define GET_BOOL(name, field)					\
-	v = s.value(QString(name));				\
-	if (v.isValid())					\
-		prefs.field = v.toInt() ? true : false;		\
-	else							\
-		prefs.field = default_prefs.field
-
-#define GET_DOUBLE(name, field)					\
-	v = s.value(QString(name));				\
-	if (v.isValid())					\
-		prefs.field = v.toDouble();			\
-	else							\
-		prefs.field = default_prefs.field
-
-#define GET_INT(name, field)					\
-	v = s.value(QString(name));				\
-	if (v.isValid())					\
-		prefs.field = v.toInt();			\
-	else							\
-		prefs.field = default_prefs.field
-
-#define GET_TXT(name, field)					\
-	v = s.value(QString(name));				\
-	if (v.isValid())					\
-		prefs.field = strdup(v.toString().toUtf8().constData());			\
-	else							\
-		prefs.field = default_prefs.field
-
-#define GET_TXT(name, field)					\
-	v = s.value(QString(name));				\
-	if (v.isValid())					\
-		prefs.field = strdup(v.toString().toUtf8().constData());			\
-	else							\
-		prefs.field = default_prefs.field
-
-
 void MainWindow::initialUiSetup()
 {
 	QSettings settings;
@@ -629,63 +586,11 @@ void MainWindow::initialUiSetup()
 
 void MainWindow::readSettings()
 {
-	QVariant v;
 	QSettings s;
-
-	s.beginGroup("Units");
-	if (s.value("unit_system").toString() == "metric") {
-		prefs.unit_system = METRIC;
-		prefs.units = SI_units;
-	} else if (s.value("unit_system").toString() == "imperial") {
-		prefs.unit_system = IMPERIAL;
-		prefs.units = IMPERIAL_units;
-	} else {
-		prefs.unit_system = PERSONALIZE;
-		GET_UNIT("length", length, units::FEET, units::METERS);
-		GET_UNIT("pressure", pressure, units::PSI, units::BAR);
-		GET_UNIT("volume", volume, units::CUFT, units::LITER);
-		GET_UNIT("temperature", temperature, units::FAHRENHEIT, units::CELSIUS);
-		GET_UNIT("weight", weight, units::LBS, units::KG);
-	}
-	GET_UNIT("vertical_speed_time", vertical_speed_time, units::MINUTES, units::SECONDS);
-	s.endGroup();
-	s.beginGroup("TecDetails");
-	GET_BOOL("po2graph", pp_graphs.po2);
-	GET_BOOL("pn2graph", pp_graphs.pn2);
-	GET_BOOL("phegraph", pp_graphs.phe);
-	GET_DOUBLE("po2threshold", pp_graphs.po2_threshold);
-	GET_DOUBLE("pn2threshold", pp_graphs.pn2_threshold);
-	GET_DOUBLE("phethreshold", pp_graphs.phe_threshold);
-	GET_BOOL("mod", mod);
-	GET_DOUBLE("modppO2", mod_ppO2);
-	GET_BOOL("ead", ead);
-	GET_BOOL("redceiling", profile_red_ceiling);
-	GET_BOOL("dcceiling", profile_dc_ceiling);
-	GET_BOOL("calcceiling", profile_calc_ceiling);
-	GET_BOOL("calcceiling3m", calc_ceiling_3m_incr);
-	GET_BOOL("calcndltts", calc_ndl_tts);
-	GET_BOOL("calcalltissues", calc_all_tissues);
-	GET_INT("gflow", gflow);
-	GET_INT("gfhigh", gfhigh);
-	GET_BOOL("gf_low_at_maxdepth", gf_low_at_maxdepth);
-	set_gf(prefs.gflow, prefs.gfhigh, prefs.gf_low_at_maxdepth);
-	GET_BOOL("show_sac", show_sac);
-	GET_BOOL("display_unused_tanks", display_unused_tanks);
-	s.endGroup();
-
-	s.beginGroup("GeneralSettings");
-	GET_TXT("default_filename", default_filename);
-	GET_TXT("default_cylinder", default_cylinder);
-	s.endGroup();
-
 	s.beginGroup("Display");
 	QFont defaultFont = s.value("divelist_font", qApp->font()).value<QFont>();
 	defaultFont.setPointSizeF(s.value("font_size", qApp->font().pointSizeF()).toFloat());
 	qApp->setFont(defaultFont);
-	GET_TXT("divelist_font", divelist_font);
-	GET_INT("font_size", font_size);
-	GET_INT("displayinvalid", display_invalid_dives);
-	s.endGroup();
 }
 
 void MainWindow::writeSettings()
diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index ab9c9fa..cb8dde8 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -137,6 +137,49 @@ void PreferencesDialog::rememberPrefs()
 
 #define SB(V, B) s.setValue(V, (int)(B->isChecked() ? 1 : 0))
 
+
+#define GET_UNIT(name, field, f, t)				\
+	v = s.value(QString(name));				\
+	if (v.isValid())					\
+		prefs.units.field = (v.toInt() == (t)) ? (t) : (f); \
+	else							\
+		prefs.units.field = default_prefs.units.field
+
+#define GET_BOOL(name, field)					\
+	v = s.value(QString(name));				\
+	if (v.isValid())					\
+		prefs.field = v.toInt() ? true : false;		\
+	else							\
+		prefs.field = default_prefs.field
+
+#define GET_DOUBLE(name, field)					\
+	v = s.value(QString(name));				\
+	if (v.isValid())					\
+		prefs.field = v.toDouble();			\
+	else							\
+		prefs.field = default_prefs.field
+
+#define GET_INT(name, field)					\
+	v = s.value(QString(name));				\
+	if (v.isValid())					\
+		prefs.field = v.toInt();			\
+	else							\
+		prefs.field = default_prefs.field
+
+#define GET_TXT(name, field)					\
+	v = s.value(QString(name));				\
+	if (v.isValid())					\
+		prefs.field = strdup(v.toString().toUtf8().constData());			\
+	else							\
+		prefs.field = default_prefs.field
+
+#define GET_TXT(name, field)					\
+	v = s.value(QString(name));				\
+	if (v.isValid())					\
+		prefs.field = strdup(v.toString().toUtf8().constData());			\
+	else							\
+		prefs.field = default_prefs.field
+
 void PreferencesDialog::syncSettings()
 {
 	QSettings s;
@@ -201,7 +244,66 @@ void PreferencesDialog::syncSettings()
 	}
 	s.setValue("UseSystemLanguage", ui.languageSystemDefault->isChecked());
 	s.setValue("UiLanguage", ui.languageView->currentIndex().data(Qt::UserRole));
+	s.endGroup();
+	// This code was on the mainwindow, it should belong nowhere, but since we dind't
+	// correctly fixed this code yet ( too much stuff on the code calling preferences )
+	// force this here.
 
+	QVariant v;
+	s.beginGroup("Units");
+	if (s.value("unit_system").toString() == "metric") {
+		prefs.unit_system = METRIC;
+		prefs.units = SI_units;
+	} else if (s.value("unit_system").toString() == "imperial") {
+		prefs.unit_system = IMPERIAL;
+		prefs.units = IMPERIAL_units;
+	} else {
+		prefs.unit_system = PERSONALIZE;
+		GET_UNIT("length", length, units::FEET, units::METERS);
+		GET_UNIT("pressure", pressure, units::PSI, units::BAR);
+		GET_UNIT("volume", volume, units::CUFT, units::LITER);
+		GET_UNIT("temperature", temperature, units::FAHRENHEIT, units::CELSIUS);
+		GET_UNIT("weight", weight, units::LBS, units::KG);
+	}
+	GET_UNIT("vertical_speed_time", vertical_speed_time, units::MINUTES, units::SECONDS);
+	s.endGroup();
+	s.beginGroup("TecDetails");
+	GET_BOOL("po2graph", pp_graphs.po2);
+	GET_BOOL("pn2graph", pp_graphs.pn2);
+	GET_BOOL("phegraph", pp_graphs.phe);
+	GET_DOUBLE("po2threshold", pp_graphs.po2_threshold);
+	GET_DOUBLE("pn2threshold", pp_graphs.pn2_threshold);
+	GET_DOUBLE("phethreshold", pp_graphs.phe_threshold);
+	GET_BOOL("mod", mod);
+	GET_DOUBLE("modppO2", mod_ppO2);
+	GET_BOOL("ead", ead);
+	GET_BOOL("redceiling", profile_red_ceiling);
+	GET_BOOL("dcceiling", profile_dc_ceiling);
+	GET_BOOL("calcceiling", profile_calc_ceiling);
+	GET_BOOL("calcceiling3m", calc_ceiling_3m_incr);
+	GET_BOOL("calcndltts", calc_ndl_tts);
+	GET_BOOL("calcalltissues", calc_all_tissues);
+	GET_INT("gflow", gflow);
+	GET_INT("gfhigh", gfhigh);
+	GET_BOOL("gf_low_at_maxdepth", gf_low_at_maxdepth);
+	set_gf(prefs.gflow, prefs.gfhigh, prefs.gf_low_at_maxdepth);
+	GET_BOOL("show_sac", show_sac);
+	GET_BOOL("display_unused_tanks", display_unused_tanks);
+	s.endGroup();
+
+	s.beginGroup("GeneralSettings");
+	GET_TXT("default_filename", default_filename);
+	GET_TXT("default_cylinder", default_cylinder);
+	s.endGroup();
+
+	s.beginGroup("Display");
+	QFont defaultFont = s.value("divelist_font", qApp->font()).value<QFont>();
+	defaultFont.setPointSizeF(s.value("font_size", qApp->font().pointSizeF()).toFloat());
+	qApp->setFont(defaultFont);
+	GET_TXT("divelist_font", divelist_font);
+	GET_INT("font_size", font_size);
+	GET_INT("displayinvalid", display_invalid_dives);
+	s.endGroup();
 	emit settingsChanged();
 }
 
-- 
1.8.5.3

_______________________________________________
subsurface mailing list
subsurface@hohndel.org
http://lists.hohndel.org/cgi-bin/mailman/listinfo/subsurface

Reply via email to