From e627805a2b19ba8622ec6a5829bc4b2db8bb531b Mon Sep 17 00:00:00 2001 From: DonLakeFlyer Date: Wed, 5 Apr 2017 13:56:16 -0700 Subject: [PATCH] Add support for QGCOptions::waypointsOnlyMode Also added insert pattern support to hamburger --- src/PlanView/MissionItemEditor.qml | 68 +++++++++++++++++++++++++++--- src/PlanView/PlanView.qml | 12 ++++-- src/api/QGCOptions.h | 4 ++ 3 files changed, 74 insertions(+), 10 deletions(-) diff --git a/src/PlanView/MissionItemEditor.qml b/src/PlanView/MissionItemEditor.qml index 65fb84a34..005cac888 100644 --- a/src/PlanView/MissionItemEditor.qml +++ b/src/PlanView/MissionItemEditor.qml @@ -2,7 +2,9 @@ import QtQuick 2.3 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.4 import QtQuick.Dialogs 1.2 +import QtQml 2.2 +import QGroundControl 1.0 import QGroundControl.ScreenTools 1.0 import QGroundControl.Vehicle 1.0 import QGroundControl.Controls 1.0 @@ -24,7 +26,8 @@ Rectangle { signal clicked signal remove - signal insert + signal insertWaypoint + signal insertComplexItem(string complexItemName) property bool _currentItem: missionItem.isCurrentItem property color _outerTextColor: _currentItem ? qgcPal.primaryButtonText : qgcPal.text @@ -35,6 +38,7 @@ Rectangle { readonly property real _margin: ScreenTools.defaultFontPixelWidth / 2 readonly property real _radius: ScreenTools.defaultFontPixelWidth / 2 readonly property real _hamburgerSize: commandPicker.height * 0.75 + readonly property bool _waypointsOnlyMode: QGroundControl.corePlugin.options.missionWaypointsOnly QGCPalette { id: qgcPal @@ -72,13 +76,13 @@ Rectangle { QGCMouseArea { fillItem: hamburger visible: hamburger.visible - onClicked: hamburgerMenu.popup() + onClicked: _waypointsOnlyMode ? waypointsOnlyMenu.popup() : normalMenu.popup() Menu { - id: hamburgerMenu + id: normalMenu MenuItem { - text: qsTr("Insert") + text: qsTr("Insert waypoint") onTriggered: insert() } @@ -87,8 +91,25 @@ Rectangle { onTriggered: remove() } + Menu { + id: normalPatternMenu + title: qsTr("Insert pattern") + + Instantiator { + model: missionController.complexMissionItemNames + + onObjectAdded: normalPatternMenu.insertItem(index, object) + onObjectRemoved: normalPatternMenu.removeItem(object) + + MenuItem { + text: modelData + onTriggered: insertComplexItem(modelData) + } + } + } + MenuItem { - text: "Change command..." + text: qsTr("Change command...") onTriggered: commandPicker.clicked() } @@ -116,6 +137,38 @@ Rectangle { } } } + + Menu { + id: waypointsOnlyMenu + + MenuItem { + text: qsTr("Insert waypoint") + onTriggered: insertWaypoint() + } + + MenuItem { + text: qsTr("Delete") + onTriggered: remove() + } + + Menu { + id: waypointsOnlyPatternMenu + title: qsTr("Insert pattern") + + Instantiator { + model: missionController.complexMissionItemNames + + onObjectAdded: waypointsOnlyPatternMenu.insertItem(index, object) + onObjectRemoved: waypointsOnlyPatternMenu.removeItem(object) + + MenuItem { + text: modelData + onTriggered: insertComplexItem(modelData) + } + } + } + + } } QGCButton { @@ -125,7 +178,7 @@ Rectangle { anchors.rightMargin: ScreenTools.defaultFontPixelWidth anchors.left: label.right anchors.top: parent.top - visible: missionItem.isCurrentItem && !missionItem.rawEdit && missionItem.isSimpleItem + visible: !commandLabel.visible text: missionItem.commandName Component { @@ -140,8 +193,9 @@ Rectangle { } QGCLabel { + id: commandLabel anchors.fill: commandPicker - visible: !missionItem.isCurrentItem || !missionItem.isSimpleItem + visible: !missionItem.isCurrentItem || !missionItem.isSimpleItem || _waypointsOnlyMode verticalAlignment: Text.AlignVCenter text: missionItem.commandName color: _outerTextColor diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml index 1acc34915..a8b3d840d 100644 --- a/src/PlanView/PlanView.qml +++ b/src/PlanView/PlanView.qml @@ -70,7 +70,11 @@ QGCView { 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) + insertComplexItem(complexItemName, coordinate, missionController.visualItems.count) + } + + function insertComplexMissionItem(complexItemName, coordinate, index) { + var sequenceNumber = missionController.insertComplexMissionItem(complexItemName, coordinate, index) setCurrentItem(sequenceNumber) } @@ -747,10 +751,12 @@ QGCView { if (removeIndex >= missionController.visualItems.count) { removeIndex-- } - setCurrentItem(removeIndex) + _currentMissionIndex = -1 + rootQgcView.setCurrentItem(removeIndex) } - onInsert: insertSimpleMissionItem(editorMap.center, index) + onInsertWaypoint: insertSimpleMissionItem(editorMap.center, index) + onInsertComplexItem: insertComplexMissionItem(complexItemName, editorMap.center, index) } } // QGCListView } // Item - Mission Item editor diff --git a/src/api/QGCOptions.h b/src/api/QGCOptions.h index 85c8a26e3..6e0d9b6e8 100644 --- a/src/api/QGCOptions.h +++ b/src/api/QGCOptions.h @@ -40,6 +40,7 @@ public: Q_PROPERTY(QString firmwareUpgradeSingleURL READ firmwareUpgradeSingleURL CONSTANT) Q_PROPERTY(bool guidedBarShowEmergencyStop READ guidedBarShowEmergencyStop NOTIFY guidedBarShowEmergencyStopChanged) Q_PROPERTY(bool guidedBarShowOrbit READ guidedBarShowOrbit NOTIFY guidedBarShowOrbitChanged) + Q_PROPERTY(bool missionWaypointsOnly READ missionWaypointsOnly NOTIFY missionWaypointsOnlyChanged) /// Should QGC hide its settings menu and colapse it into one single menu (Settings and Vehicle Setup)? /// @return true if QGC should consolidate both menus into one. @@ -73,6 +74,8 @@ public: virtual bool guidedBarShowEmergencyStop () const { return true; } virtual bool guidedBarShowOrbit () const { return true; } + virtual bool missionWaypointsOnly () const { return true; } ///< true: Only allow waypoints and complex items in Plan + /// If returned QString in non-empty it means that firmware upgrade will run in a mode which only /// supports downloading a single firmware file from the URL. It also supports custom install through /// the Advanced options. @@ -87,6 +90,7 @@ signals: void showFirmwareUpgradeChanged (bool show); void guidedBarShowEmergencyStopChanged (bool show); void guidedBarShowOrbitChanged (bool show); + void missionWaypointsOnlyChanged (bool missionWaypointsOnly); private: CustomInstrumentWidget* _defaultInstrumentWidget; -- 2.22.0