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 "AppMessages.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, _userVisible);
31
33 const QVariant rawDefaultValue = metaData->rawDefaultValue();
34 QVariant resolvedValue;
35
37 // Don't use saved settings
38 resolvedValue = rawDefaultValue;
39 } else if (_userVisible) {
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}
QString errorString
#define QGC_LOGGING_CATEGORY(name, categoryStr)
Holds the meta data associated with a Fact.
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:17
QString _name
Definition Fact.h:202
void setMetaData(FactMetaData *metaData, bool setDefaultFromMetaData=false)
Definition Fact.cc:674
FactMetaData * metaData()
Definition Fact.h:171
QVariant rawDefaultValue() const
Definition Fact.cc:443
void rawValueChanged(const QVariant &value)
QRecursiveMutex _rawValueMutex
Definition Fact.h:205
const Fact & operator=(const Fact &other)
Definition Fact.cc:80
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)
static void adjustSettingMetaData(const QString &settingsGroup, FactMetaData &metaData, bool &userVisible)
bool runningUnitTests()