File: AppConfig.cpp

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (120 lines) | stat: -rw-r--r-- 4,160 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
//  ************************************************************************************************
//
//  BornAgain: simulate and fit reflection and scattering
//
//! @file      GUI/View/Widget/AppConfig.cpp
//! @brief     Implements class AppConfig.
//!
//! @homepage  http://www.bornagainproject.org
//! @license   GNU General Public License v3 or higher (see COPYING)
//! @copyright Forschungszentrum Jülich GmbH 2021
//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
//
//  ************************************************************************************************

#include "GUI/View/Widget/AppConfig.h"
#include "GUI/Model/Descriptor/ComboProperty.h"
#include "GUI/View/Base/ColorGradient.h"
#include <QDir>
#include <QSettings>
#include <QStandardPaths>
#include <qcustomplot.h>

BA_GUI_API_ std::unique_ptr<AppConfig> gApp; //!< global pointer to _the_ instance

namespace {

const QString S_AUTOSAVE = "EnableAutosave";

const QString S_DIRS = "Dirs";
const QString S_DEFAULTPROJECTPATH = "DefaultProjectPath";
const QString S_ARTIFACTEXPORTDIR = "ArtifactExportDir";
const QString S_DATAIMPORTDIR = "DataImportDir";
const QString S_SCRIPTEXPORTDIR = "ScriptExportDir";
const QString S_SCRIPTIMPORTDIR = "ScriptImportDir";
const QString S_LASTUSEDIMPORFILTER1D = "LastUsedImportFilter1D";
const QString S_LASTUSEDIMPORFILTER2D = "LastUsedImportFilter2D";

// gradient map for colormaps
const QMap<QString, QCPColorGradient> gradient_map = {
    {"Grayscale", QCPColorGradient::gpGrayscale},
    {"Hot", QCPColorGradient::gpHot},
    {"Cold", QCPColorGradient::gpCold},
    {"Night", QCPColorGradient::gpNight},
    {"Candy", QCPColorGradient::gpCandy},
    {"Geography", QCPColorGradient::gpGeography},
    {"Ion", QCPColorGradient::gpIon},
    {"Thermal", QCPColorGradient::gpThermal},
    {"Polar", QCPColorGradient::gpPolar},
    {"Spectrum", QCPColorGradient::gpSpectrum},
    {"Jet", QCPColorGradient::gpJet},
    {"Hues", QCPColorGradient::gpHues},
    {"Inferno", GUI::QCP_Color::colorGradientInferno()}};

const QString startGradient = "Inferno";

} // namespace


AppConfig::AppConfig()
{
    color_gradient_combo =
        std::make_unique<ComboProperty>(ComboProperty::fromList(::gradient_map.keys()));
    color_gradient_combo->setCurrentValue(::startGradient);

    xml_dir = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
    artifact_export_dir = QDir::homePath();
    data_import_dir = QDir::homePath();
    script_export_dir = QDir::homePath();
    script_import_dir = QDir::homePath();
    // TODO replace homePath by QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) ?

    loadSettings();
}

AppConfig::~AppConfig() = default;

//! Reads settings of AppConfig from global settings.

void AppConfig::loadSettings()
{
    QSettings s;

    autosave_enabled = s.value(S_AUTOSAVE, true).toBool();

    if (s.childGroups().contains(S_DIRS)) {
        s.beginGroup(S_DIRS);

        artifact_export_dir = s.value(S_ARTIFACTEXPORTDIR, artifact_export_dir).toString();
        data_import_dir = s.value(S_DATAIMPORTDIR, data_import_dir).toString();
        script_export_dir = s.value(S_SCRIPTEXPORTDIR, script_export_dir).toString();
        script_import_dir = s.value(S_SCRIPTIMPORTDIR, script_import_dir).toString();

        import_filter_1D = s.value(S_LASTUSEDIMPORFILTER1D, "").toString();
        import_filter_2D = s.value(S_LASTUSEDIMPORFILTER2D, "").toString();

        s.endGroup();
    }
}

//! Saves settings of AppConfig in global settings.

void AppConfig::saveSettings()
{
    QSettings s;
    s.setValue(S_AUTOSAVE, autosave_enabled);

    s.beginGroup(S_DIRS);
    s.setValue(S_ARTIFACTEXPORTDIR, artifact_export_dir);
    s.setValue(S_DATAIMPORTDIR, data_import_dir);
    s.setValue(S_SCRIPTEXPORTDIR, script_export_dir);
    s.setValue(S_SCRIPTIMPORTDIR, script_import_dir);
    s.setValue(S_LASTUSEDIMPORFILTER1D, import_filter_1D);
    s.setValue(S_LASTUSEDIMPORFILTER2D, import_filter_2D);
    s.endGroup();
}

QCPColorGradient AppConfig::currentColorGradient() const
{
    return ::gradient_map.value(color_gradient_combo->currentValue());
}