diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc index 9145510281649a624f53efc31b41ca6716ddf560..e669249c141bbfb5703957859c40454cd696fa3e 100644 --- a/qgroundcontrol.qrc +++ b/qgroundcontrol.qrc @@ -227,6 +227,7 @@ src/WimaView/CoordinateIndicator.qml src/WimaView/WimaJoinedAreaMapVisual.qml src/WimaView/WimaCorridorEditor.qml + src/FlightMap/MapItems/WimaPlanMapItems.qml src/Settings/APMMavlinkStreamRate.SettingsGroup.json diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index 8cfb22f49d64936d801f8af7bfa2e1d79fe96ec7..c3060d00b0470983741d5b55dca624079a53aba7 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -209,6 +209,16 @@ FlightMap { } } + // Add mission items generated by wima planer to the map + PlanMapItems { + map: flightMap + largeMapView: _mainIsMap + masterController: masterController + isActiveVehicle: _vehicle.active + + property var _vehicle: object + } + // Add trajectory points to the map MapItemView { model: _mainIsMap ? _activeVehicle ? _activeVehicle.trajectoryPoints : 0 : 0 diff --git a/src/FlightMap/MapItems/WimaPlanMapItems.qml b/src/FlightMap/MapItems/WimaPlanMapItems.qml new file mode 100644 index 0000000000000000000000000000000000000000..e25dcbd1ec2e6421daf40421bbbe7d37964decaa --- /dev/null +++ b/src/FlightMap/MapItems/WimaPlanMapItems.qml @@ -0,0 +1,66 @@ +/**************************************************************************** + * + * (c) 2009-2016 QGROUNDCONTROL PROJECT + * + * QGroundControl is licensed according to the terms in the file + * COPYING.md in the root of the source code directory. + * + ****************************************************************************/ + +import QtQuick 2.3 +import QtLocation 5.3 +import QtPositioning 5.3 + +import QGroundControl 1.0 +import QGroundControl.Controls 1.0 +import QGroundControl.FlightMap 1.0 + +// Adds visual items generated by wima planer to the map. +// Currently only used by Fly View even though it's called PlanMapItems! +Item { + id: _root + + property var map ///< Map control to show items on + property bool largeMapView ///< true: map takes up entire view, false: map is in small window + property var wimaController value + + property var _map: map + property var _missionLineViewComponent + + // Add the mission item visuals to the map + Repeater { + model: largeMapView ? _missionController.visualItems : 0 + + delegate: MissionItemMapVisual { + map: _map + onClicked: { + if (isActiveVehicle) { + // Only active vehicle supports click to change current mission item + guidedActionsController.confirmAction(guidedActionsController.actionSetWaypoint, Math.max(object.sequenceNumber, 1)) + } + } + } + } + + Component.onCompleted: { + _missionLineViewComponent = missionLineViewComponent.createObject(map) + if (_missionLineViewComponent.status === Component.Error) + console.log(_missionLineViewComponent.errorString()) + map.addMapItem(_missionLineViewComponent) + } + + Component.onDestruction: { + _missionLineViewComponent.destroy() + } + + Component { + id: missionLineViewComponent + + MapPolyline { + line.width: 3 + line.color: "#be781c" // Hack, can't get palette to work in here + z: QGroundControl.zOrderWaypointLines + path: _missionController.waypointPath + } + } +} diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index 9b5e9c32a687e46a85e167e537cd8ef4a03258e3..b8ccf8c8d92e318e5283041b50923e7ce8bae98a 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -43,6 +43,11 @@ WimaDataContainer *WimaController::dataContainer() const return _container; } +QmlObjectListModel *WimaController::missionItems() +{ + return &_missionItems; +} + void WimaController::setMasterController(PlanMasterController *masterC) { _masterController = masterC; @@ -146,6 +151,7 @@ void WimaController::containerDataValidChanged(bool valid) } _localPlanDataValid = false; _visualItems.clear(); + _missionItems.clear(); WimaPlanData planData = _container->pull(); // extract list with WimaAreas @@ -198,14 +204,22 @@ void WimaController::containerDataValidChanged(bool valid) break; } + QList tempMissionItems = planData.missionItems(); + + for (auto missionItem : tempMissionItems) + _missionItems.append(const_cast(missionItem)); // losing const qualifier here + if (areaCounter == numAreas) _localPlanDataValid = true; + } else { _localPlanDataValid = false; - _visualItems.clear(); + _visualItems.clear(); + _missionItems.clear(); } emit visualItemsChanged(); + emit missionItemsChanged(); } diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index 0d056f8b1862dc5b988a395e3a4acbbf1056232c..0d7fc5f0d29d6cb32aa7cb221ed594426029299f 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -53,7 +53,7 @@ public: QString fileExtension (void) const { return wimaFileExtension; } QGCMapPolygon joinedArea (void) const; WimaDataContainer* dataContainer (void) const; - + QmlObjectListModel* missionItems (void); // Property setters @@ -89,6 +89,7 @@ signals: void currentFileChanged (); void dataContainerChanged (); void readyForSaveSendChanged (bool ready); + void missionItemsChanged (void); private slots: void containerDataValidChanged (bool valid);