Unverified Commit ea85f1e3 authored by Don Gagne's avatar Don Gagne Committed by GitHub

Merge branch 'master' into ActiveVehicle

parents 50d02ed7 bc9190c1
files:
- source: /translations/qgc.ts
translation: /translations/qgc_%locale_with_underscore%.ts
translation: /translations/qgc_source_%locale_with_underscore%.ts
- source: /translations/qgc-json.ts
translation: /translations/qgc_%locale_with_underscore%.ts
translation: /translations/qgc_json_%locale_with_underscore%.ts
......@@ -14,6 +14,7 @@
#include "SimpleMissionItem.h"
#include "PlanMasterController.h"
#include "FlightPathSegment.h"
#include "TakeoffMissionItem.h"
#include <QPolygonF>
......@@ -29,6 +30,15 @@ LandingComplexItem::LandingComplexItem(PlanMasterController* masterController, b
qgcApp()->addCompressedSignal(QMetaMethod::fromSignal(&LandingComplexItem::_updateFlightPathSegmentsSignal));
}
void LandingComplexItem::setLandingHeadingToTakeoffHeading()
{
TakeoffMissionItem* takeoffMissionItem = _missionController->takeoffMissionItem();
if (takeoffMissionItem && takeoffMissionItem->specifiesCoordinate()) {
qreal heading = takeoffMissionItem->launchCoordinate().azimuthTo(takeoffMissionItem->coordinate());
landingHeading()->setRawValue(heading);
}
}
double LandingComplexItem::complexDistance(void) const
{
return loiterCoordinate().distanceTo(loiterTangentCoordinate()) + loiterTangentCoordinate().distanceTo(landingCoordinate());
......
......@@ -40,6 +40,8 @@ public:
Q_PROPERTY(QGeoCoordinate landingCoordinate READ landingCoordinate WRITE setLandingCoordinate NOTIFY landingCoordinateChanged)
Q_PROPERTY(bool landingCoordSet MEMBER _landingCoordSet NOTIFY landingCoordSetChanged)
Q_INVOKABLE void setLandingHeadingToTakeoffHeading();
virtual Fact* loiterAltitude (void) = 0;
virtual Fact* loiterRadius (void) = 0;
virtual Fact* landingAltitude (void) = 0;
......
......@@ -166,6 +166,7 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
_visualItems->deleteLater();
_visualItems = nullptr;
_settingsItem = nullptr;
_takeoffMissionItem = nullptr;
_updateContainsItems(); // This will clear containsItems which will be set again below. This will re-pop Start Mission confirmation.
QmlObjectListModel* newControllerMissionItems = new QmlObjectListModel(this);
......@@ -192,9 +193,9 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
SimpleMissionItem* simpleItem = new SimpleMissionItem(_masterController, _flyView, *missionItem, this);
if (TakeoffMissionItem::isTakeoffCommand(static_cast<MAV_CMD>(simpleItem->command()))) {
// This needs to be a TakeoffMissionItem
TakeoffMissionItem* takeoffItem = new TakeoffMissionItem(*missionItem, _masterController, _flyView, settingsItem, this);
_takeoffMissionItem = new TakeoffMissionItem(*missionItem, _masterController, _flyView, settingsItem, this);
simpleItem->deleteLater();
simpleItem = takeoffItem;
simpleItem = _takeoffMissionItem;
}
newControllerMissionItems->append(simpleItem);
}
......@@ -359,34 +360,34 @@ VisualMissionItem* MissionController::insertSimpleMissionItem(QGeoCoordinate coo
VisualMissionItem* MissionController::insertTakeoffItem(QGeoCoordinate /*coordinate*/, int visualItemIndex, bool makeCurrentItem)
{
int sequenceNumber = _nextSequenceNumber();
TakeoffMissionItem * newItem = new TakeoffMissionItem(_controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF, _masterController, _flyView, _settingsItem, this);
newItem->setSequenceNumber(sequenceNumber);
_initVisualItem(newItem);
_takeoffMissionItem = new TakeoffMissionItem(_controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF, _masterController, _flyView, _settingsItem, this);
_takeoffMissionItem->setSequenceNumber(sequenceNumber);
_initVisualItem(_takeoffMissionItem);
if (newItem->specifiesAltitude()) {
if (_takeoffMissionItem->specifiesAltitude()) {
double prevAltitude;
int prevAltitudeMode;
if (_findPreviousAltitude(visualItemIndex, &prevAltitude, &prevAltitudeMode)) {
newItem->altitude()->setRawValue(prevAltitude);
newItem->setAltitudeMode(static_cast<QGroundControlQmlGlobal::AltitudeMode>(prevAltitudeMode));
_takeoffMissionItem->altitude()->setRawValue(prevAltitude);
_takeoffMissionItem->setAltitudeMode(static_cast<QGroundControlQmlGlobal::AltitudeMode>(prevAltitudeMode));
}
}
if (visualItemIndex == -1) {
_visualItems->append(newItem);
_visualItems->append(_takeoffMissionItem);
} else {
_visualItems->insert(visualItemIndex, newItem);
_visualItems->insert(visualItemIndex, _takeoffMissionItem);
}
_recalcAll();
if (makeCurrentItem) {
setCurrentPlanViewSeqNum(newItem->sequenceNumber(), true);
setCurrentPlanViewSeqNum(_takeoffMissionItem->sequenceNumber(), true);
}
_firstItemAdded();
return newItem;
return _takeoffMissionItem;
}
VisualMissionItem* MissionController::insertLandItem(QGeoCoordinate coordinate, int visualItemIndex, bool makeCurrentItem)
......@@ -536,6 +537,10 @@ void MissionController::removeVisualItem(int viIndex)
bool removeSurveyStyle = _visualItems->value<SurveyComplexItem*>(viIndex) || _visualItems->value<CorridorScanComplexItem*>(viIndex);
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->removeAt(viIndex));
if (item == _takeoffMissionItem) {
_takeoffMissionItem = nullptr;
}
_deinitVisualItem(item);
item->deleteLater();
......@@ -591,6 +596,7 @@ void MissionController::removeAll(void)
_visualItems->clearAndDeleteContents();
_visualItems->deleteLater();
_settingsItem = nullptr;
_takeoffMissionItem = nullptr;
_visualItems = new QmlObjectListModel(this);
_addMissionSettings(_visualItems);
_initAllVisualItems();
......@@ -983,8 +989,9 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI
if (_visualItems) {
_deinitAllVisualItems();
_visualItems->deleteLater();
_settingsItem = nullptr;
}
_settingsItem = nullptr;
_takeoffMissionItem = nullptr;
_visualItems = loadedVisualItems;
......@@ -1859,6 +1866,11 @@ void MissionController::_initAllVisualItems(void)
for (int i=0; i<_visualItems->count(); i++) {
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(_visualItems->get(i));
_initVisualItem(item);
TakeoffMissionItem* takeoffItem = qobject_cast<TakeoffMissionItem*>(item);
if (takeoffItem) {
_takeoffMissionItem = takeoffItem;
}
}
_recalcAll();
......
......@@ -22,12 +22,12 @@
class FlightPathSegment;
class VisualMissionItem;
class MissionItem;
class MissionSettingsItem;
class AppSettings;
class MissionManager;
class SimpleMissionItem;
class ComplexMissionItem;
class MissionSettingsItem;
class TakeoffMissionItem;
class QDomDocument;
class PlanViewSettings;
......@@ -86,6 +86,7 @@ public:
Q_PROPERTY(int currentPlanViewSeqNum READ currentPlanViewSeqNum NOTIFY currentPlanViewSeqNumChanged)
Q_PROPERTY(int currentPlanViewVIIndex READ currentPlanViewVIIndex NOTIFY currentPlanViewVIIndexChanged)
Q_PROPERTY(VisualMissionItem* currentPlanViewItem READ currentPlanViewItem NOTIFY currentPlanViewItemChanged)
Q_PROPERTY(TakeoffMissionItem* takeoffMissionItem READ takeoffMissionItem NOTIFY takeoffMissionItemChanged)
Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged)
Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged)
Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged)
......@@ -225,6 +226,7 @@ public:
QStringList complexMissionItemNames (void) const;
QGeoCoordinate plannedHomePosition (void) const;
VisualMissionItem* currentPlanViewItem (void) const { return _currentPlanViewItem; }
TakeoffMissionItem* takeoffMissionItem (void) const { return _takeoffMissionItem; }
double progressPct (void) const { return _progressPct; }
QString surveyComplexItemName (void) const;
QString corridorScanComplexItemName (void) const;
......@@ -280,6 +282,7 @@ signals:
void currentPlanViewSeqNumChanged (void);
void currentPlanViewVIIndexChanged (void);
void currentPlanViewItemChanged (void);
void takeoffMissionItemChanged (void);
void missionBoundingCubeChanged (void);
void missionItemCountChanged (int missionItemCount);
void onlyInsertTakeoffValidChanged (void);
......@@ -379,6 +382,7 @@ private:
int _currentPlanViewSeqNum = -1;
int _currentPlanViewVIIndex = -1;
VisualMissionItem* _currentPlanViewItem = nullptr;
TakeoffMissionItem* _takeoffMissionItem = nullptr;
QTimer _updateTimer;
QGCGeoBoundingCube _travelBoundingCube;
QGeoCoordinate _takeoffCoordinate;
......
......@@ -289,6 +289,7 @@ Rectangle {
onClicked: {
missionItem.landingCoordinate = globals.activeVehicle.coordinate
missionItem.landingHeading.rawValue = globals.activeVehicle.heading.rawValue
missionItem.setLandingHeadingToTakeoffHeading()
}
}
}
......
......@@ -189,6 +189,7 @@ Item {
coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces)
coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces)
_missionItem.landingCoordinate = coordinate
_missionItem.setLandingHeadingToTakeoffHeading()
}
}
}
......
......@@ -276,6 +276,7 @@ Rectangle {
onClicked: {
missionItem.landingCoordinate = globals.activeVehicle.coordinate
missionItem.landingHeading.rawValue = globals.activeVehicle.heading.rawValue
missionItem.setLandingHeadingToTakeoffHeading()
}
}
}
......
......@@ -159,6 +159,7 @@ Item {
coordinate.longitude = coordinate.longitude.toFixed(_decimalPlaces)
coordinate.altitude = coordinate.altitude.toFixed(_decimalPlaces)
_missionItem.landingCoordinate = coordinate
_missionItem.setLandingHeadingToTakeoffHeading()
}
}
}
......
......@@ -9,6 +9,7 @@
#pragma once
#include <QObject>
#include <QString>
#include <QList>
......
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