From 3ad581bdfb0602e23796b6d122727ef1aa89be80 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Thu, 21 Jan 2016 14:00:52 -0800 Subject: [PATCH] Add support for mission item insert --- src/MissionEditor/MissionEditor.qml | 11 ++++++----- src/MissionManager/MissionController.cc | 4 ++-- src/MissionManager/MissionController.h | 6 ++++-- src/MissionManager/MissionControllerTest.cc | 4 ++-- src/QmlControls/MissionItemEditor.qml | 6 ++++++ 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/MissionEditor/MissionEditor.qml b/src/MissionEditor/MissionEditor.qml index 5bffc0595..b08ae0fbf 100644 --- a/src/MissionEditor/MissionEditor.qml +++ b/src/MissionEditor/MissionEditor.qml @@ -200,7 +200,7 @@ QGCView { if (false /*homePositionManagerButton.checked*/) { //offlineHomePosition = coordinate } else if (addMissionItemsButton.checked) { - var index = controller.addMissionItem(coordinate) + var index = controller.insertMissionItem(coordinate, controller.missionItems.count) setCurrentItem(index) } else { editorMap.zoomLevel = editorMap.maxZoomLevel - 2 @@ -288,10 +288,6 @@ QGCView { } else { itemDragger.clearItem() } - - // Move to the new position - editorMap.latitude = object.coordinate.latitude - editorMap.longitude = object.coordinate.longitude } } } @@ -374,6 +370,11 @@ QGCView { itemDragger.clearItem() controller.removeAllMissionItems() } + + onInsert: { + controller.insertMissionItem(editorMap.center, i) + setCurrentItem(i) + } } } // ListView } // Item - Mission Item editor diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 9382bef4d..c05128ba4 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -158,7 +158,7 @@ void MissionController::sendMissionItems(void) } } -int MissionController::addMissionItem(QGeoCoordinate coordinate) +int MissionController::insertMissionItem(QGeoCoordinate coordinate, int i) { MissionItem * newItem = new MissionItem(this); newItem->setSequenceNumber(_missionItems->count()); @@ -179,7 +179,7 @@ int MissionController::addMissionItem(QGeoCoordinate coordinate) newItem->setParam7(lastValue); } } - _missionItems->append(newItem); + _missionItems->insert(i, newItem); _recalcAll(); diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 660365000..6fcb11bd6 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -46,8 +46,7 @@ public: Q_PROPERTY(QGeoCoordinate liveHomePosition READ liveHomePosition NOTIFY liveHomePositionChanged) Q_PROPERTY(bool autoSync READ autoSync WRITE setAutoSync NOTIFY autoSyncChanged) - Q_INVOKABLE void start(bool editMode) ; - Q_INVOKABLE int addMissionItem(QGeoCoordinate coordinate); + Q_INVOKABLE void start(bool editMode); Q_INVOKABLE void getMissionItems(void); Q_INVOKABLE void sendMissionItems(void); Q_INVOKABLE void loadMissionFromFile(void); @@ -55,6 +54,9 @@ public: Q_INVOKABLE void removeMissionItem(int index); Q_INVOKABLE void removeAllMissionItems(void); + /// @param i: index to insert at + Q_INVOKABLE int insertMissionItem(QGeoCoordinate coordinate, int i); + // Property accessors QmlObjectListModel* missionItems(void); diff --git a/src/MissionManager/MissionControllerTest.cc b/src/MissionManager/MissionControllerTest.cc index ec1d9e115..a2204ee8b 100644 --- a/src/MissionManager/MissionControllerTest.cc +++ b/src/MissionManager/MissionControllerTest.cc @@ -176,7 +176,7 @@ void MissionControllerTest::_testAddWaypointWorker(MAV_AUTOPILOT firmwareType) QGeoCoordinate coordinate(37.803784, -122.462276); - _missionController->addMissionItem(coordinate); + _missionController->insertMissionItem(coordinate, _missionController->missionItems()->count()); QCOMPARE(_multiSpyMissionController->checkOnlySignalsByMask(waypointLinesChangedSignalMask), true); @@ -223,7 +223,7 @@ void MissionControllerTest::_testOfflineToOnlineWorker(MAV_AUTOPILOT firmwareTyp _missionController = new MissionController(); Q_CHECK_PTR(_missionController); _missionController->start(true /* editMode */); - _missionController->addMissionItem(QGeoCoordinate(37.803784, -122.462276)); + _missionController->insertMissionItem(QGeoCoordinate(37.803784, -122.462276), _missionController->missionItems()->count()); // Go online to empty vehicle MissionControllerManagerTest::_initForFirmwareType(firmwareType); diff --git a/src/QmlControls/MissionItemEditor.qml b/src/QmlControls/MissionItemEditor.qml index d4eb9c4bd..f24ba3c86 100644 --- a/src/QmlControls/MissionItemEditor.qml +++ b/src/QmlControls/MissionItemEditor.qml @@ -21,6 +21,7 @@ Rectangle { signal clicked signal remove signal removeAll + signal insert(int i) height: innerItem.height + (_margin * 3) color: missionItem.isCurrentItem ? qgcPal.buttonHighlight : qgcPal.windowShade @@ -87,6 +88,11 @@ Rectangle { Menu { id: hamburgerMenu + MenuItem { + text: "Insert" + onTriggered: insert(missionItem.sequenceNumber) + } + MenuItem { text: "Delete" onTriggered: remove() -- 2.22.0