Rewrite readSettings to do what it should have done from the start

This function was supposed to take the default_prefs into account but
clearly wasn't.

Now it should be much more readable and maintainable.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2013-06-04 21:40:09 +09:00
parent 46112cbcd6
commit ed0f558efb
2 changed files with 78 additions and 74 deletions

View file

@ -42,10 +42,12 @@ MainWindow::MainWindow() : ui(new Ui::MainWindow()), helpView(0)
setWindowIcon(QIcon(":subsurface-icon")); setWindowIcon(QIcon(":subsurface-icon"));
connect(ui->ListWidget, SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int))); connect(ui->ListWidget, SIGNAL(currentDiveChanged(int)), this, SLOT(current_dive_changed(int)));
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(readSettings())); connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(readSettings()));
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), this, SLOT(refreshDisplay()));
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui->ProfileWidget, SLOT(refresh())); connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui->ProfileWidget, SLOT(refresh()));
ui->mainErrorMessage->hide(); ui->mainErrorMessage->hide();
ui->ProfileWidget->setFocusProxy(ui->ListWidget); ui->ProfileWidget->setFocusProxy(ui->ListWidget);
ui->ListWidget->reload(); ui->ListWidget->reload();
initialUiSetup();
readSettings(); readSettings();
ui->ListWidget->reloadHeaderActions(); ui->ListWidget->reloadHeaderActions();
ui->ListWidget->setFocus(); ui->ListWidget->setFocus();
@ -336,23 +338,39 @@ bool MainWindow::askSaveChanges()
return false; return false;
} }
#define GET_UNIT(v, name, field, f, t) \ #define GET_UNIT(name, field, f, t) \
v = settings.value(QString(name)); \ v = s.value(QString(name)); \
if (v.isValid()) \ if (v.isValid()) \
prefs.units.field = (v.toInt() == (t)) ? (t) : (f) prefs.units.field = (v.toInt() == (t)) ? (t) : (f); \
#define GET_BOOL(v, name, field) \
v = settings.value(QString(name)); \
if (v.isValid() && v.toInt()) \
field = TRUE; \
else \ else \
field = FALSE prefs.units.field = default_prefs.units.field
void MainWindow::readSettings() #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
void MainWindow::initialUiSetup()
{ {
int i;
QVariant v;
QSettings settings; QSettings settings;
int i;
settings.beginGroup("MainWindow"); settings.beginGroup("MainWindow");
QSize sz = settings.value("size").value<QSize>(); QSize sz = settings.value("size").value<QSize>();
@ -375,79 +393,64 @@ void MainWindow::readSettings()
ui->ListWidget->collapseAll(); ui->ListWidget->collapseAll();
ui->ListWidget->expand(ui->ListWidget->model()->index(0,0)); ui->ListWidget->expand(ui->ListWidget->model()->index(0,0));
ui->ListWidget->scrollTo(ui->ListWidget->model()->index(0,0), QAbstractItemView::PositionAtCenter); ui->ListWidget->scrollTo(ui->ListWidget->model()->index(0,0), QAbstractItemView::PositionAtCenter);
settings.endGroup(); settings.endGroup();
settings.beginGroup("Units"); }
if (settings.value("unit_system").toString() == "metric") {
void MainWindow::readSettings()
{
QVariant v;
QSettings s;
s.beginGroup("Units");
if (s.value("unit_system").toString() == "metric") {
prefs.unit_system = METRIC; prefs.unit_system = METRIC;
prefs.units = SI_units; prefs.units = SI_units;
} else if (settings.value("unit_system").toString() == "imperial") { } else if (s.value("unit_system").toString() == "imperial") {
prefs.unit_system = IMPERIAL; prefs.unit_system = IMPERIAL;
prefs.units = IMPERIAL_units; prefs.units = IMPERIAL_units;
} else { } else {
prefs.unit_system = PERSONALIZE; prefs.unit_system = PERSONALIZE;
GET_UNIT(v, "length", length, units::FEET, units::METERS); GET_UNIT("length", length, units::FEET, units::METERS);
GET_UNIT(v, "pressure", pressure, units::PSI, units::BAR); GET_UNIT("pressure", pressure, units::PSI, units::BAR);
GET_UNIT(v, "volume", volume, units::CUFT, units::LITER); GET_UNIT("volume", volume, units::CUFT, units::LITER);
GET_UNIT(v, "temperature", temperature, units::FAHRENHEIT, units::CELSIUS); GET_UNIT("temperature", temperature, units::FAHRENHEIT, units::CELSIUS);
GET_UNIT(v, "weight", weight, units::LBS, units::KG); GET_UNIT("weight", weight, units::LBS, units::KG);
} }
settings.endGroup(); s.endGroup();
settings.beginGroup("DisplayListColumns"); s.beginGroup("DisplayListColumns");
GET_BOOL(v, "CYLINDER", prefs.visible_cols.cylinder); GET_BOOL("CYLINDER", visible_cols.cylinder);
GET_BOOL(v, "TEMPERATURE", prefs.visible_cols.temperature); GET_BOOL("TEMPERATURE", visible_cols.temperature);
GET_BOOL(v, "TOTALWEIGHT", prefs.visible_cols.totalweight); GET_BOOL("TOTALWEIGHT", visible_cols.totalweight);
GET_BOOL(v, "SUIT", prefs.visible_cols.suit); GET_BOOL("SUIT", visible_cols.suit);
GET_BOOL(v, "NITROX", prefs.visible_cols.nitrox); GET_BOOL("NITROX", visible_cols.nitrox);
GET_BOOL(v, "OTU", prefs.visible_cols.otu); GET_BOOL("OTU", visible_cols.otu);
GET_BOOL(v, "MAXCNS", prefs.visible_cols.maxcns); GET_BOOL("MAXCNS", visible_cols.maxcns);
GET_BOOL(v, "SAC", prefs.visible_cols.sac); GET_BOOL("SAC", visible_cols.sac);
settings.endGroup(); s.endGroup();
settings.beginGroup("TecDetails"); s.beginGroup("TecDetails");
GET_BOOL(v, "po2graph", prefs.pp_graphs.po2); GET_BOOL("po2graph", pp_graphs.po2);
GET_BOOL(v, "pn2graph", prefs.pp_graphs.pn2); GET_BOOL("pn2graph", pp_graphs.pn2);
GET_BOOL(v, "phegraph", prefs.pp_graphs.phe); GET_BOOL("phegraph", pp_graphs.phe);
v = settings.value(QString("po2threshold")); GET_DOUBLE("po2threshold", pp_graphs.po2_threshold);
if (v.isValid()) GET_DOUBLE("pn2threshold", pp_graphs.pn2_threshold);
prefs.pp_graphs.po2_threshold = v.toDouble(); GET_DOUBLE("phethreshold", pp_graphs.phe_threshold);
v = settings.value(QString("pn2threshold")); GET_BOOL("mod", mod);
if (v.isValid()) GET_DOUBLE("modppO2", mod_ppO2);
prefs.pp_graphs.pn2_threshold = v.toDouble(); GET_BOOL("ead", ead);
v = settings.value(QString("phethreshold")); GET_BOOL("redceiling", profile_red_ceiling);
if (v.isValid()) GET_BOOL("dcceiling", profile_dc_ceiling);
prefs.pp_graphs.phe_threshold = v.toDouble(); GET_BOOL("calcceiling", profile_calc_ceiling);
GET_BOOL(v, "mod", prefs.mod); GET_BOOL("calcceiling3m", calc_ceiling_3m_incr);
v = settings.value(QString("modppO2")); GET_BOOL("calcalltissues", calc_all_tissues);
if (v.isValid()) GET_INT("gflow", gflow);
prefs.mod_ppO2 = v.toDouble(); GET_INT("gfhigh", gfhigh);
GET_BOOL(v, "ead", prefs.ead);
GET_BOOL(v, "redceiling", prefs.profile_red_ceiling);
GET_BOOL(v, "dcceiling", prefs.profile_dc_ceiling);
GET_BOOL(v, "calcceiling", prefs.profile_calc_ceiling);
GET_BOOL(v, "calcceiling3m", prefs.calc_ceiling_3m_incr);
GET_BOOL(v, "calcalltissues", prefs.calc_all_tissues);
v = settings.value(QString("gflow"));
if (v.isValid())
prefs.gflow = v.toInt();
v = settings.value(QString("gfhigh"));
if (v.isValid())
prefs.gfhigh = v.toInt();
set_gf(prefs.gflow, prefs.gfhigh); set_gf(prefs.gflow, prefs.gfhigh);
settings.endGroup(); s.endGroup();
#if ONCE_WE_CAN_SET_FONTS s.beginGroup("Display");
settings.beginGroup("Display"); v = s.value(QString("divelist_font"));
v = settings.value(QString("divelist_font"));
if (v.isValid()) if (v.isValid())
/* I don't think this is right */ prefs.divelist_font = strdup(v.toString().toUtf8().data());
prefs.divelist_font = strdup(v.toString);
#endif
#if ONCE_WE_HAVE_MAPS
v = settings.value(QString_int("map_provider"));
if (v.isValid())
prefs.map_provider = v.toInt();
#endif
} }
#define SAVE_VALUE(name, field) \ #define SAVE_VALUE(name, field) \

View file

@ -82,6 +82,7 @@ private Q_SLOTS:
void on_actionUserManual_triggered(); void on_actionUserManual_triggered();
void current_dive_changed(int divenr); void current_dive_changed(int divenr);
void initialUiSetup();
protected: protected:
void closeEvent(QCloseEvent *); void closeEvent(QCloseEvent *);