From d07bd665bce36cef245ada279d6bbefeeb159dba Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Thu, 17 Dec 2015 15:45:14 -0800 Subject: [PATCH] Add new SettingsFact Supports connecting a Fact to a QSettings value --- src/FactSystem/Fact.h | 2 +- src/FactSystem/SettingsFact.cc | 73 ++++++++++++++++++++++++++++++++++ src/FactSystem/SettingsFact.h | 51 ++++++++++++++++++++++++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 src/FactSystem/SettingsFact.cc create mode 100644 src/FactSystem/SettingsFact.h diff --git a/src/FactSystem/Fact.h b/src/FactSystem/Fact.h index f2e311c8f..0c6e55fdf 100644 --- a/src/FactSystem/Fact.h +++ b/src/FactSystem/Fact.h @@ -136,7 +136,7 @@ signals: /// This signal is meant for use by Fact container implementations. void _containerRawValueChanged(const QVariant& value); -private: +protected: QString _variantToString(const QVariant& variant) const; QString _name; diff --git a/src/FactSystem/SettingsFact.cc b/src/FactSystem/SettingsFact.cc new file mode 100644 index 000000000..de31cb7ea --- /dev/null +++ b/src/FactSystem/SettingsFact.cc @@ -0,0 +1,73 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +#include "SettingsFact.h" + +#include + +SettingsFact::SettingsFact(QObject* parent) + : Fact(parent) +{ + +} + +SettingsFact::SettingsFact(QString settingGroup, QString settingName, FactMetaData::ValueType_t type, const QVariant& defaultValue, QObject* parent) + : Fact(0, settingName, type, parent) + , _settingGroup(settingGroup) +{ + QSettings settings; + + if (!_settingGroup.isEmpty()) { + settings.beginGroup(_settingGroup); + } + + _rawValue = settings.value(_name, defaultValue); + + connect(this, &Fact::valueChanged, this, &SettingsFact::_valueChanged); +} + +SettingsFact::SettingsFact(const SettingsFact& other, QObject* parent) + : Fact(other, parent) +{ + *this = other; +} + +const SettingsFact& SettingsFact::operator=(const SettingsFact& other) +{ + Fact::operator=(other); + + _settingGroup = other._settingGroup; + + return *this; +} + +void SettingsFact::_valueChanged(QVariant value) +{ + QSettings settings; + + if (!_settingGroup.isEmpty()) { + settings.beginGroup(_settingGroup); + } + + settings.setValue(_name, value); +} diff --git a/src/FactSystem/SettingsFact.h b/src/FactSystem/SettingsFact.h new file mode 100644 index 000000000..eb8a6b897 --- /dev/null +++ b/src/FactSystem/SettingsFact.h @@ -0,0 +1,51 @@ +/*===================================================================== + + QGroundControl Open Source Ground Control Station + + (c) 2009 - 2014 QGROUNDCONTROL PROJECT + + This file is part of the QGROUNDCONTROL project + + QGROUNDCONTROL is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + QGROUNDCONTROL is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QGROUNDCONTROL. If not, see . + + ======================================================================*/ + +/// @file +/// @author Don Gagne + +#ifndef SettingsFact_H +#define SettingsFact_H + +#include "Fact.h" + +/// @brief A SettingsFact is Fact which holds a QSettings value. +class SettingsFact : public Fact +{ + Q_OBJECT + +public: + SettingsFact(QObject* parent = NULL); + SettingsFact(QString settingGroup, QString settingName, FactMetaData::ValueType_t type, const QVariant& defaultValue, QObject* parent = NULL); + SettingsFact(const SettingsFact& other, QObject* parent = NULL); + + const SettingsFact& operator=(const SettingsFact& other); + +private slots: + void _valueChanged(QVariant value); + +private: + QString _settingGroup; +}; + +#endif -- 2.22.0