diff --git a/src/MissionEditor/MissionEditor.qml b/src/MissionEditor/MissionEditor.qml index b4c07541a566a9526a22bdfaa02b1e381703be71..efe6cc0692624f8b927ed1a81e7ef6b90c0f26b0 100644 --- a/src/MissionEditor/MissionEditor.qml +++ b/src/MissionEditor/MissionEditor.qml @@ -133,6 +133,43 @@ QGCView { } } + property int _moveDialogMissionItemIndex + + Component { + id: moveDialog + + QGCViewDialog { + function accept() { + var toIndex = toCombo.currentIndex + + if (toIndex == 0) { + toIndex = 1 + } + controller.moveMissionItem(_moveDialogMissionItemIndex, toIndex) + hideDialog() + } + + Column { + anchors.left: parent.left + anchors.right: parent.right + spacing: ScreenTools.defaultFontPixelHeight + + QGCLabel { + anchors.left: parent.left + anchors.right: parent.right + wrapMode: Text.WordWrap + text: "Move the selected mission item to the be after following mission item:" + } + + QGCComboBox { + id: toCombo + model: _missionItems.count + currentIndex: _moveDialogMissionItemIndex + } + } + } + } + QGCViewPanel { id: panel anchors.fill: parent @@ -340,12 +377,13 @@ QGCView { onClicked: setCurrentItem(object.sequenceNumber) onRemove: { - var newCurrentItem = object.sequenceNumber - 1 + itemDragger.clearItem() controller.removeMissionItem(object.sequenceNumber) - if (_missionItems.count > 1) { - newCurrentItem = Math.min(_missionItems.count - 1, newCurrentItem) - setCurrentItem(newCurrentItem) - } + } + + onRemoveAll: { + itemDragger.clearItem() + controller.removeAllMissionItems() } } } // ListView @@ -408,18 +446,6 @@ QGCView { } } - RoundButton { - id: deleteMissionItemButton - buttonImage: "/qmlimages/TrashDelete.svg" - z: QGroundControl.zOrderWidgets - onClicked: { - addMissionItemsButton.checked = false - itemDragger.clearItem() - controller.deleteCurrentMissionItem() - checked = false - } - } - DropButton { id: syncButton dropDirection: dropRight diff --git a/src/MissionEditor/MissionEditorHelp.qml b/src/MissionEditor/MissionEditorHelp.qml index fb8c090633ddfd5e9dd59001ac6c547608b9b115..62f1ee2c21d5f830407b387897ce863ef5c7a420 100644 --- a/src/MissionEditor/MissionEditorHelp.qml +++ b/src/MissionEditor/MissionEditorHelp.qml @@ -97,59 +97,10 @@ Rectangle { "When enabled, add mission items by clicking on the map." } - Image { - id: deleteHelpIcon - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: addMissionItemsHelpText.bottom - width: ScreenTools.defaultFontPixelHeight * 3 - fillMode: Image.PreserveAspectFit - mipmap: true - smooth: true - source: (qgcPal.globalTheme === QGCPalette.Light) ? "/qmlimages/TrashDeleteBlack.svg" : "/qmlimages/TrashDelete.svg" - } - - QGCLabel { - id: deleteHelpText - anchors.leftMargin: ScreenTools.defaultFontPixelHeight - anchors.left: mapTypeHelpIcon.right - anchors.right: parent.right - anchors.top: deleteHelpIcon.top - wrapMode: Text.WordWrap - text: "Delete Mission Item
" + - "Delete the currently selected mission item." - } - - /* - Home Position Manager disabled - - Image { - id: homePositionManagerHelpIcon - anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: deleteHelpText.bottom - width: ScreenTools.defaultFontPixelHeight * 3 - fillMode: Image.PreserveAspectFit - mipmap: true - smooth: true - source: (qgcPal.globalTheme === QGCPalette.Light) ? "/qmlimages/MapHomeBlack.svg" : "/qmlimages/MapHome.svg" - } - - QGCLabel { - id: homePositionManagerHelpText - anchors.leftMargin: ScreenTools.defaultFontPixelHeight - anchors.left: mapTypeHelpIcon.right - anchors.right: parent.right - anchors.top: homePositionManagerHelpIcon.top - wrapMode: Text.WordWrap - text: "Flying Field Manager
" + - "When enabled, allows you to select/add/update flying field locations. " + - "You can save multiple flying field locations for use while creating missions while you are not connected to your vehicle." - } - */ - Image { id: mapCenterHelpIcon anchors.topMargin: ScreenTools.defaultFontPixelHeight - anchors.top: deleteHelpText.bottom + anchors.top: addMissionItemsHelpText.bottom width: ScreenTools.defaultFontPixelHeight * 3 fillMode: Image.PreserveAspectFit mipmap: true diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 5004d93dbb9cc191ff8c605fc3fd5b0469d31c7b..471cd1d94d6c5847eb446f056a657da16e4284a5 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -205,6 +205,17 @@ void MissionController::removeMissionItem(int index) } } +void MissionController::removeAllMissionItems(void) +{ + if (_missionItems) { + _deinitAllMissionItems(); + _missionItems->deleteLater(); + } + _missionItems = new QmlObjectListModel(this); + + _initAllMissionItems(); +} + void MissionController::loadMissionFromFile(void) { #ifndef __mobile__ @@ -606,17 +617,6 @@ void MissionController::_activeVehicleHomePositionChanged(const QGeoCoordinate& _recalcWaypointLines(); } -void MissionController::deleteCurrentMissionItem(void) -{ - for (int i=0; i<_missionItems->count(); i++) { - MissionItem* item = qobject_cast(_missionItems->get(i)); - if (item->isCurrentItem() && i != 0) { - removeMissionItem(i); - return; - } - } -} - void MissionController::setAutoSync(bool autoSync) { // FIXME: AutoSync temporarily turned off diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 5bb5a4e80d3a6ca1af6703e7f397d13e5f6faaa5..6603650007d5f67e3990b1fc8bf56b735dca42f5 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -53,7 +53,7 @@ public: Q_INVOKABLE void loadMissionFromFile(void); Q_INVOKABLE void saveMissionToFile(void); Q_INVOKABLE void removeMissionItem(int index); - Q_INVOKABLE void deleteCurrentMissionItem(void); + Q_INVOKABLE void removeAllMissionItems(void); // Property accessors diff --git a/src/QmlControls/MissionItemEditor.qml b/src/QmlControls/MissionItemEditor.qml index 41b989e0fcf5c4fa40fce3be30d11899c401ddf9..5fc35af6920c9806c8abd82296da5646ed400842 100644 --- a/src/QmlControls/MissionItemEditor.qml +++ b/src/QmlControls/MissionItemEditor.qml @@ -20,6 +20,7 @@ Rectangle { signal clicked signal remove + signal removeAll height: innerItem.height + (_margin * 3) color: missionItem.isCurrentItem ? qgcPal.buttonHighlight : qgcPal.windowShade @@ -34,6 +35,19 @@ Rectangle { colorGroupEnabled: enabled } + Component { + id: deleteAllPromptDialog + + QGCViewMessage { + message: "Are you sure you want to delete all mission items?" + + function accept() { + removeAll() + hideDialog() + } + } + } + Item { id: innerItem anchors.margins: _margin @@ -57,18 +71,54 @@ Rectangle { } Image { - id: rawEdit + id: hamburger anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.right: parent.right anchors.verticalCenter: commandPicker.verticalCenter width: commandPicker.height height: commandPicker.height - visible: missionItem.friendlyEditAllowed && missionItem.sequenceNumber != 0 && missionItem.isCurrentItem - source: "qrc:/qmlimages/CogWheel.svg" + source: "qrc:/qmlimages/Hamburger.svg" + visible: missionItem.isCurrentItem && missionItem.sequenceNumber != 0 MouseArea { anchors.fill: parent - onClicked: missionItem.rawEdit = !missionItem.rawEdit + onClicked: hamburgerMenu.popup() + + Menu { + id: hamburgerMenu + + MenuItem { + text: "Delete" + onTriggered: remove() + } + + MenuItem { + text: "Delete all" + + onTriggered: qgcView.showDialog(deleteAllPromptDialog, "Delete all", 40, StandardButton.Yes | StandardButton.No) + } + + MenuSeparator { } + + MenuItem { + text: "Show all values" + checkable: true + checked: missionItem.rawEdit + + onTriggered: { + if (missionItem.rawEdit) { + if (missionItem.friendlyEditAllowed) { + missionItem.rawEdit = false + } else { + qgcView.showMessage("Mission Edit", "You have made changes to the mission item which cannot be shown in Simple Mode", StandardButton.Ok) + } + } else { + missionItem.rawEdit = true + } + checked = missionItem.rawEdit + } + } + } } } @@ -77,7 +127,7 @@ Rectangle { anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2 anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.left: label.right - anchors.right: rawEdit.left + anchors.right: hamburger.left visible: missionItem.sequenceNumber != 0 && missionItem.isCurrentItem && !missionItem.rawEdit text: missionItem.commandName