Commit 2916ae4c authored by Don Gagne's avatar Don Gagne

parent 63680cba
......@@ -202,6 +202,7 @@
<file alias="QGroundControl/FlightMap/QGCPitchIndicator.qml">src/FlightMap/Widgets/QGCPitchIndicator.qml</file>
<file alias="QGroundControl/FlightMap/QGCVideoBackground.qml">src/FlightMap/QGCVideoBackground.qml</file>
<file alias="QGroundControl/FlightMap/qmldir">src/QmlControls/QGroundControl/FlightMap/qmldir</file>
<file alias="QGroundControl/FlightMap/SplitIndicator.qml">src/FlightMap/MapItems/SplitIndicator.qml</file>
<file alias="QGroundControl/FlightMap/VehicleMapItem.qml">src/FlightMap/MapItems/VehicleMapItem.qml</file>
<file alias="QGroundControl/ScreenTools/qmldir">src/QmlControls/QGroundControl/ScreenTools/qmldir</file>
<file alias="QGroundControl/ScreenTools/ScreenTools.qml">src/QmlControls/ScreenTools.qml</file>
......
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* 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()
}
}
......@@ -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<VisualMissionItem*>(_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();
}
}
......
......@@ -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;
......
......@@ -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()
}
}
......
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment