Commit 1ad7da2c authored by Don Gagne's avatar Don Gagne

Allow param edit with missing parameters

parent d3c5ae23
...@@ -30,17 +30,18 @@ ...@@ -30,17 +30,18 @@
#include "MainWindow.h" #include "MainWindow.h"
#include "ParameterLoader.h" #include "ParameterLoader.h"
AutoPilotPlugin::AutoPilotPlugin(Vehicle* vehicle, QObject* parent) : AutoPilotPlugin::AutoPilotPlugin(Vehicle* vehicle, QObject* parent)
QObject(parent), : QObject(parent)
_vehicle(vehicle), , _vehicle(vehicle)
_pluginReady(false), , _parametersReady(false)
_setupComplete(false) , _missingParameters(false)
, _setupComplete(false)
{ {
Q_ASSERT(vehicle); Q_ASSERT(vehicle);
connect(_vehicle->uas(), &UASInterface::disconnected, this, &AutoPilotPlugin::_uasDisconnected); connect(_vehicle->uas(), &UASInterface::disconnected, this, &AutoPilotPlugin::_uasDisconnected);
connect(this, &AutoPilotPlugin::pluginReadyChanged, this, &AutoPilotPlugin::_pluginReadyChanged); connect(this, &AutoPilotPlugin::parametersReadyChanged, this, &AutoPilotPlugin::_parametersReadyChanged);
} }
AutoPilotPlugin::~AutoPilotPlugin() AutoPilotPlugin::~AutoPilotPlugin()
...@@ -50,13 +51,13 @@ AutoPilotPlugin::~AutoPilotPlugin() ...@@ -50,13 +51,13 @@ AutoPilotPlugin::~AutoPilotPlugin()
void AutoPilotPlugin::_uasDisconnected(void) void AutoPilotPlugin::_uasDisconnected(void)
{ {
_pluginReady = false; _parametersReady = false;
emit pluginReadyChanged(_pluginReady); emit parametersReadyChanged(_parametersReady);
} }
void AutoPilotPlugin::_pluginReadyChanged(bool pluginReady) void AutoPilotPlugin::_parametersReadyChanged(bool parametersReady)
{ {
if (pluginReady) { if (parametersReady) {
_recalcSetupComplete(); _recalcSetupComplete();
if (!_setupComplete) { if (!_setupComplete) {
QGCMessageBox::warning("Setup", "One or more vehicle components require setup prior to flight."); QGCMessageBox::warning("Setup", "One or more vehicle components require setup prior to flight.");
...@@ -92,7 +93,7 @@ void AutoPilotPlugin::_recalcSetupComplete(void) ...@@ -92,7 +93,7 @@ void AutoPilotPlugin::_recalcSetupComplete(void)
bool AutoPilotPlugin::setupComplete(void) bool AutoPilotPlugin::setupComplete(void)
{ {
Q_ASSERT(_pluginReady); Q_ASSERT(_parametersReady);
return _setupComplete; return _setupComplete;
} }
......
...@@ -54,8 +54,11 @@ public: ...@@ -54,8 +54,11 @@ public:
AutoPilotPlugin(Vehicle* vehicle, QObject* parent); AutoPilotPlugin(Vehicle* vehicle, QObject* parent);
~AutoPilotPlugin(); ~AutoPilotPlugin();
/// true: plugin is ready for use, plugin should no longer be used /// true: parameters are ready for use
Q_PROPERTY(bool pluginReady READ pluginReady NOTIFY pluginReadyChanged) Q_PROPERTY(bool parametersReady READ parametersReady NOTIFY parametersReadyChanged)
/// true: parameters are missing from firmware response, false: all parameters received from firmware
Q_PROPERTY(bool missingParameters READ missingParameters NOTIFY missingParametersChanged)
/// List of VehicleComponent objects /// List of VehicleComponent objects
Q_PROPERTY(QVariantList vehicleComponents READ vehicleComponents CONSTANT) Q_PROPERTY(QVariantList vehicleComponents READ vehicleComponents CONSTANT)
...@@ -113,13 +116,15 @@ public: ...@@ -113,13 +116,15 @@ public:
static void clearStaticData(void); static void clearStaticData(void);
// Property accessors // Property accessors
bool pluginReady(void) { return _pluginReady; } bool parametersReady(void) { return _parametersReady; }
bool missingParameters(void) { return _missingParameters; }
bool setupComplete(void); bool setupComplete(void);
Vehicle* vehicle(void) { return _vehicle; } Vehicle* vehicle(void) { return _vehicle; }
signals: signals:
void pluginReadyChanged(bool pluginReady); void parametersReadyChanged(bool parametersReady);
void missingParametersChanged(bool missingParameters);
void setupCompleteChanged(bool setupComplete); void setupCompleteChanged(bool setupComplete);
void parameterListProgress(float value); void parameterListProgress(float value);
...@@ -131,12 +136,13 @@ protected: ...@@ -131,12 +136,13 @@ protected:
virtual ParameterLoader* _getParameterLoader(void) = 0; virtual ParameterLoader* _getParameterLoader(void) = 0;
Vehicle* _vehicle; Vehicle* _vehicle;
bool _pluginReady; bool _parametersReady;
bool _missingParameters;
bool _setupComplete; bool _setupComplete;
private slots: private slots:
void _uasDisconnected(void); void _uasDisconnected(void);
void _pluginReadyChanged(bool pluginReady); void _parametersReadyChanged(bool parametersReady);
private: private:
void _recalcSetupComplete(void); void _recalcSetupComplete(void);
......
...@@ -34,7 +34,7 @@ GenericAutoPilotPlugin::GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent ...@@ -34,7 +34,7 @@ GenericAutoPilotPlugin::GenericAutoPilotPlugin(Vehicle* vehicle, QObject* parent
_parameterFacts = new GenericParameterFacts(this, vehicle, this); _parameterFacts = new GenericParameterFacts(this, vehicle, this);
Q_CHECK_PTR(_parameterFacts); Q_CHECK_PTR(_parameterFacts);
connect(_parameterFacts, &GenericParameterFacts::parametersReady, this, &GenericAutoPilotPlugin::_parametersReady); connect(_parameterFacts, &GenericParameterFacts::parametersReady, this, &GenericAutoPilotPlugin::_parametersReadySlot);
connect(_parameterFacts, &GenericParameterFacts::parameterListProgress, this, &GenericAutoPilotPlugin::parameterListProgress); connect(_parameterFacts, &GenericParameterFacts::parameterListProgress, this, &GenericAutoPilotPlugin::parameterListProgress);
} }
...@@ -50,8 +50,10 @@ const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void) ...@@ -50,8 +50,10 @@ const QVariantList& GenericAutoPilotPlugin::vehicleComponents(void)
return emptyList; return emptyList;
} }
void GenericAutoPilotPlugin::_parametersReady(void) void GenericAutoPilotPlugin::_parametersReadySlot(bool missingParameters)
{ {
_pluginReady = true; _parametersReady = true;
emit pluginReadyChanged(_pluginReady); _missingParameters = missingParameters;
emit missingParametersChanged(_missingParameters);
emit parametersReadyChanged(_parametersReady);
} }
...@@ -45,7 +45,7 @@ public: ...@@ -45,7 +45,7 @@ public:
static void clearStaticData(void); static void clearStaticData(void);
private slots: private slots:
void _parametersReady(void); void _parametersReadySlot(bool missingParameters);
private: private:
// Overrides from AutoPilotPlugin // Overrides from AutoPilotPlugin
......
...@@ -79,7 +79,7 @@ PX4AutoPilotPlugin::PX4AutoPilotPlugin(Vehicle* vehicle, QObject* parent) : ...@@ -79,7 +79,7 @@ PX4AutoPilotPlugin::PX4AutoPilotPlugin(Vehicle* vehicle, QObject* parent) :
_parameterFacts = new PX4ParameterLoader(this, vehicle, this); _parameterFacts = new PX4ParameterLoader(this, vehicle, this);
Q_CHECK_PTR(_parameterFacts); Q_CHECK_PTR(_parameterFacts);
connect(_parameterFacts, &PX4ParameterLoader::parametersReady, this, &PX4AutoPilotPlugin::_pluginReadyPreChecks); connect(_parameterFacts, &PX4ParameterLoader::parametersReady, this, &PX4AutoPilotPlugin::_parametersReadyPreChecks);
connect(_parameterFacts, &PX4ParameterLoader::parameterListProgress, this, &PX4AutoPilotPlugin::parameterListProgress); connect(_parameterFacts, &PX4ParameterLoader::parameterListProgress, this, &PX4AutoPilotPlugin::parameterListProgress);
_airframeFacts = new PX4AirframeLoader(this, _vehicle->uas(), this); _airframeFacts = new PX4AirframeLoader(this, _vehicle->uas(), this);
...@@ -106,7 +106,7 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void) ...@@ -106,7 +106,7 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void)
if (_components.count() == 0 && !_incorrectParameterVersion) { if (_components.count() == 0 && !_incorrectParameterVersion) {
Q_ASSERT(_vehicle); Q_ASSERT(_vehicle);
if (pluginReady()) { if (parametersReady()) {
_airframeComponent = new AirframeComponent(_vehicle->uas(), this); _airframeComponent = new AirframeComponent(_vehicle->uas(), this);
Q_CHECK_PTR(_airframeComponent); Q_CHECK_PTR(_airframeComponent);
_airframeComponent->setupTriggerSignals(); _airframeComponent->setupTriggerSignals();
...@@ -137,7 +137,7 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void) ...@@ -137,7 +137,7 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void)
_safetyComponent->setupTriggerSignals(); _safetyComponent->setupTriggerSignals();
_components.append(QVariant::fromValue((VehicleComponent*)_safetyComponent)); _components.append(QVariant::fromValue((VehicleComponent*)_safetyComponent));
} else { } else {
qWarning() << "Call to vehicleCompenents prior to pluginReady"; qWarning() << "Call to vehicleCompenents prior to parametersReady";
} }
} }
...@@ -145,7 +145,7 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void) ...@@ -145,7 +145,7 @@ const QVariantList& PX4AutoPilotPlugin::vehicleComponents(void)
} }
/// This will perform various checks prior to signalling that the plug in ready /// This will perform various checks prior to signalling that the plug in ready
void PX4AutoPilotPlugin::_pluginReadyPreChecks(void) void PX4AutoPilotPlugin::_parametersReadyPreChecks(bool missingParameters)
{ {
// Check for older parameter version set // Check for older parameter version set
// FIXME: Firmware is moving to version stamp parameter set. Once that is complete the version stamp // FIXME: Firmware is moving to version stamp parameter set. Once that is complete the version stamp
...@@ -156,6 +156,8 @@ void PX4AutoPilotPlugin::_pluginReadyPreChecks(void) ...@@ -156,6 +156,8 @@ void PX4AutoPilotPlugin::_pluginReadyPreChecks(void)
"Please perform a Firmware Upgrade if you wish to use Vehicle Setup."); "Please perform a Firmware Upgrade if you wish to use Vehicle Setup.");
} }
_pluginReady = true; _parametersReady = true;
emit pluginReadyChanged(_pluginReady); _missingParameters = missingParameters;
emit missingParametersChanged(_missingParameters);
emit parametersReadyChanged(_parametersReady);
} }
...@@ -63,7 +63,7 @@ public: ...@@ -63,7 +63,7 @@ public:
PowerComponent* powerComponent(void) { return _powerComponent; } PowerComponent* powerComponent(void) { return _powerComponent; }
private slots: private slots:
void _pluginReadyPreChecks(void); void _parametersReadyPreChecks(bool missingParameters);
private: private:
// Overrides from AutoPilotPlugin // Overrides from AutoPilotPlugin
......
...@@ -43,7 +43,8 @@ FactPanelController::FactPanelController(void) : ...@@ -43,7 +43,8 @@ FactPanelController::FactPanelController(void) :
_autopilot = _vehicle->autopilotPlugin(); _autopilot = _vehicle->autopilotPlugin();
Q_ASSERT(_autopilot); Q_ASSERT(_autopilot);
Q_ASSERT(_autopilot->pluginReady()); Q_ASSERT(_autopilot->parametersReady());
Q_ASSERT(!_autopilot->missingParameters());
// Do a delayed check for the _factPanel finally being set correctly from Qml // Do a delayed check for the _factPanel finally being set correctly from Qml
QTimer::singleShot(1000, this, &FactPanelController::_checkForMissingFactPanel); QTimer::singleShot(1000, this, &FactPanelController::_checkForMissingFactPanel);
......
...@@ -771,12 +771,12 @@ void ParameterLoader::_checkInitialLoadComplete(void) ...@@ -771,12 +771,12 @@ void ParameterLoader::_checkInitialLoadComplete(void)
"If you are using modified firmware, you may need to resolve any vehicle startup errors to resolve the issue. " "If you are using modified firmware, you may need to resolve any vehicle startup errors to resolve the issue. "
"If you are using standard firmware, you may need to upgrade to a newer version to resolve the issue."); "If you are using standard firmware, you may need to upgrade to a newer version to resolve the issue.");
qCWarning(ParameterLoaderLog) << "The following parameter indices could not be loaded after the maximum number of retries: " << indexList; qCWarning(ParameterLoaderLog) << "The following parameter indices could not be loaded after the maximum number of retries: " << indexList;
emit parametersReady(true);
} else { } else {
// No failed parameters, ok to signal ready // No failed parameters, ok to signal ready
_parametersReady = true; _parametersReady = true;
_determineDefaultComponentId(); _determineDefaultComponentId();
_setupGroupMap(); _setupGroupMap();
emit parametersReady(); emit parametersReady(false);
} }
} }
...@@ -91,7 +91,7 @@ public: ...@@ -91,7 +91,7 @@ public:
signals: signals:
/// Signalled when the full set of facts are ready /// Signalled when the full set of facts are ready
void parametersReady(void); void parametersReady(bool missingParameters);
/// Signalled to update progress of full parameter list request /// Signalled to update progress of full parameter list request
void parameterListProgress(float value); void parameterListProgress(float value);
......
...@@ -72,7 +72,7 @@ bool MultiVehicleManager::notifyHeartbeatInfo(LinkInterface* link, int vehicleId ...@@ -72,7 +72,7 @@ bool MultiVehicleManager::notifyHeartbeatInfo(LinkInterface* link, int vehicleId
} }
connect(vehicle, &Vehicle::allLinksDisconnected, this, &MultiVehicleManager::_deleteVehiclePhase1); connect(vehicle, &Vehicle::allLinksDisconnected, this, &MultiVehicleManager::_deleteVehiclePhase1);
connect(vehicle->autopilotPlugin(), &AutoPilotPlugin::pluginReadyChanged, this, &MultiVehicleManager::_autopilotPluginReadyChanged); connect(vehicle->autopilotPlugin(), &AutoPilotPlugin::parametersReadyChanged, this, &MultiVehicleManager::_autopilotParametersReadyChanged);
_vehicles.append(vehicle); _vehicles.append(vehicle);
...@@ -138,7 +138,7 @@ void MultiVehicleManager::_deleteVehiclePhase2 (void) ...@@ -138,7 +138,7 @@ void MultiVehicleManager::_deleteVehiclePhase2 (void)
if (_activeVehicle) { if (_activeVehicle) {
_activeVehicle->setActive(true); _activeVehicle->setActive(true);
emit activeVehicleAvailableChanged(true); emit activeVehicleAvailableChanged(true);
if (_activeVehicle->autopilotPlugin()->pluginReady()) { if (_activeVehicle->autopilotPlugin()->parametersReady()) {
emit parameterReadyVehicleAvailableChanged(true); emit parameterReadyVehicleAvailableChanged(true);
} }
} }
...@@ -181,14 +181,14 @@ void MultiVehicleManager::_setActiveVehiclePhase2(void) ...@@ -181,14 +181,14 @@ void MultiVehicleManager::_setActiveVehiclePhase2(void)
_activeVehicleAvailable = true; _activeVehicleAvailable = true;
emit activeVehicleAvailableChanged(true); emit activeVehicleAvailableChanged(true);
if (_activeVehicle->autopilotPlugin()->pluginReady()) { if (_activeVehicle->autopilotPlugin()->parametersReady()) {
_parameterReadyVehicleAvailable = true; _parameterReadyVehicleAvailable = true;
emit parameterReadyVehicleAvailableChanged(true); emit parameterReadyVehicleAvailableChanged(true);
} }
} }
} }
void MultiVehicleManager::_autopilotPluginReadyChanged(bool pluginReady) void MultiVehicleManager::_autopilotParametersReadyChanged(bool parametersReady)
{ {
AutoPilotPlugin* autopilot = dynamic_cast<AutoPilotPlugin*>(sender()); AutoPilotPlugin* autopilot = dynamic_cast<AutoPilotPlugin*>(sender());
...@@ -198,8 +198,8 @@ void MultiVehicleManager::_autopilotPluginReadyChanged(bool pluginReady) ...@@ -198,8 +198,8 @@ void MultiVehicleManager::_autopilotPluginReadyChanged(bool pluginReady)
} }
if (autopilot->vehicle() == _activeVehicle) { if (autopilot->vehicle() == _activeVehicle) {
_parameterReadyVehicleAvailable = pluginReady; _parameterReadyVehicleAvailable = parametersReady;
emit parameterReadyVehicleAvailableChanged(pluginReady); emit parameterReadyVehicleAvailableChanged(parametersReady);
} }
} }
......
...@@ -92,7 +92,7 @@ private slots: ...@@ -92,7 +92,7 @@ private slots:
void _deleteVehiclePhase1(Vehicle* vehicle); void _deleteVehiclePhase1(Vehicle* vehicle);
void _deleteVehiclePhase2(void); void _deleteVehiclePhase2(void);
void _setActiveVehiclePhase2(void); void _setActiveVehiclePhase2(void);
void _autopilotPluginReadyChanged(bool pluginReady); void _autopilotParametersReadyChanged(bool parametersReady);
private: private:
/// All access to singleton is through MultiVehicleManager::instance /// All access to singleton is through MultiVehicleManager::instance
......
...@@ -95,6 +95,7 @@ Vehicle::Vehicle(LinkInterface* link, int vehicleId, MAV_AUTOPILOT firmwareType) ...@@ -95,6 +95,7 @@ Vehicle::Vehicle(LinkInterface* link, int vehicleId, MAV_AUTOPILOT firmwareType)
connect(_mavlink, &MAVLinkProtocol::messageReceived, this, &Vehicle::_mavlinkMessageReceived); connect(_mavlink, &MAVLinkProtocol::messageReceived, this, &Vehicle::_mavlinkMessageReceived);
connect(this, &Vehicle::_sendMessageOnThread, this, &Vehicle::_sendMessage, Qt::QueuedConnection); connect(this, &Vehicle::_sendMessageOnThread, this, &Vehicle::_sendMessage, Qt::QueuedConnection);
connect(this, &Vehicle::_sendMessageOnThread, this, &Vehicle::_sendMessage, Qt::QueuedConnection);
_uas = new UAS(_mavlink, this); _uas = new UAS(_mavlink, this);
...@@ -106,6 +107,8 @@ Vehicle::Vehicle(LinkInterface* link, int vehicleId, MAV_AUTOPILOT firmwareType) ...@@ -106,6 +107,8 @@ Vehicle::Vehicle(LinkInterface* link, int vehicleId, MAV_AUTOPILOT firmwareType)
_firmwarePlugin = FirmwarePluginManager::instance()->firmwarePluginForAutopilot(firmwareType); _firmwarePlugin = FirmwarePluginManager::instance()->firmwarePluginForAutopilot(firmwareType);
_autopilotPlugin = AutoPilotPluginManager::instance()->newAutopilotPluginForVehicle(this); _autopilotPlugin = AutoPilotPluginManager::instance()->newAutopilotPluginForVehicle(this);
connect(_autopilotPlugin, &AutoPilotPlugin::missingParametersChanged, this, &Vehicle::missingParametersChanged);
// Refresh timer // Refresh timer
connect(_refreshTimer, SIGNAL(timeout()), this, SLOT(_checkUpdate())); connect(_refreshTimer, SIGNAL(timeout()), this, SLOT(_checkUpdate()));
...@@ -1058,3 +1061,8 @@ void Vehicle::setHilMode(bool hilMode) ...@@ -1058,3 +1061,8 @@ void Vehicle::setHilMode(bool hilMode)
mavlink_msg_set_mode_pack(_mavlink->getSystemId(), _mavlink->getComponentId(), &msg, id(), newBaseMode, _custom_mode); mavlink_msg_set_mode_pack(_mavlink->getSystemId(), _mavlink->getComponentId(), &msg, id(), newBaseMode, _custom_mode);
sendMessage(msg); sendMessage(msg);
} }
bool Vehicle::missingParameters(void)
{
return _autopilotPlugin->missingParameters();
}
...@@ -71,6 +71,8 @@ public: ...@@ -71,6 +71,8 @@ public:
Q_PROPERTY(bool hilMode READ hilMode WRITE setHilMode NOTIFY hilModeChanged) Q_PROPERTY(bool hilMode READ hilMode WRITE setHilMode NOTIFY hilModeChanged)
Q_PROPERTY(bool missingParameters READ missingParameters NOTIFY missingParametersChanged)
Q_INVOKABLE QString getMavIconColor(); Q_INVOKABLE QString getMavIconColor();
//-- System Messages //-- System Messages
...@@ -178,6 +180,8 @@ public: ...@@ -178,6 +180,8 @@ public:
bool hilMode(void); bool hilMode(void);
void setHilMode(bool hilMode); void setHilMode(bool hilMode);
bool missingParameters(void);
typedef enum { typedef enum {
MessageNone, MessageNone,
MessageNormal, MessageNormal,
...@@ -248,6 +252,7 @@ signals: ...@@ -248,6 +252,7 @@ signals:
void armedChanged(bool armed); void armedChanged(bool armed);
void flightModeChanged(const QString& flightMode); void flightModeChanged(const QString& flightMode);
void hilModeChanged(bool hilMode); void hilModeChanged(bool hilMode);
void missingParametersChanged(bool missingParameters);
/// Used internally to move sendMessage call to main thread /// Used internally to move sendMessage call to main thread
void _sendMessageOnThread(mavlink_message_t message); void _sendMessageOnThread(mavlink_message_t message);
......
...@@ -51,10 +51,14 @@ Rectangle { ...@@ -51,10 +51,14 @@ Rectangle {
property string messagePanelText: "missing message panel text" property string messagePanelText: "missing message panel text"
readonly property string armedVehicleText: "This operation cannot be performed while vehicle is armed." readonly property string armedVehicleText: "This operation cannot be performed while vehicle is armed."
property bool fullParameterVehicleAvailable: multiVehicleManager.parameterReadyVehicleAvailable && !multiVehicleManager.activeVehicle.missingParameters
function showSummaryPanel() function showSummaryPanel()
{ {
if (multiVehicleManager.parameterReadyVehicleAvailable) { if (fullParameterVehicleAvailable) {
panelLoader.source = "VehicleSummary.qml"; panelLoader.source = "VehicleSummary.qml";
} else if (multiVehicleManager.parameterReadyVehicleAvailable) {
panelLoader.sourceComponent = missingParametersVehicleSummaryComponent
} else { } else {
panelLoader.sourceComponent = disconnectedVehicleSummaryComponent panelLoader.sourceComponent = disconnectedVehicleSummaryComponent
} }
...@@ -137,6 +141,27 @@ Rectangle { ...@@ -137,6 +141,27 @@ Rectangle {
} }
} }
Component {
id: missingParametersVehicleSummaryComponent
Rectangle {
color: palette.windowShade
QGCLabel {
anchors.margins: defaultTextWidth * 2
anchors.fill: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
wrapMode: Text.WordWrap
font.pixelSize: ScreenTools.mediumFontPixelSize
text: "You are currently connected to a vehicle, but that vehicle did not return back the full parameter list. " +
"Because of this the full set of vehicle setup options are not available."
onLinkActivated: Qt.openUrlExternally(link)
}
}
}
Component { Component {
id: messagePanelComponent id: messagePanelComponent
...@@ -194,14 +219,14 @@ Rectangle { ...@@ -194,14 +219,14 @@ Rectangle {
setupIndicator: true setupIndicator: true
setupComplete: joystickManager.activeJoystick ? joystickManager.activeJoystick.calibrated : false setupComplete: joystickManager.activeJoystick ? joystickManager.activeJoystick.calibrated : false
exclusiveGroup: setupButtonGroup exclusiveGroup: setupButtonGroup
visible: multiVehicleManager.parameterReadyVehicleAvailable && joystickManager.joysticks.length != 0 visible: fullParameterVehicleAvailable && joystickManager.joysticks.length != 0
text: "JOYSTICK" text: "JOYSTICK"
onClicked: showJoystickPanel() onClicked: showJoystickPanel()
} }
Repeater { Repeater {
model: multiVehicleManager.parameterReadyVehicleAvailable ? multiVehicleManager.activeVehicle.autopilot.vehicleComponents : 0 model: fullParameterVehicleAvailable ? multiVehicleManager.activeVehicle.autopilot.vehicleComponents : 0
SubMenuButton { SubMenuButton {
width: buttonWidth width: buttonWidth
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment