QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SettingsFact.cc
Go to the documentation of this file.
1#include "SettingsFact.h"
2#include "QGCApplication.h"
3#include "QGCCorePlugin.h"
5#include "SettingsManager.h"
6
7#include <QtCore/QSettings>
8
9QGC_LOGGING_CATEGORY(SettingsFactLog, "FactSystem.SettingsFact")
10
11SettingsFact::SettingsFact(QObject *parent)
12 : Fact(parent)
13{
14 // qCDebug(SettingsFactLog) << Q_FUNC_INFO << this;
15}
16
17SettingsFact::SettingsFact(const QString &settingsGroup, FactMetaData *metaData, QObject *parent)
18 : Fact(0, metaData->name(), metaData->type(), parent)
19 , _settingsGroup(settingsGroup)
20{
21 // qCDebug(SettingsFactLog) << Q_FUNC_INFO << this;
22 QSettings settings;
23
24 if (!_settingsGroup.isEmpty()) {
25 settings.beginGroup(_settingsGroup);
26 }
27
28 // Allow core plugin a chance to override the default value
29 SettingsManager::adjustSettingMetaData(settingsGroup, *metaData, _visible);
30 setMetaData(metaData);
31
32 if (metaData->defaultValueAvailable()) {
33 const QVariant rawDefaultValue = metaData->rawDefaultValue();
34 QVariant resolvedValue;
35
36 if (qgcApp()->runningUnitTests()) {
37 // Don't use saved settings
38 resolvedValue = rawDefaultValue;
39 } else if (_visible) {
40 QVariant typedValue;
41 QString errorString;
42 (void) metaData->convertAndValidateRaw(settings.value(_name, rawDefaultValue), true /* conertOnly */, typedValue, errorString);
43 resolvedValue = typedValue;
44 } else {
45 // Setting is not visible, force to default value always
46 // Note that we specifically do not save this back to QSettings such that a Settings Override file change is not a permanent change
47 resolvedValue = rawDefaultValue;
48 }
49
50 QMutexLocker<QRecursiveMutex> locker(&_rawValueMutex);
51 _rawValue = resolvedValue;
52 }
53
54 (void) connect(this, &Fact::rawValueChanged, this, &SettingsFact::_rawValueChanged);
55}
56
57SettingsFact::SettingsFact(const SettingsFact &other, QObject *parent)
58 : Fact(other, parent)
59{
60 // qCDebug(SettingsFactLog) << Q_FUNC_INFO << this;
61 *this = other;
62}
63
65{
66 // qCDebug(SettingsFactLog) << Q_FUNC_INFO << this;
67}
68
70{
71 Fact::operator=(other);
72
73 _settingsGroup = other._settingsGroup;
74
75 return *this;
76}
77
78void SettingsFact::_rawValueChanged(const QVariant &value)
79{
80 QSettings settings;
81
82 if (!_settingsGroup.isEmpty()) {
83 settings.beginGroup(_settingsGroup);
84 }
85
86 settings.setValue(_name, value);
87}
#define qgcApp()
QString errorString
#define QGC_LOGGING_CATEGORY(name, categoryStr)
bool convertAndValidateRaw(const QVariant &rawValue, bool convertOnly, QVariant &typedValue, QString &errorString) const
QVariant rawDefaultValue() const
bool defaultValueAvailable() const
A Fact is used to hold a single value within the system.
Definition Fact.h:19
QString _name
Definition Fact.h:202
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
Definition Fact.h:205
QVariant _rawValue
Definition Fact.h:204
A SettingsFact is Fact which holds a QSettings value.
SettingsFact(QObject *parent=nullptr)
const SettingsFact & operator=(const SettingsFact &other)