Fact.h 4.08 KB
Newer Older
Don Gagne's avatar
Don Gagne committed
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
/*=====================================================================
 
 QGroundControl Open Source Ground Control Station
 
 (c) 2009 - 2014 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 
 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 <http://www.gnu.org/licenses/>.
 
 ======================================================================*/

/// @file
///     @author Don Gagne <don@thegagnes.com>

#ifndef Fact_H
#define Fact_H

#include "FactMetaData.h"

#include <QObject>
#include <QString>
#include <QVariant>

/// @brief A Fact is used to hold a single value within the system.
///
/// Along with the value property is a set of meta data which further describes the Fact. This information is
/// exposed through QObject Properties such that you can bind to it from QML as well as use it within C++ code.
/// Since the meta data is common to all instances of the same Fact, it is acually stored once in a seperate object.
class Fact : public QObject
{
    Q_OBJECT
    
Don Gagne's avatar
Don Gagne committed
45
    Q_PROPERTY(QString name READ name CONSTANT)
Don Gagne's avatar
Don Gagne committed
46 47 48 49 50 51 52 53 54 55 56 57
    Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged USER true)
    Q_PROPERTY(QVariant defaultValue READ defaultValue CONSTANT)
    Q_PROPERTY(FactMetaData::ValueType_t type READ type CONSTANT)
    Q_PROPERTY(QString shortDescription READ shortDescription CONSTANT)
    Q_PROPERTY(QString longDescription READ longDescription CONSTANT)
    Q_PROPERTY(QString units READ units CONSTANT)
    Q_PROPERTY(QVariant min READ min CONSTANT)
    Q_PROPERTY(QVariant max READ max CONSTANT)
    
    Q_ENUMS(FactMetaData::ValueType_t)
    
public:
Don Gagne's avatar
Don Gagne committed
58
    Fact(QString name = "", QObject* parent = NULL);
Don Gagne's avatar
Don Gagne committed
59 60 61
    
    // Property system methods
    
Don Gagne's avatar
Don Gagne committed
62 63 64
    /// Read accessor or name property
    QString name(void) const { return _name; }
    
Don Gagne's avatar
Don Gagne committed
65 66 67 68
    /// Read accessor for value property
    QVariant value(void) const { return _value; }
    
    /// Write accessor for value property
69
    void setValue(const QVariant& value);
Don Gagne's avatar
Don Gagne committed
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
    
    /// Read accesor for defaultValue property
    QVariant defaultValue(void) { return _metaData->defaultValue; }
    
    /// Read accesor for type property
    FactMetaData::ValueType_t type(void) { return _metaData->type; }
    
    /// Read accesor for shortDescription property
    QString shortDescription(void) { return _metaData->shortDescription; }
    
    /// Read accesor for longDescription property
    QString longDescription(void) { return _metaData->longDescription; }
    
    /// Read accesor for units property
    QString units(void) { return _metaData->units; }
    
    /// Read accesor for min property
    QVariant min(void) { return _metaData->min; }

    /// Read accesor for max property
    QVariant max(void) { return _metaData->max; }
    
    /// Sets the meta data associated with the Fact.
    void setMetaData(FactMetaData* metaData) { _metaData = metaData; }
    
95 96
    void _containerSetValue(const QVariant& value);
    
Don Gagne's avatar
Don Gagne committed
97 98 99 100
signals:
    /// QObject Property System signal for value property changes
    ///
    /// This signal is only meant for use by the QT property system. It should not be connected to by client code.
101
    void valueChanged(QVariant value);
Don Gagne's avatar
Don Gagne committed
102 103 104
    
    /// Signalled when property has been changed by a call to the property write accessor
    ///
105 106
    /// This signal is meant for use by Fact container implementations.
    void _containerValueChanged(QVariant& value);
Don Gagne's avatar
Don Gagne committed
107 108
    
private:
Don Gagne's avatar
Don Gagne committed
109
    QString         _name;      ///< Fact name
Don Gagne's avatar
Don Gagne committed
110 111 112 113 114
    QVariant        _value;     ///< Fact value
    FactMetaData*   _metaData;  ///< FactMetaData object for Fact
};

#endif