FactValueGrid.h 5.86 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/****************************************************************************
 *
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

#pragma once

#include "FactSystem.h"
#include "QmlObjectListModel.h"
#include "QGCApplication.h"

16 17
#include <QGridLayout>
#include <QSettings>
18 19 20

class InstrumentValueData;

21
class FactValueGrid : public QQuickItem
22 23 24 25
{
    Q_OBJECT

public:
26 27
    FactValueGrid(QQuickItem *parent = nullptr);
    FactValueGrid(const QString& defaultSettingsGroup);
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

    enum Orientation {
        HorizontalOrientation=0,    // Labels will be to the left of the value
        VerticalOrientation         // Labels will be above the value
    };
    Q_ENUMS(Orientation)

    enum FontSize {
        DefaultFontSize=0,
        SmallFontSize,
        MediumFontSize,
        LargeFontSize,
    };
    Q_ENUMS(FontSize)

43
    // defaultSettingsGroup:
44
    //  This is the setting group name for default settings which are used when the user has not modified anything from the default setup. These settings will be overwritten
45
    //  prior to each use by the call to QGCCorePlugin::FactValueGridCreateDefaultSettings.
46

47
    // userSettingsGroup:
48 49 50
    //  This is the settings group name for user modified settings. Settings will be saved to here whenever the user modified anything. Also at that point in time the
    //  defaults settings group will be removed.

51
    // The combination of the two valuePage*SettingsGroup values allows each FactValueGrid to have it's own persistence space.
52

53 54
    Q_PROPERTY(QmlObjectListModel*  rows                            MEMBER _rows                                            NOTIFY rowsChanged)
    Q_PROPERTY(int                  columnCount                     MEMBER _columnCount                                     NOTIFY columnCountChanged)
55 56
    Q_PROPERTY(QString              userSettingsGroup               MEMBER _userSettingsGroup                               NOTIFY userSettingsGroupChanged)
    Q_PROPERTY(QString              defaultSettingsGroup            MEMBER _defaultSettingsGroup                            NOTIFY defaultSettingsGroupChanged)
57
    Q_PROPERTY(Orientation          orientation                     MEMBER _orientation                                     CONSTANT)
58 59 60 61
    Q_PROPERTY(QStringList          iconNames                       READ iconNames                                          CONSTANT)
    Q_PROPERTY(FontSize             fontSize                        READ fontSize                       WRITE setFontSize   NOTIFY fontSizeChanged)
    Q_PROPERTY(QStringList          fontSizeNames                   MEMBER _fontSizeNames                                   CONSTANT)

62 63 64 65 66
    Q_INVOKABLE void                resetToDefaults     (void);
    Q_INVOKABLE QmlObjectListModel* appendRow           (void);
    Q_INVOKABLE void                deleteLastRow       (void);
    Q_INVOKABLE void                appendColumn        (void);
    Q_INVOKABLE void                deleteLastColumn    (void);
67

68 69
    FontSize    fontSize    (void) const { return _fontSize; }
    QStringList iconNames   (void) const { return _iconNames; }
70 71 72 73 74 75 76 77 78 79

    void setFontSize(FontSize fontSize);

    // Override from QQmlParserStatus
    void componentComplete(void) final;

signals:
    void userSettingsGroupChanged   (const QString& userSettingsGroup);
    void defaultSettingsGroupChanged(const QString& defaultSettingsGroup);
    void fontSizeChanged            (FontSize fontSize);
80 81
    void rowsChanged                (QmlObjectListModel* model);
    void columnCountChanged         (int columnCount);
82

83
protected:
84

85
    Q_DISABLE_COPY(FactValueGrid)
86 87 88 89 90 91

    QString                 _defaultSettingsGroup;              // Settings group to read from if the user has not modified from the default settings
    QString                 _userSettingsGroup;                 // Settings group to read from for user modified settings
    Orientation             _orientation =          VerticalOrientation;
    FontSize                _fontSize =             DefaultFontSize;
    bool                    _preventSaveSettings =  false;
92 93 94 95 96 97 98 99 100 101 102 103
    QmlObjectListModel*     _rows =                 nullptr;
    int                     _columnCount =          0;

private:
    InstrumentValueData*    _createNewInstrumentValueWorker (QObject* parent);
    void                    _saveSettings                   (void);
    void                    _loadSettings                   (void);
    void                    _connectSignals                 (void);
    void                    _connectSaveSignals             (InstrumentValueData* value);
    QString                 _pascalCase                     (const QString& text);
    void                    _saveValueData                  (QSettings& settings, InstrumentValueData* value);
    void                    _loadValueData                  (QSettings& settings, InstrumentValueData* value);
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

    // These are user facing string for the various enums.
    static       QStringList _iconNames;
    static const QStringList _fontSizeNames;

    static const char* _versionKey;
    static const char* _rowsKey;
    static const char* _columnsKey;
    static const char* _orientationKey;
    static const char* _fontSizeKey;
    static const char* _factGroupNameKey;
    static const char* _factNameKey;
    static const char* _textKey;
    static const char* _showUnitsKey;
    static const char* _iconKey;
    static const char* _rangeTypeKey;
    static const char* _rangeValuesKey;
    static const char* _rangeColorsKey;
    static const char* _rangeIconsKey;
    static const char* _rangeOpacitiesKey;

    static const char* _deprecatedGroupKey;
};

128
QML_DECLARE_TYPE(FactValueGrid)
129

130 131
Q_DECLARE_METATYPE(FactValueGrid::FontSize)
Q_DECLARE_METATYPE(FactValueGrid::Orientation)