diff --git a/qgroundcontrol.qrc b/qgroundcontrol.qrc
index f89dcb2..91be3ff 100644
--- a/qgroundcontrol.qrc
+++ b/qgroundcontrol.qrc
@@ -202,6 +202,7 @@
src/FlightMap/Widgets/QGCPitchIndicator.qml
src/FlightMap/QGCVideoBackground.qml
src/QmlControls/QGroundControl/FlightMap/qmldir
+ src/FlightMap/MapItems/SplitIndicator.qml
src/FlightMap/MapItems/VehicleMapItem.qml
src/QmlControls/QGroundControl/ScreenTools/qmldir
src/QmlControls/ScreenTools.qml
diff --git a/src/FlightMap/MapItems/SplitIndicator.qml b/src/FlightMap/MapItems/SplitIndicator.qml
new file mode 100644
index 0000000..a094617
--- /dev/null
+++ b/src/FlightMap/MapItems/SplitIndicator.qml
@@ -0,0 +1,50 @@
+/****************************************************************************
+ *
+ * (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.11
+import QtQuick.Controls 2.4
+
+import QGroundControl.ScreenTools 1.0
+import QGroundControl.Controls 1.0
+
+Rectangle {
+ id: _root
+ width: ScreenTools.defaultFontPixelHeight * 1.5
+ height: width
+ radius: width / 2
+ border.color: indicatorColor
+ color: "transparent"
+
+ property color indicatorColor: "white"
+
+ signal clicked
+
+ Rectangle {
+ anchors.margins: _root.height / 6
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: 1
+ color: indicatorColor
+ }
+
+ Rectangle {
+ anchors.margins: _root.height / 6
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ height: 1
+ color: indicatorColor
+ }
+
+ QGCMouseArea {
+ fillItem: parent
+ onClicked: _root.clicked()
+ }
+}
diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc
index a11afb3..a452725 100644
--- a/src/MissionManager/MissionController.cc
+++ b/src/MissionManager/MissionController.cc
@@ -69,6 +69,7 @@ MissionController::MissionController(PlanMasterController* masterController, QOb
, _progressPct (0)
, _currentPlanViewIndex (-1)
, _currentPlanViewItem (nullptr)
+ , _splitSegment (nullptr)
{
_resetMissionFlightStatus();
managerVehicleChanged(_managerVehicle);
@@ -2106,6 +2107,7 @@ VisualMissionItem* MissionController::currentPlanViewItem(void) const
void MissionController::setCurrentPlanViewIndex(int sequenceNumber, bool force)
{
if(_visualItems && (force || sequenceNumber != _currentPlanViewIndex)) {
+ _splitSegment = nullptr;
_currentPlanViewItem = nullptr;
_currentPlanViewIndex = -1;
for (int i = 0; i < _visualItems->count(); i++) {
@@ -2114,12 +2116,26 @@ void MissionController::setCurrentPlanViewIndex(int sequenceNumber, bool force)
pVI->setIsCurrentItem(true);
_currentPlanViewItem = pVI;
_currentPlanViewIndex = sequenceNumber;
+
+ if (pVI->specifiesCoordinate() && !pVI->isStandaloneCoordinate()) {
+ // Determine split segment used to display line split editing ui.
+ for (int j=i-1; j>0; j--) {
+ VisualMissionItem* pPrev = qobject_cast(_visualItems->get(j));
+ if (pPrev->specifiesCoordinate() && !pPrev->isStandaloneCoordinate()) {
+ VisualItemPair splitPair(pPrev, pVI);
+ if (_linesTable.contains(splitPair)) {
+ _splitSegment = _linesTable[splitPair];
+ }
+ }
+ }
+ }
} else {
pVI->setIsCurrentItem(false);
}
}
emit currentPlanViewIndexChanged();
emit currentPlanViewItemChanged();
+ emit splitSegmentChanged();
}
}
diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h
index 62b4235..4deb2f9 100644
--- a/src/MissionManager/MissionController.h
+++ b/src/MissionManager/MissionController.h
@@ -73,6 +73,7 @@ public:
Q_PROPERTY(QmlObjectListModel* directionArrows READ directionArrows CONSTANT)
Q_PROPERTY(QStringList complexMissionItemNames READ complexMissionItemNames NOTIFY complexMissionItemNamesChanged)
Q_PROPERTY(QGeoCoordinate plannedHomePosition READ plannedHomePosition NOTIFY plannedHomePositionChanged)
+ Q_PROPERTY(CoordinateVector* splitSegment MEMBER _splitSegment NOTIFY splitSegmentChanged) ///< Segment which show show + split ui element
Q_PROPERTY(double progressPct READ progressPct NOTIFY progressPctChanged)
@@ -207,6 +208,7 @@ public:
signals:
void visualItemsChanged (void);
void waypointPathChanged (void);
+ void splitSegmentChanged (void);
void newItemsFromVehicle (void);
void missionDistanceChanged (double missionDistance);
void missionTimeChanged (void);
@@ -302,6 +304,7 @@ private:
QTimer _updateTimer;
QGCGeoBoundingCube _travelBoundingCube;
QGeoCoordinate _takeoffCoordinate;
+ CoordinateVector* _splitSegment;
static const char* _settingsGroup;
diff --git a/src/PlanView/PlanView.qml b/src/PlanView/PlanView.qml
index d7d9b16..b8dce73 100644
--- a/src/PlanView/PlanView.qml
+++ b/src/PlanView/PlanView.qml
@@ -7,7 +7,6 @@
*
****************************************************************************/
-
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Dialogs 1.2
@@ -28,8 +27,6 @@ import QGroundControl.ShapeFileHelper 1.0
import QGroundControl.Airspace 1.0
import QGroundControl.Airmap 1.0
-/// Mission Editor
-
Item {
property bool planControlColapsed: false
@@ -258,6 +255,7 @@ Item {
Connections {
target: _missionController
+
onNewItemsFromVehicle: {
if (_visualItems && _visualItems.count !== 1) {
mapFitFunctions.fitMapViewportToMissionItems()
@@ -478,8 +476,41 @@ Item {
delegate: MapLineArrow {
fromCoord: object ? object.coordinate1 : undefined
toCoord: object ? object.coordinate2 : undefined
- arrowPosition: 2
- z: QGroundControl.zOrderWaypointLines
+ arrowPosition: 3
+ z: QGroundControl.zOrderWaypointLines + 1
+ }
+ }
+
+ // UI for splitting the current segment
+ MapQuickItem {
+ id: splitSegmentItem
+ anchorPoint.x: sourceItem.width / 2
+ anchorPoint.y: sourceItem.height / 2
+ z: QGroundControl.zOrderWaypointLines + 1
+
+ sourceItem: SplitIndicator {
+ onClicked: insertSimpleMissionItem(splitSegmentItem.coordinate, _missionController.currentPlanViewIndex)
+ }
+
+ function _updateSplitCoord() {
+ if (_missionController.splitSegment) {
+ var distance = _missionController.splitSegment.coordinate1.distanceTo(_missionController.splitSegment.coordinate2)
+ var azimuth = _missionController.splitSegment.coordinate1.azimuthTo(_missionController.splitSegment.coordinate2)
+ splitSegmentItem.coordinate = _missionController.splitSegment.coordinate1.atDistanceAndAzimuth(distance / 2, azimuth)
+ } else {
+ coordinate = QtPositioning.coordinate()
+ }
+ }
+
+ Connections {
+ target: _missionController
+ onSplitSegmentChanged: splitSegmentItem._updateSplitCoord()
+ }
+
+ Connections {
+ target: _missionController.splitSegment
+ onCoordinate1Changed: splitSegmentItem._updateSplitCoord()
+ onCoordinate2Changed: splitSegmentItem._updateSplitCoord()
}
}
diff --git a/src/QmlControls/QGroundControl/FlightMap/qmldir b/src/QmlControls/QGroundControl/FlightMap/qmldir
index 3db7e85..c356917 100644
--- a/src/QmlControls/QGroundControl/FlightMap/qmldir
+++ b/src/QmlControls/QGroundControl/FlightMap/qmldir
@@ -27,4 +27,5 @@ MissionItemView 1.0 MissionItemView.qml
MissionLineView 1.0 MissionLineView.qml
PlanMapItems 1.0 PlanMapItems.qml
PolygonEditor 1.0 PolygonEditor.qml
+SplitIndicator 1.0 SplitIndicator.qml
VehicleMapItem 1.0 VehicleMapItem.qml