diff --git a/src/MissionEditor/MissionItemStatus.qml b/src/MissionEditor/MissionItemStatus.qml index 7523ba2e25d0e871edea6b2b2b79877af8c0cdc8..e767d60e28670209b45a95bc7cb4b044e2811639 100644 --- a/src/MissionEditor/MissionItemStatus.qml +++ b/src/MissionEditor/MissionItemStatus.qml @@ -50,8 +50,6 @@ Rectangle { property real _gradient: _statusValid && _currentMissionItem.distance > 0 ? Math.atan(_currentMissionItem.altDifference / _currentMissionItem.distance) : 0 property real _gradientPercent: isNaN(_gradient) ? 0 : _gradient * 100 property real _azimuth: _statusValid ? _currentMissionItem.azimuth : -1 - property int _numberShots: _currentSurvey ? _currentMissionItem.cameraShots : 0 - property real _coveredArea: _currentSurvey ? _currentMissionItem.coveredArea : 0 property real _missionDistance: _missionValid ? missionDistance : 0 property real _missionMaxTelemetry: _missionValid ? missionMaxTelemetry : 0 property real _missionTime: _missionValid && _missionSpeed > 0 ? (_isVTOL ? _hoverTime + _cruiseTime : _missionDistance / _missionSpeed) : 0 @@ -71,8 +69,6 @@ Rectangle { property string _altText: _statusValid ? QGroundControl.metersToAppSettingsDistanceUnits(_altDifference).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _gradientText: _statusValid ? _gradientPercent.toFixed(0) + "%" : " " property string _azimuthText: _statusValid ? Math.round(_azimuth) : " " - property string _numberShotsText: _currentSurvey ? _numberShots.toFixed(0) : " " - property string _coveredAreaText: _currentSurvey ? QGroundControl.squareMetersToAppSettingsAreaUnits(_coveredArea).toFixed(2) + " " + QGroundControl.appSettingsAreaUnitsString : " " property string _missionDistanceText: _missionValid ? QGroundControl.metersToAppSettingsDistanceUnits(_missionDistance).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " " property string _missionTimeText: _missionValid ? _missionTime.toFixed(0) + "s" : " " property string _missionMaxTelemetryText: _missionValid ? QGroundControl.metersToAppSettingsDistanceUnits(_missionMaxTelemetry).toFixed(2) + " " + QGroundControl.appSettingsDistanceUnitsString : " " @@ -113,24 +109,6 @@ Rectangle { QGCLabel { text: qsTr("Azimuth:") } QGCLabel { text: _azimuthText } - - QGCLabel { - text: qsTr("# shots:") - visible: _currentSurvey - } - QGCLabel { - text: _numberShotsText - visible: _currentSurvey - } - - QGCLabel { - text: qsTr("Covered area:") - visible: _currentSurvey - } - QGCLabel { - text: _coveredAreaText - visible: _currentSurvey - } } ListView { diff --git a/src/MissionEditor/SurveyItemEditor.qml b/src/MissionEditor/SurveyItemEditor.qml index 5732d3f8ad19a674871fc07926229a05059ebd65..8a9e1088eadab7120f5caf81ae01d6d6969f3c69 100644 --- a/src/MissionEditor/SurveyItemEditor.qml +++ b/src/MissionEditor/SurveyItemEditor.qml @@ -1,6 +1,7 @@ import QtQuick 2.2 import QtQuick.Controls 1.2 +import QGroundControl 1.0 import QGroundControl.ScreenTools 1.0 import QGroundControl.Vehicle 1.0 import QGroundControl.Controls 1.0 @@ -38,7 +39,7 @@ Rectangle { } Repeater { - model: [ missionItem.gridAltitude, missionItem.gridAngle, missionItem.gridSpacing ] + model: [ missionItem.gridAngle, missionItem.gridSpacing, missionItem.gridAltitude ] Item { anchors.left: parent.left @@ -114,31 +115,64 @@ Rectangle { onPolygonAdjustVertex: missionItem.adjustPolygonCoordinate(vertexIndex, vertexCoordinate) } - QGCButton { - text: editorMap.polygonDraw.drawingPolygon ? qsTr("Finish Draw") : qsTr("Draw Polygon") - enabled: ((editorMap.polygonDraw.drawingPolygon && editorMap.polygonDraw.polygonReady) || !editorMap.polygonDraw.drawingPolygon) && - !editorMap.polygonDraw.adjustingPolygon + QGCLabel { text: qsTr("Polygon:") } - onClicked: { - if (editorMap.polygonDraw.drawingPolygon) { - editorMap.polygonDraw.finishCapturePolygon() - } else { - editorMap.polygonDraw.startCapturePolygon() + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + height: 1 + color: qgcPal.text + } + + Row { + spacing: ScreenTools.defaultFontPixelWidth + + QGCButton { + text: editorMap.polygonDraw.drawingPolygon ? qsTr("Finish Draw") : qsTr("Draw") + visible: !editorMap.polygonDraw.adjustingPolygon + enabled: ((editorMap.polygonDraw.drawingPolygon && editorMap.polygonDraw.polygonReady) || !editorMap.polygonDraw.drawingPolygon) + + onClicked: { + if (editorMap.polygonDraw.drawingPolygon) { + editorMap.polygonDraw.finishCapturePolygon() + } else { + editorMap.polygonDraw.startCapturePolygon() + } } } - } - QGCButton { - text: editorMap.polygonDraw.adjustingPolygon ? qsTr("Finish Adjust") : qsTr("Adjust Polygon") - enabled: !editorMap.polygonDraw.drawingPolygon + QGCButton { + text: editorMap.polygonDraw.adjustingPolygon ? qsTr("Finish Adjust") : qsTr("Adjust") + visible: missionItem.polygonPath.length > 0 && !editorMap.polygonDraw.drawingPolygon - onClicked: { - if (editorMap.polygonDraw.adjustingPolygon) { - editorMap.polygonDraw.finishAdjustPolygon() - } else { - editorMap.polygonDraw.startAdjustPolygon(missionItem.polygonPath) + onClicked: { + if (editorMap.polygonDraw.adjustingPolygon) { + editorMap.polygonDraw.finishAdjustPolygon() + } else { + editorMap.polygonDraw.startAdjustPolygon(missionItem.polygonPath) + } } } } + + QGCLabel { text: qsTr("Statistics:") } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + height: 1 + color: qgcPal.text + } + + Grid { + columns: 2 + spacing: ScreenTools.defaultFontPixelWidth + + QGCLabel { text: qsTr("Survey area:") } + QGCLabel { text: QGroundControl.squareMetersToAppSettingsAreaUnits(missionItem.coveredArea).toFixed(2) + " " + QGroundControl.appSettingsAreaUnitsString } + + QGCLabel { text: qsTr("# shots:") } + QGCLabel { text: missionItem.cameraShots } + } } } diff --git a/src/MissionManager/SurveyMissionItem.cc b/src/MissionManager/SurveyMissionItem.cc index 70f00e418cce63f74b9143d16a23b033131be0bd..e1d6ccc0db841040c970aba7c1af820ade661a90 100644 --- a/src/MissionManager/SurveyMissionItem.cc +++ b/src/MissionManager/SurveyMissionItem.cc @@ -39,17 +39,38 @@ SurveyMissionItem::SurveyMissionItem(Vehicle* vehicle, QObject* parent) , _surveyDistance(0.0) , _cameraShots(0) , _coveredArea(0.0) - , _gridAltitudeFact (0, "Altitude:", FactMetaData::valueTypeDouble) - , _gridAngleFact (0, "Grid angle:", FactMetaData::valueTypeDouble) - , _gridSpacingFact (0, "Grid spacing:", FactMetaData::valueTypeDouble) + + , _gridAltitudeFact (0, "Altitude:", FactMetaData::valueTypeDouble) + , _gridAngleFact (0, "Grid angle:", FactMetaData::valueTypeDouble) + , _gridSpacingFact (0, "Grid spacing:", FactMetaData::valueTypeDouble) , _cameraTriggerDistanceFact(0, "Camera trigger distance", FactMetaData::valueTypeDouble) + + , _gridAltitudeMetaData (FactMetaData::valueTypeDouble) + , _gridAngleMetaData (FactMetaData::valueTypeDouble) + , _gridSpacingMetaData (FactMetaData::valueTypeDouble) + , _cameraTriggerDistanceMetaData(FactMetaData::valueTypeDouble) { _gridAltitudeFact.setRawValue(25); _gridSpacingFact.setRawValue(10); _cameraTriggerDistanceFact.setRawValue(25); - connect(&_gridSpacingFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid); - connect(&_gridAngleFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid); + _gridAltitudeMetaData.setRawUnits("m"); + _gridAngleMetaData.setRawUnits("deg"); + _gridSpacingMetaData.setRawUnits("m"); + _cameraTriggerDistanceMetaData.setRawUnits("m"); + + _gridAltitudeMetaData.setDecimalPlaces(1); + _gridAngleMetaData.setDecimalPlaces(1); + _gridSpacingMetaData.setDecimalPlaces(2); + _cameraTriggerDistanceMetaData.setDecimalPlaces(2); + + _gridAltitudeFact.setMetaData(&_gridAltitudeMetaData); + _gridAngleFact.setMetaData(&_gridAngleMetaData); + _gridSpacingFact.setMetaData(&_gridSpacingMetaData); + _cameraTriggerDistanceFact.setMetaData(&_cameraTriggerDistanceMetaData); + + connect(&_gridSpacingFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid); + connect(&_gridAngleFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid); connect(&_cameraTriggerDistanceFact, &Fact::valueChanged, this, &SurveyMissionItem::_generateGrid); connect(this, &SurveyMissionItem::cameraTriggerChanged, this, &SurveyMissionItem::_cameraTriggerChanged); @@ -78,7 +99,7 @@ void SurveyMissionItem::_setCameraShots(int cameraShots) { if (_cameraShots != cameraShots) { _cameraShots = cameraShots; - emit cameraShotsChanged(_cameraShots); + emit cameraShotsChanged(this->cameraShots()); } } @@ -611,4 +632,10 @@ void SurveyMissionItem::_cameraTriggerChanged(void) // If we have grid turn on/off camera trigger will add/remove two camera trigger mission items emit lastSequenceNumberChanged(lastSequenceNumber()); } + emit cameraShotsChanged(cameraShots()); +} + +int SurveyMissionItem::cameraShots(void) const +{ + return _cameraTrigger ? _cameraShots : 0; } diff --git a/src/MissionManager/SurveyMissionItem.h b/src/MissionManager/SurveyMissionItem.h index d82bd9dfce0a6e7b747473a08b7c78378aceaf59..b66b6ea56d46f8383a6df4b2b5111b62f5e743c9 100644 --- a/src/MissionManager/SurveyMissionItem.h +++ b/src/MissionManager/SurveyMissionItem.h @@ -50,8 +50,8 @@ public: Fact* gridSpacing(void) { return &_gridSpacingFact; } Fact* cameraTriggerDistance(void) { return &_cameraTriggerDistanceFact; } - int cameraShots (void) const { return _cameraShots; } - double coveredArea (void) const { return _coveredArea; } + int cameraShots(void) const; + double coveredArea(void) const { return _coveredArea; } // Overrides from ComplexMissionItem @@ -125,10 +125,14 @@ private: int _cameraShots; double _coveredArea; - Fact _gridAltitudeFact; - Fact _gridAngleFact; - Fact _gridSpacingFact; - Fact _cameraTriggerDistanceFact; + Fact _gridAltitudeFact; + Fact _gridAngleFact; + Fact _gridSpacingFact; + Fact _cameraTriggerDistanceFact; + FactMetaData _gridAltitudeMetaData; + FactMetaData _gridAngleMetaData; + FactMetaData _gridSpacingMetaData; + FactMetaData _cameraTriggerDistanceMetaData; static const char* _jsonVersionKey; static const char* _jsonTypeKey;