diff --git a/src/FactSystem/ParameterManager.cc b/src/FactSystem/ParameterManager.cc index e27729f3fd3c12b8e1f40349024ea68fdb3ee1c0..6c1197cac138a7193e5548d74c3ff61dbcfc218f 100644 --- a/src/FactSystem/ParameterManager.cc +++ b/src/FactSystem/ParameterManager.cc @@ -47,6 +47,7 @@ ParameterManager::ParameterManager(Vehicle* vehicle) : QObject(vehicle) , _vehicle(vehicle) , _mavlink(NULL) + , _loadProgress(0.0) , _parametersReady(false) , _missingParameters(false) , _initialLoadComplete(false) @@ -247,10 +248,10 @@ void ParameterManager::_parameterUpdate(int vehicleId, int componentId, QString // We are no longer waiting for any reads to complete if (_prevWaitingReadParamIndexCount + _prevWaitingReadParamNameCount != 0) { // Set progress to 0 if not already there - emit parameterListProgress(0); + _setLoadProgress(0.0); } } else { - emit parameterListProgress((float)(_totalParamCount - readWaitingParamCount) / (float)_totalParamCount); + _setLoadProgress((double)(_totalParamCount - readWaitingParamCount) / (double)_totalParamCount); } // Get parameter set version @@ -801,13 +802,13 @@ void ParameterManager::_tryCacheHashLoad(int vehicleId, int componentId, QVarian ani->setDuration(750); connect(ani, &QVariantAnimation::valueChanged, [this](const QVariant &value) { - emit parameterListProgress(value.toFloat()); + _setLoadProgress(value.toDouble()); }); // Hide 500ms after animation finishes connect(ani, &QVariantAnimation::finished, [this](){ QTimer::singleShot(500, [this]() { - emit parameterListProgress(0); + _setLoadProgress(0); }); }); @@ -1070,18 +1071,13 @@ void ParameterManager::_checkInitialLoadComplete(bool failIfNoDefaultComponent) void ParameterManager::_initialRequestTimeout(void) { if (!_disableAllRetries && ++_initialRequestRetryCount <= _maxInitialRequestListRetry) { - if (!_vehicle->genericFirmware()) { - // Generic vehicles (like BeBop) may not have any parameters, so don't annoy the user - QString errorMsg = tr("Vehicle %1 did not respond to request for parameters, retrying").arg(_vehicle->id()); - qCDebug(ParameterManagerLog) << errorMsg; - qgcApp()->showMessage(errorMsg); - } refreshAllParameters(); _initialRequestTimeoutTimer.start(); } else { if (!_vehicle->genericFirmware()) { // Generic vehicles (like BeBop) may not have any parameters, so don't annoy the user - QString errorMsg = tr("Vehicle %1 did not respond to request for parameters, failing after maximum number of retries").arg(_vehicle->id()); + QString errorMsg = tr("Vehicle %1 did not respond to request for parameters" + "This will cause QGroundControl to be unable to display its full user interface.").arg(_vehicle->id()); qCDebug(ParameterManagerLog) << errorMsg; qgcApp()->showMessage(errorMsg); } @@ -1482,3 +1478,9 @@ QString ParameterManager::_logVehiclePrefix(int componentId) return QString("V:%1 C:%2").arg(_vehicle->id()).arg(componentId); } } + +void ParameterManager::_setLoadProgress(double loadProgress) +{ + _loadProgress = loadProgress; + emit loadProgressChanged(loadProgress); +} diff --git a/src/FactSystem/ParameterManager.h b/src/FactSystem/ParameterManager.h index dc91aad2dfd9236bac511ecddeb8f26e5a1a41b1..18ea33e4e4b3412572f09b8c82266bcde2d31ff5 100644 --- a/src/FactSystem/ParameterManager.h +++ b/src/FactSystem/ParameterManager.h @@ -49,6 +49,9 @@ public: Q_PROPERTY(bool missingParameters READ missingParameters NOTIFY missingParametersChanged) bool missingParameters(void) { return _missingParameters; } + Q_PROPERTY(double loadProgress READ loadProgress NOTIFY loadProgressChanged) + double loadProgress(void) const { return _loadProgress; } + /// @return Directory of parameter caches static QDir parameterCacheDir(); @@ -121,9 +124,7 @@ public: signals: void parametersReadyChanged(bool parametersReady); void missingParametersChanged(bool missingParameters); - - /// Signalled to update progress of full parameter list request - void parameterListProgress(float value); + void loadProgressChanged(float value); protected: Vehicle* _vehicle; @@ -148,6 +149,7 @@ private: QString _remapParamNameToVersion(const QString& paramName); void _loadOfflineEditingParams(void); QString _logVehiclePrefix(int componentId = -1); + void _setLoadProgress(double loadProgress); MAV_PARAM_TYPE _factTypeToMavType(FactMetaData::ValueType_t factType); FactMetaData::ValueType_t _mavTypeToFactType(MAV_PARAM_TYPE mavType); @@ -164,6 +166,7 @@ private: /// Second mapping is group name, to Fact QMap > _mapGroup2ParameterName; + double _loadProgress; ///< Parameter load progess, [0.0,1.0] bool _parametersReady; ///< true: parameter load complete bool _missingParameters; ///< true: parameter missing from initial load bool _initialLoadComplete; ///< true: Initial load of all parameters complete, whether successful or not diff --git a/src/ui/toolbar/MainToolBar.qml b/src/ui/toolbar/MainToolBar.qml index c8603706776a9ab9382487015d5a2c4fd92ce8a0..84dd088118abde59f38eb244b0e003dee3a320ad 100644 --- a/src/ui/toolbar/MainToolBar.qml +++ b/src/ui/toolbar/MainToolBar.qml @@ -439,7 +439,7 @@ Rectangle { id: progressBar anchors.bottom: parent.bottom height: toolBar.height * 0.05 - width: parent.width * _controller.progressBarValue + width: activeVehicle ? activeVehicle.parameterManager.loadProgress * parent.width : 0 color: colorGreen } diff --git a/src/ui/toolbar/MainToolBarController.cc b/src/ui/toolbar/MainToolBarController.cc index 50a6d298ce606b970350da1a1d266d5b5845290c..5001be8e387703cb4d873da582cc4fbc8cbc0f18 100644 --- a/src/ui/toolbar/MainToolBarController.cc +++ b/src/ui/toolbar/MainToolBarController.cc @@ -30,7 +30,6 @@ MainToolBarController::MainToolBarController(QObject* parent) : QObject(parent) , _vehicle(NULL) , _mav(NULL) - , _progressBarValue(0.0f) , _telemetryRRSSI(0) , _telemetryLRSSI(0) { @@ -48,7 +47,6 @@ void MainToolBarController::_activeVehicleChanged(Vehicle* vehicle) { // Disconnect the previous one (if any) if (_vehicle) { - disconnect(_vehicle->parameterManager(), &ParameterManager::parameterListProgress, this, &MainToolBarController::_setProgressBarValue); _mav = NULL; _vehicle = NULL; } @@ -58,7 +56,6 @@ void MainToolBarController::_activeVehicleChanged(Vehicle* vehicle) { _vehicle = vehicle; _mav = vehicle->uas(); - connect(_vehicle->parameterManager(), &ParameterManager::parameterListProgress, this, &MainToolBarController::_setProgressBarValue); } } @@ -93,9 +90,3 @@ void MainToolBarController::_telemetryChanged(LinkInterface*, unsigned rxerrors, emit telemetryRNoiseChanged(_telemetryRNoise); } } - -void MainToolBarController::_setProgressBarValue(float value) -{ - _progressBarValue = value; - emit progressBarValueChanged(value); -} diff --git a/src/ui/toolbar/MainToolBarController.h b/src/ui/toolbar/MainToolBarController.h index 99b8f232f667ba75f87f63a3aad526ba4950ac87..19fb78e0be86a7af7e66795e3c44d3eddbd0b62c 100644 --- a/src/ui/toolbar/MainToolBarController.h +++ b/src/ui/toolbar/MainToolBarController.h @@ -38,7 +38,6 @@ public: ~MainToolBarController(); Q_PROPERTY(double height MEMBER _toolbarHeight NOTIFY heightChanged) - Q_PROPERTY(float progressBarValue MEMBER _progressBarValue NOTIFY progressBarValueChanged) Q_PROPERTY(int telemetryRRSSI READ telemetryRRSSI NOTIFY telemetryRRSSIChanged) Q_PROPERTY(int telemetryLRSSI READ telemetryLRSSI NOTIFY telemetryLRSSIChanged) Q_PROPERTY(unsigned int telemetryRXErrors READ telemetryRXErrors NOTIFY telemetryRXErrorsChanged) @@ -58,7 +57,6 @@ public: unsigned int telemetryRNoise () { return _telemetryRNoise; } signals: - void progressBarValueChanged (float value); void telemetryRRSSIChanged (int value); void telemetryLRSSIChanged (int value); void heightChanged (double height); @@ -70,13 +68,11 @@ signals: private slots: void _activeVehicleChanged (Vehicle* vehicle); - void _setProgressBarValue (float value); void _telemetryChanged (LinkInterface* link, unsigned rxerrors, unsigned fixed, int rssi, int remrssi, unsigned txbuf, unsigned noise, unsigned remnoise); private: Vehicle* _vehicle; UASInterface* _mav; - float _progressBarValue; double _remoteRSSIstore; int _telemetryRRSSI; int _telemetryLRSSI;