Mantid
Loading...
Searching...
No Matches
QSettingsHelper.h
Go to the documentation of this file.
1// Mantid Repository : https://github.com/mantidproject/mantid
2//
3// Copyright © 2019 ISIS Rutherford Appleton Laboratory UKRI,
4// NScD Oak Ridge National Laboratory, European Spallation Source
5// & Institut Laue - Langevin
6// SPDX - License - Identifier: GPL - 3.0 +
7#pragma once
8
10
11#include <QMetaType>
12#include <QSettings>
13#include <QString>
14#include <QVariant>
15#include <map>
16#include <string>
17#include <typeinfo>
18
19namespace MantidQt {
20namespace MantidWidgets {
21namespace QSettingsHelper {
22
23namespace Detail {
24inline QString qualifiedName(std::string const &settingGroup, QString const &settingName) {
25 auto group = QString::fromStdString(settingGroup);
26 if (!group.isEmpty() && !group.endsWith('/'))
27 group.append('/');
28 return group.append(settingName);
29}
30} // namespace Detail
31
40template <typename T>
41T getSetting(QSettings const &settings, std::string const &settingGroup, std::string const &settingName) {
42 return settings.value(Detail::qualifiedName(settingGroup, QString::fromStdString(settingName))).template value<T>();
43}
44
45template <typename T> T getSetting(std::string const &settingGroup, std::string const &settingName) {
46 QSettings settings;
47 return getSetting<T>(settings, settingGroup, settingName);
48}
49
58template <typename T>
59std::map<std::string, T> getSettingsAsMap(QSettings const &settings, std::string const &settingGroup) {
60 std::map<std::string, T> settingsMap;
61 auto groupPrefix = QString::fromStdString(settingGroup);
62 if (!groupPrefix.isEmpty() && !groupPrefix.endsWith('/'))
63 groupPrefix.append('/');
64 std::string templateTypeName = typeid(T).name();
65 for (auto const &qualifiedName : settings.allKeys()) {
66 if (qualifiedName.startsWith(groupPrefix) && qualifiedName.endsWith("/type")) {
67 std::string settingTypeName = settings.value(qualifiedName).toString().toStdString();
68 if (settingTypeName == templateTypeName) {
69 auto settingName = qualifiedName.mid(groupPrefix.size());
70 settingName.chop(5);
71 auto setting = settings.value(groupPrefix + settingName + "/value");
72 settingsMap[settingName.toStdString()] = setting.template value<T>();
73 }
74 }
75 }
76 return settingsMap;
77}
78
79template <typename T> std::map<std::string, T> getSettingsAsMap(std::string const &settingGroup) {
80 QSettings settings;
81 return getSettingsAsMap<T>(settings, settingGroup);
82}
83
91template <typename T>
92void setSetting(QSettings &settings, std::string const &settingGroup, std::string const &settingName, T const &value) {
93 auto const qualifiedName = Detail::qualifiedName(settingGroup, QString::fromStdString(settingName));
94 QSettingsChangeAware writer(settings);
95 writer.setValue(qualifiedName + "/value", value);
96 writer.setValue(qualifiedName + "/type", typeid(value).name());
97}
98
99template <typename T> void setSetting(std::string const &settingGroup, std::string const &settingName, T const &value) {
100 auto const qualifiedName = Detail::qualifiedName(settingGroup, QString::fromStdString(settingName));
101 QSettingsChangeAware settings;
102 settings.setValue(qualifiedName + "/value", value);
103 settings.setValue(qualifiedName + "/type", typeid(value).name());
104}
105
106} // namespace QSettingsHelper
107} // namespace MantidWidgets
108} // namespace MantidQt
std::string name
Definition Run.cpp:60
double value
The value of the point.
Definition FitMW.cpp:51
A QSettings facade that applies only effective changes.
bool setValue(QString const &key, QVariant const &value)
Set a value only when the effective stored value differs.
QString qualifiedName(std::string const &settingGroup, QString const &settingName)
void setSetting(QSettings &settings, std::string const &settingGroup, std::string const &settingName, T const &value)
Sets the value of a specified setting.
std::map< std::string, T > getSettingsAsMap(QSettings const &settings, std::string const &settingGroup)
Loads a map of settings with the same type.
T getSetting(QSettings const &settings, std::string const &settingGroup, std::string const &settingName)
Loads an individual setting from disk.
The AlgorithmProgressDialogPresenter keeps track of the running algorithms and displays a progress ba...