AirspaceRulesetsProvider.h 3.27 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/****************************************************************************
 *
 *   (c) 2017 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

//-----------------------------------------------------------------------------
/**
 * @class AirspaceRulesetsProvider
 * Base class that queries for airspace rulesets
 */

Gus Grubba's avatar
Gus Grubba committed
18 19
#include "QmlObjectListModel.h"

20
#include <QObject>
Gus Grubba's avatar
Gus Grubba committed
21
#include <QGeoCoordinate>
22

Gus Grubba's avatar
Gus Grubba committed
23 24 25 26 27
//-----------------------------------------------------------------------------
class AirspaceRule : public QObject
{
    Q_OBJECT
public:
28 29

    enum SelectionType {
Gus Grubba's avatar
Gus Grubba committed
30 31 32
      Pickone,              ///< One rule from the overall set needs to be picked.
      Required,             ///< Satisfying the RuleSet is required.
      Optional              ///< Satisfying the RuleSet is not required.
33 34 35 36
    };

    Q_ENUM(SelectionType)

Gus Grubba's avatar
Gus Grubba committed
37 38
    AirspaceRule(QObject* parent = NULL);

39 40
    Q_PROPERTY(QString          id              READ id             CONSTANT)
    Q_PROPERTY(QString          name            READ name           CONSTANT)
Gus Grubba's avatar
Gus Grubba committed
41
    Q_PROPERTY(QString          shortName       READ shortName      CONSTANT)
42 43 44
    Q_PROPERTY(QString          description     READ description    CONSTANT)
    Q_PROPERTY(bool             isDefault       READ isDefault      CONSTANT)
    Q_PROPERTY(SelectionType    selectionType   READ selectionType  CONSTANT)
Gus Grubba's avatar
Gus Grubba committed
45
    Q_PROPERTY(bool             selected        READ selected       WRITE setSelected   NOTIFY selectedChanged)
Gus Grubba's avatar
Gus Grubba committed
46

47 48 49 50
    virtual QString         id              () = 0;
    virtual QString         description     () = 0;
    virtual bool            isDefault       () = 0;
    virtual QString         name            () = 0;
Gus Grubba's avatar
Gus Grubba committed
51
    virtual QString         shortName       () = 0;
52
    virtual SelectionType   selectionType   () = 0;
Gus Grubba's avatar
Gus Grubba committed
53 54 55 56 57 58
    virtual bool            selected        () = 0;
    virtual void            setSelected     (bool sel) = 0;

signals:
    void    selectedChanged                 ();

Gus Grubba's avatar
Gus Grubba committed
59 60 61
};

//-----------------------------------------------------------------------------
62 63 64
class AirspaceRulesetsProvider : public QObject {
    Q_OBJECT
public:
Gus Grubba's avatar
Gus Grubba committed
65 66 67
    AirspaceRulesetsProvider        (QObject* parent = NULL);
    ~AirspaceRulesetsProvider       () = default;

68
    Q_PROPERTY(bool                 valid           READ valid          NOTIFY rulesChanged)
69
    Q_PROPERTY(QString              selectedRules   READ selectedRules  NOTIFY selectedRulesChanged)
70
    Q_PROPERTY(QmlObjectListModel*  rules           READ rules          NOTIFY rulesChanged)
Gus Grubba's avatar
Gus Grubba committed
71

72 73
    virtual bool                valid       () = 0;             ///< Current ruleset is valid
    virtual QmlObjectListModel* rules       () = 0;             ///< List of AirspaceRule
74
    virtual QString            selectedRules() = 0;             ///< All selected rules concatenated into a string
75
    /**
Gus Grubba's avatar
Gus Grubba committed
76
     * Set region of interest that should be queried. When finished, the rulesChanged() signal will be emmited.
77 78
     * @param center Center coordinate for ROI
     */
Gus Grubba's avatar
Gus Grubba committed
79 80
    virtual void        setROI      (const QGeoCoordinate& center) = 0;

81
signals:
Gus Grubba's avatar
Gus Grubba committed
82
    void rulesChanged               ();
83
    void selectedRulesChanged       ();
84 85
};