diff --git a/src/FirmwarePlugin/FirmwarePlugin.h b/src/FirmwarePlugin/FirmwarePlugin.h index 461020d514b4ac711c733267e08ad7c8a02649e3..07971cd226a865a7f55763bba7883fd59091984b 100644 --- a/src/FirmwarePlugin/FirmwarePlugin.h +++ b/src/FirmwarePlugin/FirmwarePlugin.h @@ -79,7 +79,8 @@ public: /// free when no longer needed. virtual QList componentsForVehicle(AutoPilotPlugin* vehicle); - /// Returns the list of available flight modes + /// Returns the list of available flight modes. Flight modes can be different in normal/advanced ui mode. + /// Call will be made again if advanced mode changes. virtual QStringList flightModes(Vehicle* vehicle) { Q_UNUSED(vehicle); return QStringList(); diff --git a/src/Vehicle/Vehicle.cc b/src/Vehicle/Vehicle.cc index fbbb2890aa5e3e667dcff22fce29150367c7b68e..38cac87fe629e1b34b147f827df6bcb198b439ea 100644 --- a/src/Vehicle/Vehicle.cc +++ b/src/Vehicle/Vehicle.cc @@ -418,6 +418,9 @@ void Vehicle::_commonInit(void) connect(_settingsManager->appSettings()->offlineEditingCruiseSpeed(), &Fact::rawValueChanged, this, &Vehicle::_offlineCruiseSpeedSettingChanged); connect(_settingsManager->appSettings()->offlineEditingHoverSpeed(), &Fact::rawValueChanged, this, &Vehicle::_offlineHoverSpeedSettingChanged); + // Flight modes can differ based on advanced mode + connect(_toolbox->corePlugin(), &QGCCorePlugin::showAdvancedUIChanged, this, &Vehicle::flightModesChanged); + // Build FactGroup object model _addFact(&_rollFact, _rollFactName); diff --git a/src/Vehicle/Vehicle.h b/src/Vehicle/Vehicle.h index 827444ac6e83d91111effc8c2d81d8298a58391b..2059b7eb23c5668a69730be1b181baf14761c484 100644 --- a/src/Vehicle/Vehicle.h +++ b/src/Vehicle/Vehicle.h @@ -315,7 +315,7 @@ public: Q_PROPERTY(bool armed READ armed WRITE setArmed NOTIFY armedChanged) Q_PROPERTY(bool autoDisarm READ autoDisarm NOTIFY autoDisarmChanged) Q_PROPERTY(bool flightModeSetAvailable READ flightModeSetAvailable CONSTANT) - Q_PROPERTY(QStringList flightModes READ flightModes CONSTANT) + Q_PROPERTY(QStringList flightModes READ flightModes NOTIFY flightModesChanged) Q_PROPERTY(QString flightMode READ flightMode WRITE setFlightMode NOTIFY flightModeChanged) Q_PROPERTY(bool hilMode READ hilMode WRITE setHilMode NOTIFY hilModeChanged) Q_PROPERTY(QmlObjectListModel* trajectoryPoints READ trajectoryPoints CONSTANT) @@ -860,6 +860,7 @@ signals: void telemetryLNoiseChanged (int value); void telemetryRNoiseChanged (int value); void autoDisarmChanged (void); + void flightModesChanged (void); void firmwareVersionChanged(void); void firmwareCustomVersionChanged(void); diff --git a/src/ui/toolbar/ModeIndicator.qml b/src/ui/toolbar/ModeIndicator.qml index 358a8897f39fe2e52e30348cfcab537e2607aec9..bb540ceec8be2a33982be59393e2401f135bf399 100644 --- a/src/ui/toolbar/ModeIndicator.qml +++ b/src/ui/toolbar/ModeIndicator.qml @@ -24,7 +24,10 @@ Item { anchors.bottom: parent.bottom width: flightModeSelector.width - property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var _activeVehicle: QGroundControl.multiVehicleManager.activeVehicle + property var _flightModes: _activeVehicle ? _activeVehicle.flightModes : [ ] + + on_FlightModesChanged: flightModeSelector.updateFlightModesMenu() QGCLabel { id: flightModeSelector @@ -50,18 +53,14 @@ Item { } flightModesMenuItems.length = 0 // Add new items - for (var i = 0; i < _activeVehicle.flightModes.length; i++) { - var menuItem = flightModeMenuItemComponent.createObject(null, { "text": _activeVehicle.flightModes[i] }) + for (var i = 0; i < _flightModes.length; i++) { + var menuItem = flightModeMenuItemComponent.createObject(null, { "text": _flightModes[i] }) flightModesMenuItems.push(menuItem) flightModesMenu.insertItem(i, menuItem) } } } Component.onCompleted: flightModeSelector.updateFlightModesMenu() - Connections { - target: QGroundControl.multiVehicleManager - onActiveVehicleChanged: flightModeSelector.updateFlightModesMenu() - } MouseArea { visible: _activeVehicle && _activeVehicle.flightModeSetAvailable anchors.fill: parent