mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
With this every cylinder downloaded from a divecomputer that doesn't provide cylinder data, and every cylinder manually added anywhere will default to the default cylinder that is set in the preferences. For people who most of the time dive with the same equipment (always on dive boats with AL80, or almost always diving their personal HP119) this should be a nice improvement. If you don't like this behavior, simply leave the default cylinder setting in the preferences empty. This commit also fixes the incorrect s->value call (should be s->setValue). I wonder what this did to the default filename before... Fixes #145 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
182 lines
6 KiB
C++
182 lines
6 KiB
C++
#include "preferences.h"
|
|
#include <QSettings>
|
|
#include <QDebug>
|
|
#include <QFileDialog>
|
|
|
|
PreferencesDialog* PreferencesDialog::instance()
|
|
{
|
|
static PreferencesDialog *dialog = new PreferencesDialog();
|
|
dialog->setAttribute(Qt::WA_QuitOnClose, false);
|
|
return dialog;
|
|
}
|
|
|
|
PreferencesDialog::PreferencesDialog(QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f)
|
|
{
|
|
ui.setupUi(this);
|
|
connect(ui.buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*)));
|
|
setUiFromPrefs();
|
|
rememberPrefs();
|
|
}
|
|
|
|
void PreferencesDialog::showEvent(QShowEvent *event)
|
|
{
|
|
setUiFromPrefs();
|
|
rememberPrefs();
|
|
QDialog::showEvent(event);
|
|
}
|
|
|
|
void PreferencesDialog::setUiFromPrefs()
|
|
{
|
|
// graphs
|
|
ui.phe->setChecked(prefs.pp_graphs.phe);
|
|
ui.pheThreshold->setEnabled(ui.phe->isChecked());
|
|
ui.po2->setChecked(prefs.pp_graphs.po2);
|
|
ui.po2Threshold->setEnabled(ui.po2->isChecked());
|
|
ui.pn2->setChecked(prefs.pp_graphs.pn2);
|
|
ui.pn2Threshold->setEnabled(ui.pn2->isChecked());
|
|
ui.pheThreshold->setValue(prefs.pp_graphs.phe_threshold);
|
|
ui.po2Threshold->setValue(prefs.pp_graphs.po2_threshold);
|
|
ui.pn2Threshold->setValue(prefs.pp_graphs.pn2_threshold);
|
|
ui.ead_end_eadd->setChecked(prefs.ead);
|
|
ui.mod->setChecked(prefs.mod);
|
|
ui.maxppo2->setEnabled(ui.mod->isChecked());
|
|
ui.maxppo2->setValue(prefs.mod_ppO2);
|
|
ui.dc_reported_ceiling->setChecked(prefs.profile_dc_ceiling);
|
|
ui.red_ceiling->setEnabled(ui.dc_reported_ceiling->isChecked());
|
|
ui.red_ceiling->setChecked(prefs.profile_red_ceiling);
|
|
ui.calculated_ceiling->setChecked(prefs.profile_calc_ceiling);
|
|
ui.increment_3m->setEnabled(ui.calculated_ceiling->isChecked());
|
|
ui.increment_3m->setChecked(prefs.calc_ceiling_3m_incr);
|
|
ui.all_tissues->setEnabled(ui.calculated_ceiling->isChecked());
|
|
ui.all_tissues->setChecked(prefs.calc_all_tissues);
|
|
ui.calc_ndl_tts->setEnabled(ui.calculated_ceiling->isChecked());
|
|
ui.calc_ndl_tts->setChecked(prefs.calc_ndl_tts);
|
|
ui.groupBox->setEnabled(ui.personalize->isChecked());
|
|
|
|
ui.gflow->setValue(prefs.gflow);
|
|
ui.gfhigh->setValue(prefs.gfhigh);
|
|
ui.gf_low_at_maxdepth->setChecked(prefs.gf_low_at_maxdepth);
|
|
|
|
// units
|
|
if (prefs.unit_system == METRIC)
|
|
ui.metric->setChecked(true);
|
|
else if (prefs.unit_system == IMPERIAL)
|
|
ui.imperial->setChecked(true);
|
|
else
|
|
ui.personalize->setChecked(true);
|
|
|
|
ui.celsius->setChecked(prefs.units.temperature == units::CELSIUS);
|
|
ui.fahrenheit->setChecked(prefs.units.temperature == units::FAHRENHEIT);
|
|
ui.meter->setChecked(prefs.units.length == units::METERS);
|
|
ui.feet->setChecked(prefs.units.length == units::FEET);
|
|
ui.bar->setChecked(prefs.units.pressure == units::BAR);
|
|
ui.psi->setChecked(prefs.units.pressure == units::PSI);
|
|
ui.liter->setChecked(prefs.units.volume == units::LITER);
|
|
ui.cuft->setChecked(prefs.units.volume == units::CUFT);
|
|
ui.kgs->setChecked(prefs.units.weight == units::KG);
|
|
ui.lbs->setChecked(prefs.units.weight == units::LBS);
|
|
ui.font->setFont(QString(prefs.divelist_font));
|
|
ui.fontsize->setValue(prefs.font_size);
|
|
ui.defaultfilename->setText(prefs.default_filename);
|
|
ui.defaultcylinder->setText(prefs.default_cylinder);
|
|
ui.displayinvalid->setChecked(prefs.display_invalid_dives);
|
|
ui.show_sac->setChecked(prefs.show_sac);
|
|
ui.vertical_speed_minutes->setChecked(prefs.units.vertical_speed_time == units::MINUTES);
|
|
ui.vertical_speed_seconds->setChecked(prefs.units.vertical_speed_time == units::SECONDS);
|
|
}
|
|
|
|
void PreferencesDialog::restorePrefs()
|
|
{
|
|
prefs = oldPrefs;
|
|
setUiFromPrefs();
|
|
}
|
|
|
|
void PreferencesDialog::rememberPrefs()
|
|
{
|
|
oldPrefs = prefs;
|
|
}
|
|
|
|
#define SB(V, B) s.setValue(V, (int)(B->isChecked() ? 1 : 0))
|
|
|
|
void PreferencesDialog::syncSettings()
|
|
{
|
|
QSettings s;
|
|
|
|
// Graph
|
|
s.beginGroup("TecDetails");
|
|
|
|
SB("phegraph", ui.phe);
|
|
SB("po2graph", ui.po2);
|
|
SB("pn2graph", ui.pn2);
|
|
s.setValue("phethreshold", ui.pheThreshold->value());
|
|
s.setValue("po2threshold", ui.po2Threshold->value());
|
|
s.setValue("pn2threshold", ui.pn2Threshold->value());
|
|
SB("ead", ui.ead_end_eadd);
|
|
SB("mod", ui.mod);
|
|
s.setValue("modppO2", ui.maxppo2->value());
|
|
SB("dcceiling", ui.dc_reported_ceiling);
|
|
SB("redceiling", ui.red_ceiling);
|
|
SB("calcceiling", ui.calculated_ceiling);
|
|
SB("calcceiling3m", ui.increment_3m);
|
|
SB("calcndltts", ui.calc_ndl_tts);
|
|
SB("calcalltissues", ui.all_tissues);
|
|
s.setValue("gflow", ui.gflow->value());
|
|
s.setValue("gfhigh", ui.gfhigh->value());
|
|
SB("gf_low_at_maxdepth", ui.gf_low_at_maxdepth);
|
|
SB("show_sac", ui.show_sac);
|
|
s.endGroup();
|
|
|
|
// Units
|
|
s.beginGroup("Units");
|
|
QString unitSystem = ui.metric->isChecked() ? "metric" : (ui.imperial->isChecked() ? "imperial" : "personal");
|
|
s.setValue("unit_system", unitSystem);
|
|
s.setValue("temperature", ui.fahrenheit->isChecked() ? units::FAHRENHEIT : units::CELSIUS);
|
|
s.setValue("length", ui.feet->isChecked() ? units::FEET : units::METERS);
|
|
s.setValue("pressure", ui.psi->isChecked() ? units::PSI : units::BAR);
|
|
s.setValue("volume", ui.cuft->isChecked() ? units::CUFT : units::LITER);
|
|
s.setValue("weight", ui.lbs->isChecked() ? units::LBS : units::KG);
|
|
s.setValue("vertical_speed_time", ui.vertical_speed_minutes->isChecked() ? units::MINUTES : units::SECONDS);
|
|
s.endGroup();
|
|
// Defaults
|
|
s.beginGroup("GeneralSettings");
|
|
s.setValue("default_filename", ui.defaultfilename->text());
|
|
s.setValue("default_cylinder", ui.defaultcylinder->text());
|
|
s.endGroup();
|
|
|
|
s.beginGroup("Display");
|
|
s.value("divelist_font", ui.font->font().family());
|
|
s.value("font_size", ui.fontsize->value());
|
|
s.value("displayinvalid", ui.displayinvalid->isChecked());
|
|
s.endGroup();
|
|
s.sync();
|
|
|
|
emit settingsChanged();
|
|
}
|
|
|
|
void PreferencesDialog::buttonClicked(QAbstractButton* button)
|
|
{
|
|
switch(ui.buttonBox->standardButton(button)){
|
|
case QDialogButtonBox::Discard:
|
|
restorePrefs();
|
|
close();
|
|
break;
|
|
case QDialogButtonBox::Apply:
|
|
syncSettings();
|
|
break;
|
|
case QDialogButtonBox::FirstButton:
|
|
syncSettings();
|
|
close();
|
|
break;
|
|
default:
|
|
break; // ignore warnings.
|
|
}
|
|
}
|
|
|
|
|
|
#undef SB
|
|
|
|
void PreferencesDialog::on_chooseFile_clicked()
|
|
{
|
|
QFileInfo fi(system_default_filename());
|
|
ui.defaultfilename->setText(QFileDialog::getOpenFileName(this, tr("Open Default Log File"), fi.absolutePath(), tr("Subsurface XML files (*.ssrf *.xml *.XML)")));
|
|
}
|