FactValueGrid.h 5.79 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

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

37
    // defaultSettingsGroup:
38
    //  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
39
    //  prior to each use by the call to QGCCorePlugin::FactValueGridCreateDefaultSettings.
40

41
    // userSettingsGroup:
42 43 44
    //  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.

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

47 48
    Q_PROPERTY(QmlObjectListModel*  columns                         MEMBER _columns                                         NOTIFY columnsChanged)
    Q_PROPERTY(int                  rowCount                        MEMBER _rowCount                                        NOTIFY rowCountChanged)
49 50 51 52 53 54
    Q_PROPERTY(QString              userSettingsGroup               MEMBER _userSettingsGroup                               NOTIFY userSettingsGroupChanged)
    Q_PROPERTY(QString              defaultSettingsGroup            MEMBER _defaultSettingsGroup                            NOTIFY defaultSettingsGroupChanged)
    Q_PROPERTY(QStringList          iconNames                       READ iconNames                                          CONSTANT)
    Q_PROPERTY(FontSize             fontSize                        READ fontSize                       WRITE setFontSize   NOTIFY fontSizeChanged)
    Q_PROPERTY(QStringList          fontSizeNames                   MEMBER _fontSizeNames                                   CONSTANT)

55 56 57 58 59
    Q_INVOKABLE void                resetToDefaults (void);
    Q_INVOKABLE QmlObjectListModel* appendColumn    (void);
    Q_INVOKABLE void                deleteLastColumn(void);
    Q_INVOKABLE void                appendRow       (void);
    Q_INVOKABLE void                deleteLastRow   (void);
60

61
    QmlObjectListModel*         columns     (void) const { return _columns; }
62 63 64
    FontSize                    fontSize    (void) const { return _fontSize; }
    QStringList                 iconNames   (void) const { return _iconNames; }
    QGCMAVLink::VehicleClass_t  vehicleClass(void) const { return _vehicleClass; }
65 66 67 68 69 70 71 72 73 74

    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);
75 76
    void columnsChanged             (QmlObjectListModel* model);
    void rowCountChanged            (int rowCount);
77

78 79
protected:
    Q_DISABLE_COPY(FactValueGrid)
80

81 82 83 84 85
    QGCMAVLink::VehicleClass_t  _vehicleClass           = QGCMAVLink::VehicleClassGeneric;
    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
    FontSize                    _fontSize               = DefaultFontSize;
    bool                        _preventSaveSettings    = false;
86 87
    QmlObjectListModel*         _columns                = nullptr;
    int                         _rowCount               = 0;
88 89 90

private slots:
    void _offlineVehicleTypeChanged(void);
91 92 93 94 95

private:
    InstrumentValueData*    _createNewInstrumentValueWorker (QObject* parent);
    void                    _saveSettings                   (void);
    void                    _loadSettings                   (void);
96
    void                    _init                           (void);
97 98 99 100
    void                    _connectSaveSignals             (InstrumentValueData* value);
    QString                 _pascalCase                     (const QString& text);
    void                    _saveValueData                  (QSettings& settings, InstrumentValueData* value);
    void                    _loadValueData                  (QSettings& settings, InstrumentValueData* value);
101 102 103 104 105 106

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

    static const char* _versionKey;
107
    static const char* _columnsKey;
108
    static const char* _rowsKey;
109
    static const char* _rowCountKey;
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
    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;
};

125
QML_DECLARE_TYPE(FactValueGrid)
126

127
Q_DECLARE_METATYPE(FactValueGrid::FontSize)