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

#ifndef PlanElementController_H
#define PlanElementController_H

#include <QObject>

#include "Vehicle.h"
#include "MultiVehicleManager.h"

18 19
class PlanMasterController;

20 21 22 23 24 25 26
/// This is the abstract base clas for Plan Element controllers.
/// Examples of plan elements are: missions (MissionController), geofence (GeoFenceController)
class PlanElementController : public QObject
{
    Q_OBJECT
    
public:
27
    PlanElementController(PlanMasterController* masterController, QObject* parent = NULL);
28 29
    ~PlanElementController();
    
30 31 32
    Q_PROPERTY(bool containsItems   READ containsItems                  NOTIFY containsItemsChanged)    ///< true: Elemement is non-empty
    Q_PROPERTY(bool syncInProgress  READ syncInProgress                 NOTIFY syncInProgressChanged)   ///< true: information is currently being saved/sent, false: no active save/send in progress
    Q_PROPERTY(bool dirty           READ dirty          WRITE setDirty  NOTIFY dirtyChanged)            ///< true: unsaved/sent changes are present, false: no changes since last save/send
33

34 35
    /// Should be called immediately upon Component.onCompleted.
    ///     @param editMode true: controller being used in Plan view, false: controller being used in Fly view
36
    virtual void start(bool editMode);
37

38 39 40 41 42 43
    virtual void save(QJsonObject& json) = 0;
    virtual bool load(const QJsonObject& json, QString& errorString) = 0;
    virtual void loadFromVehicle(void) = 0;
    virtual void sendToVehicle(void) = 0;
    virtual void removeAll(void) = 0;                       ///< Removes all from controller only, synce required to remove from vehicle
    virtual void removeAllFromVehicle(void) = 0;            ///< Removes all from vehicle and controller
44

45 46 47 48
    virtual bool    containsItems  (void) const = 0;
    virtual bool    syncInProgress (void) const = 0;
    virtual bool    dirty          (void) const = 0;
    virtual void    setDirty       (bool dirty) = 0;
49

50 51
    /// Called when a new manager vehicle has been set. Derived classes should override to implement custom behavior.
    virtual void managerVehicleChanged(Vehicle* managerVehicle) = 0;
52

53
signals:
54
    void containsItemsChanged   (bool containsItems);
55 56
    void syncInProgressChanged  (bool syncInProgress);
    void dirtyChanged           (bool dirty);
57
    void vehicleChanged         (Vehicle* vehicle);
58 59

protected:
60 61 62
    PlanMasterController*   _masterController;
    Vehicle*                _controllerVehicle;
    Vehicle*                _managerVehicle;
63 64 65 66
    bool                    _editMode;
};

#endif