QGCWaypointListMulti.cc 2.35 KB
Newer Older
1 2
#include "QGCWaypointListMulti.h"
#include "ui_QGCWaypointListMulti.h"
3
#include "MultiVehicleManager.h"
4

5 6
void* QGCWaypointListMulti::_offlineUAS = NULL;

7 8
QGCWaypointListMulti::QGCWaypointListMulti(QWidget *parent) :
    QWidget(parent),
9
    _ui(new Ui::QGCWaypointListMulti)
10
{
11
    _ui->setupUi(this);
12
    setMinimumSize(600, 80);
13
    
14 15 16 17 18
    connect(MultiVehicleManager::instance(), &MultiVehicleManager::vehicleAdded, this, &QGCWaypointListMulti::_vehicleAdded);
    connect(MultiVehicleManager::instance(), &MultiVehicleManager::vehicleRemoved, this, &QGCWaypointListMulti::_vehicleRemoved);
    connect(MultiVehicleManager::instance(), &MultiVehicleManager::activeVehicleChanged, this, &QGCWaypointListMulti::_activeVehicleChanged);
    
    WaypointList* list = new WaypointList(_ui->stackedWidget, MultiVehicleManager::instance()->activeWaypointManager());
19 20
    _lists.insert(_offlineUAS, list);
    _ui->stackedWidget->addWidget(list);
21

22 23 24
    if (MultiVehicleManager::instance()->activeVehicle()) {
        _vehicleAdded(MultiVehicleManager::instance()->activeVehicle());
        _activeVehicleChanged(MultiVehicleManager::instance()->activeVehicle());
25
    }
26 27
}

28 29 30 31 32
QGCWaypointListMulti::~QGCWaypointListMulti()
{
    delete _ui;
}

33
void QGCWaypointListMulti::_vehicleRemoved(Vehicle* vehicle)
34
{
35 36 37
    // Do not dynamic cast or de-reference QObject, since object is either in destructor or may have already
    // been destroyed.

38 39 40
    if (vehicle) {
        UAS* uas = vehicle->uas();
        
41 42
        WaypointList* list = _lists.value(uas, NULL);
        if (list) {
43
            delete list;
44
            _lists.remove(uas);
45 46 47 48
        }
    }
}

49
void QGCWaypointListMulti::_vehicleAdded(Vehicle* vehicle)
50
{
51 52
    UAS* uas = vehicle->uas();
    
53 54 55
    WaypointList* list = new WaypointList(_ui->stackedWidget, uas->getWaypointManager());
    _lists.insert(uas, list);
    _ui->stackedWidget->addWidget(list);
56 57
}

58
void QGCWaypointListMulti::_activeVehicleChanged(Vehicle* vehicle)
59
{
60 61 62 63 64 65 66
    if (vehicle) {
        UAS* uas = vehicle->uas();
        
        WaypointList* list = _lists.value(uas, NULL);
        if (list) {
            _ui->stackedWidget->setCurrentWidget(list);
        }
67 68 69 70 71 72 73 74
    }
}

void QGCWaypointListMulti::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
75
        _ui->retranslateUi(this);
76 77 78 79 80
        break;
    default:
        break;
    }
}