From 1ff06210e6d98b47337d13d90f5f53cdb919b387 Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Thu, 23 Mar 2017 13:37:47 -0700 Subject: [PATCH] Handle case where there is only one complex item --- src/MissionEditor/MissionEditor.qml | 23 +++++++++++------ src/MissionManager/MissionController.cc | 20 ++++++++++++--- src/MissionManager/MissionController.h | 33 +++++++++++++------------ 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/MissionEditor/MissionEditor.qml b/src/MissionEditor/MissionEditor.qml index b3ecbf9f7..d3a08d7f6 100644 --- a/src/MissionEditor/MissionEditor.qml +++ b/src/MissionEditor/MissionEditor.qml @@ -49,6 +49,7 @@ QGCView { property var activeVehiclePosition: _activeVehicle ? _activeVehicle.coordinate : QtPositioning.coordinate() property bool _lightWidgetBorders: editorMap.isSatelliteMap property bool _addWaypointOnClick: false + property bool _singleComplexItem: missionController.complexMissionItemNames.length == 1 /// The controller which should be called for load/save, send to/from vehicle calls property var _syncDropDownController: missionController @@ -77,6 +78,14 @@ QGCView { } } + function addComplexItem(complexItemName) { + var coordinate = editorMap.center + coordinate.latitude = coordinate.latitude.toFixed(_decimalPlaces) + coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces) + coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces) + var sequenceNumber = missionController.insertComplexMissionItem(complexItemName, coordinate, missionController.visualItems.count) + } + property bool _firstMissionLoadComplete: false property bool _firstFenceLoadComplete: false property bool _firstRallyLoadComplete: false @@ -696,7 +705,7 @@ QGCView { { name: "Pattern", iconSource: "/qmlimages/MapDrawShape.svg", - dropPanelComponent: patternDropPanel + dropPanelComponent: _singleComplexItem ? undefined : patternDropPanel }, { name: "Sync", @@ -729,6 +738,11 @@ QGCView { case 0: _addWaypointOnClick = checked break + case 1: + if (_singleComplexItem) { + addComplexItem(missionController.complexMissionItemNames[0]) + } + break case 5: editorMap.zoomLevel += 0.5 break @@ -947,12 +961,7 @@ QGCView { Layout.fillWidth: true onClicked: { - var coordinate = editorMap.center - coordinate.latitude = coordinate.latitude.toFixed(_decimalPlaces) - coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces) - coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces) - var sequenceNumber = missionController.insertComplexMissionItem(modelData, coordinate, missionController.visualItems.count) - setCurrentItem(sequenceNumber) + addComplexItem(modelData) dropPanel.hide() } } diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 293f71621..518527976 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -52,6 +52,8 @@ MissionController::MissionController(QObject *parent) , _firstItemsFromVehicle(false) , _missionItemsRequested(false) , _queuedSend(false) + , _surveyMissionItemName(tr("Survey")) + , _fwLandingMissionItemName(tr("Fixed Wing Landing")) { _missionFlightStatus.maxTelemetryDistance = 0; _missionFlightStatus.totalDistance = 0; @@ -63,10 +65,6 @@ MissionController::MissionController(QObject *parent) _missionFlightStatus.cruiseSpeed = 0; _missionFlightStatus.hoverSpeed = 0; _missionFlightStatus.gimbalYaw = 0; - - _surveyMissionItemName = tr("Survey"); - _fwLandingMissionItemName = tr("Fixed Wing Landing"); - _complexMissionItemNames << _surveyMissionItemName << _fwLandingMissionItemName; } MissionController::~MissionController() @@ -1290,6 +1288,8 @@ void MissionController::_activeVehicleSet(void) _activeVehicleHomePositionChanged(_activeVehicle->homePosition()); _activeVehicleHomePositionAvailableChanged(_activeVehicle->homePositionAvailable()); + + emit complexMissionItemNamesChanged(); } void MissionController::_activeVehicleHomePositionAvailableChanged(bool homePositionAvailable) @@ -1573,3 +1573,15 @@ void MissionController::removeAllFromVehicle(void) _missionItemsRequested = true; _activeVehicle->missionManager()->removeAll(); } + +QStringList MissionController::complexMissionItemNames(void) const +{ + QStringList complexItems; + + complexItems.append(_surveyMissionItemName); + if (_activeVehicle->fixedWing()) { + complexItems.append(_fwLandingMissionItemName); + } + + return complexItems; +} diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 2259a8c1a..7a1de5bf9 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -49,18 +49,18 @@ public: } MissionFlightStatus_t; // Mission settings - Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged) - Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) - Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged) - Q_PROPERTY(QStringList complexMissionItemNames MEMBER _complexMissionItemNames CONSTANT) - - Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged) - Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged) - Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged) - Q_PROPERTY(double missionCruiseDistance READ missionCruiseDistance NOTIFY missionCruiseDistanceChanged) - Q_PROPERTY(double missionHoverTime READ missionHoverTime NOTIFY missionHoverTimeChanged) - Q_PROPERTY(double missionCruiseTime READ missionCruiseTime NOTIFY missionCruiseTimeChanged) - Q_PROPERTY(double missionMaxTelemetry READ missionMaxTelemetry NOTIFY missionMaxTelemetryChanged) + Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged) + Q_PROPERTY(QmlObjectListModel* visualItems READ visualItems NOTIFY visualItemsChanged) + Q_PROPERTY(QmlObjectListModel* waypointLines READ waypointLines NOTIFY waypointLinesChanged) + Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged) + + Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged) + Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged) + Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged) + Q_PROPERTY(double missionCruiseDistance READ missionCruiseDistance NOTIFY missionCruiseDistanceChanged) + Q_PROPERTY(double missionHoverTime READ missionHoverTime NOTIFY missionHoverTimeChanged) + Q_PROPERTY(double missionCruiseTime READ missionCruiseTime NOTIFY missionCruiseTimeChanged) + Q_PROPERTY(double missionMaxTelemetry READ missionMaxTelemetry NOTIFY missionMaxTelemetryChanged) Q_INVOKABLE void removeMissionItem(int index); @@ -106,9 +106,10 @@ public: // Property accessors - QGeoCoordinate plannedHomePosition (void); - QmlObjectListModel* visualItems (void) { return _visualItems; } - QmlObjectListModel* waypointLines (void) { return &_waypointLines; } + QGeoCoordinate plannedHomePosition (void); + QmlObjectListModel* visualItems (void) { return _visualItems; } + QmlObjectListModel* waypointLines (void) { return &_waypointLines; } + QStringList complexMissionItemNames (void) const; double missionDistance (void) const { return _missionFlightStatus.totalDistance; } double missionTime (void) const { return _missionFlightStatus.totalTime; } @@ -130,6 +131,7 @@ signals: void missionCruiseDistanceChanged(double missionCruiseDistance); void missionCruiseTimeChanged(void); void missionMaxTelemetryChanged(double missionMaxTelemetry); + void complexMissionItemNamesChanged(void); private slots: void _newMissionItemsAvailableFromVehicle(bool removeAllRequested); @@ -187,7 +189,6 @@ private: MissionFlightStatus_t _missionFlightStatus; QString _surveyMissionItemName; QString _fwLandingMissionItemName; - QStringList _complexMissionItemNames; static const char* _settingsGroup; -- 2.22.0