Commit d8b252e3 authored by Gus Grubba's avatar Gus Grubba

Move plan view index control to MissionController

parent 1ea97d2f
...@@ -64,6 +64,8 @@ MissionController::MissionController(PlanMasterController* masterController, QOb ...@@ -64,6 +64,8 @@ MissionController::MissionController(PlanMasterController* masterController, QOb
, _structureScanMissionItemName(tr("Structure Scan")) , _structureScanMissionItemName(tr("Structure Scan"))
, _appSettings(qgcApp()->toolbox()->settingsManager()->appSettings()) , _appSettings(qgcApp()->toolbox()->settingsManager()->appSettings())
, _progressPct(0) , _progressPct(0)
, _currentPlanViewIndex(-1)
, _currentPlanViewItem(NULL)
{ {
_resetMissionFlightStatus(); _resetMissionFlightStatus();
managerVehicleChanged(_managerVehicle); managerVehicleChanged(_managerVehicle);
...@@ -1861,3 +1863,33 @@ void MissionController::_managerRemoveAllComplete(bool error) ...@@ -1861,3 +1863,33 @@ void MissionController::_managerRemoveAllComplete(bool error)
showPlanFromManagerVehicle(); showPlanFromManagerVehicle();
} }
} }
int MissionController::currentPlanViewIndex(void) const
{
return _currentPlanViewIndex;
}
VisualMissionItem* MissionController::currentPlanViewItem(void) const
{
return _currentPlanViewItem;
}
void MissionController::setCurrentPlanViewIndex(int sequenceNumber, bool force)
{
if(_visualItems && (force || sequenceNumber != _currentPlanViewIndex)) {
_currentPlanViewItem = NULL;
_currentPlanViewIndex = -1;
for (int i = 0; i < _visualItems->count(); i++) {
VisualMissionItem* pVI = qobject_cast<VisualMissionItem*>(_visualItems->get(i));
if (pVI && pVI->sequenceNumber() == sequenceNumber) {
pVI->setIsCurrentItem(true);
_currentPlanViewItem = pVI;
_currentPlanViewIndex = sequenceNumber;
} else {
pVI->setIsCurrentItem(false);
}
}
emit currentPlanViewIndexChanged();
emit currentPlanViewItemChanged();
}
}
...@@ -74,6 +74,9 @@ public: ...@@ -74,6 +74,9 @@ public:
Q_PROPERTY(int currentMissionIndex READ currentMissionIndex NOTIFY currentMissionIndexChanged) Q_PROPERTY(int currentMissionIndex READ currentMissionIndex NOTIFY currentMissionIndexChanged)
Q_PROPERTY(int resumeMissionIndex READ resumeMissionIndex NOTIFY resumeMissionIndexChanged) ///< Returns the item index two which a mission should be resumed. -1 indicates resume mission not available. Q_PROPERTY(int resumeMissionIndex READ resumeMissionIndex NOTIFY resumeMissionIndexChanged) ///< Returns the item index two which a mission should be resumed. -1 indicates resume mission not available.
Q_PROPERTY(int currentPlanViewIndex READ currentPlanViewIndex NOTIFY currentPlanViewIndexChanged)
Q_PROPERTY(VisualMissionItem* currentPlanViewItem READ currentPlanViewItem NOTIFY currentPlanViewItemChanged)
Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged) Q_PROPERTY(double missionDistance READ missionDistance NOTIFY missionDistanceChanged)
Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged) Q_PROPERTY(double missionTime READ missionTime NOTIFY missionTimeChanged)
Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged) Q_PROPERTY(double missionHoverDistance READ missionHoverDistance NOTIFY missionHoverDistanceChanged)
...@@ -104,6 +107,10 @@ public: ...@@ -104,6 +107,10 @@ public:
/// Updates the altitudes of the items in the current mission to the new default altitude /// Updates the altitudes of the items in the current mission to the new default altitude
Q_INVOKABLE void applyDefaultMissionAltitude(void); Q_INVOKABLE void applyDefaultMissionAltitude(void);
/// Sets a new current mission item (PlanView).
/// @param sequenceNumber - index for new item, -1 to clear current item
Q_INVOKABLE void setCurrentPlanViewIndex(int sequenceNumber, bool force);
/// Sends the mission items to the specified vehicle /// Sends the mission items to the specified vehicle
static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems); static void sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems);
...@@ -135,10 +142,12 @@ public: ...@@ -135,10 +142,12 @@ public:
QmlObjectListModel* waypointLines (void) { return &_waypointLines; } QmlObjectListModel* waypointLines (void) { return &_waypointLines; }
QStringList complexMissionItemNames (void) const; QStringList complexMissionItemNames (void) const;
QGeoCoordinate plannedHomePosition (void) const; QGeoCoordinate plannedHomePosition (void) const;
VisualMissionItem* currentPlanViewItem (void) const;
double progressPct (void) const { return _progressPct; } double progressPct (void) const { return _progressPct; }
int currentMissionIndex(void) const; int currentMissionIndex (void) const;
int resumeMissionIndex(void) const; int resumeMissionIndex (void) const;
int currentPlanViewIndex (void) const;
double missionDistance (void) const { return _missionFlightStatus.totalDistance; } double missionDistance (void) const { return _missionFlightStatus.totalDistance; }
double missionTime (void) const { return _missionFlightStatus.totalTime; } double missionTime (void) const { return _missionFlightStatus.totalTime; }
...@@ -171,6 +180,8 @@ signals: ...@@ -171,6 +180,8 @@ signals:
void plannedHomePositionChanged(QGeoCoordinate plannedHomePosition); void plannedHomePositionChanged(QGeoCoordinate plannedHomePosition);
void progressPctChanged(double progressPct); void progressPctChanged(double progressPct);
void currentMissionIndexChanged(int currentMissionIndex); void currentMissionIndexChanged(int currentMissionIndex);
void currentPlanViewIndexChanged();
void currentPlanViewItemChanged();
private slots: private slots:
void _newMissionItemsAvailableFromVehicle(bool removeAllRequested); void _newMissionItemsAvailableFromVehicle(bool removeAllRequested);
...@@ -234,6 +245,8 @@ private: ...@@ -234,6 +245,8 @@ private:
QString _structureScanMissionItemName; QString _structureScanMissionItemName;
AppSettings* _appSettings; AppSettings* _appSettings;
double _progressPct; double _progressPct;
int _currentPlanViewIndex;
VisualMissionItem* _currentPlanViewItem;
static const char* _settingsGroup; static const char* _settingsGroup;
......
...@@ -61,7 +61,7 @@ Rectangle { ...@@ -61,7 +61,7 @@ Rectangle {
orientation: ListView.Horizontal orientation: ListView.Horizontal
spacing: 0 spacing: 0
clip: true clip: true
currentIndex: _currentMissionIndex currentIndex: _missionController.currentPlanViewIndex
onCountChanged: { onCountChanged: {
var calcLength = (statusListView.count + 1)*statusListView.contentItem.children[0].width var calcLength = (statusListView.count + 1)*statusListView.contentItem.children[0].width
......
...@@ -45,8 +45,6 @@ QGCView { ...@@ -45,8 +45,6 @@ QGCView {
property var _geoFenceController: _planMasterController.geoFenceController property var _geoFenceController: _planMasterController.geoFenceController
property var _rallyPointController: _planMasterController.rallyPointController property var _rallyPointController: _planMasterController.rallyPointController
property var _visualItems: _missionController.visualItems property var _visualItems: _missionController.visualItems
property var _currentMissionItem
property int _currentMissionIndex: 0
property bool _lightWidgetBorders: editorMap.isSatelliteMap property bool _lightWidgetBorders: editorMap.isSatelliteMap
property bool _addWaypointOnClick: false property bool _addWaypointOnClick: false
property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1 property bool _singleComplexItem: _missionController.complexMissionItemNames.length === 1
...@@ -60,7 +58,7 @@ QGCView { ...@@ -60,7 +58,7 @@ QGCView {
Component.onCompleted: { Component.onCompleted: {
toolbar.planMasterController = Qt.binding(function () { return _planMasterController }) toolbar.planMasterController = Qt.binding(function () { return _planMasterController })
toolbar.currentMissionItem = Qt.binding(function () { return _currentMissionItem }) toolbar.currentMissionItem = Qt.binding(function () { return _missionController.currentPlanViewItem })
} }
function addComplexItem(complexItemName) { function addComplexItem(complexItemName) {
...@@ -73,7 +71,7 @@ QGCView { ...@@ -73,7 +71,7 @@ QGCView {
function insertComplexMissionItem(complexItemName, coordinate, index) { function insertComplexMissionItem(complexItemName, coordinate, index) {
var sequenceNumber = _missionController.insertComplexMissionItem(complexItemName, coordinate, index) var sequenceNumber = _missionController.insertComplexMissionItem(complexItemName, coordinate, index)
setCurrentItem(sequenceNumber, true) _missionController.setCurrentPlanViewIndex(sequenceNumber, true)
} }
property bool _firstMissionLoadComplete: false property bool _firstMissionLoadComplete: false
...@@ -149,7 +147,7 @@ QGCView { ...@@ -149,7 +147,7 @@ QGCView {
Component.onCompleted: { Component.onCompleted: {
start(true /* editMode */) start(true /* editMode */)
setCurrentItem(0, true) _missionController.setCurrentPlanViewIndex(0, true)
} }
function upload() { function upload() {
...@@ -195,7 +193,7 @@ QGCView { ...@@ -195,7 +193,7 @@ QGCView {
if (_visualItems && _visualItems.count != 1) { if (_visualItems && _visualItems.count != 1) {
mapFitFunctions.fitMapViewportToMissionItems() mapFitFunctions.fitMapViewportToMissionItems()
} }
setCurrentItem(0, true) _missionController.setCurrentPlanViewIndex(0, true)
} }
} }
...@@ -205,31 +203,12 @@ QGCView { ...@@ -205,31 +203,12 @@ QGCView {
id: _mapTypeButtonsExclusiveGroup id: _mapTypeButtonsExclusiveGroup
} }
/// Sets a new current mission item
/// @param sequenceNumber - index for new item, -1 to clear current item
function setCurrentItem(sequenceNumber, force) {
if (force || sequenceNumber !== _currentMissionIndex) {
_currentMissionItem = undefined
_currentMissionIndex = -1
for (var i=0; i<_visualItems.count; i++) {
var visualItem = _visualItems.get(i)
if (visualItem.sequenceNumber == sequenceNumber) {
_currentMissionItem = visualItem
_currentMissionItem.isCurrentItem = true
_currentMissionIndex = sequenceNumber
} else {
visualItem.isCurrentItem = false
}
}
}
}
/// Inserts a new simple mission item /// Inserts a new simple mission item
/// @param coordinate Location to insert item /// @param coordinate Location to insert item
/// @param index Insert item at this index /// @param index Insert item at this index
function insertSimpleMissionItem(coordinate, index) { function insertSimpleMissionItem(coordinate, index) {
var sequenceNumber = _missionController.insertSimpleMissionItem(coordinate, index) var sequenceNumber = _missionController.insertSimpleMissionItem(coordinate, index)
setCurrentItem(sequenceNumber, true) _missionController.setCurrentPlanViewIndex(sequenceNumber, true)
} }
property int _moveDialogMissionItemIndex property int _moveDialogMissionItemIndex
...@@ -250,7 +229,7 @@ QGCView { ...@@ -250,7 +229,7 @@ QGCView {
onAcceptedForLoad: { onAcceptedForLoad: {
masterController.loadFromFile(file) masterController.loadFromFile(file)
masterController.fitViewportToItems() masterController.fitViewportToItems()
setCurrentItem(0, true) _missionController.setCurrentPlanViewIndex(0, true)
close() close()
} }
} }
...@@ -359,7 +338,7 @@ QGCView { ...@@ -359,7 +338,7 @@ QGCView {
delegate: MissionItemMapVisual { delegate: MissionItemMapVisual {
map: editorMap map: editorMap
onClicked: setCurrentItem(sequenceNumber, false) onClicked: _missionController.setCurrentPlanViewIndex(sequenceNumber, false)
visible: _editingLayer == _layerMission visible: _editingLayer == _layerMission
} }
} }
...@@ -562,7 +541,7 @@ QGCView { ...@@ -562,7 +541,7 @@ QGCView {
model: _missionController.visualItems model: _missionController.visualItems
cacheBuffer: Math.max(height * 2, 0) cacheBuffer: Math.max(height * 2, 0)
clip: true clip: true
currentIndex: _currentMissionIndex currentIndex: _missionController.currentPlanViewIndex
highlightMoveDuration: 250 highlightMoveDuration: 250
delegate: MissionItemEditor { delegate: MissionItemEditor {
...@@ -573,7 +552,7 @@ QGCView { ...@@ -573,7 +552,7 @@ QGCView {
readOnly: false readOnly: false
rootQgcView: _qgcView rootQgcView: _qgcView
onClicked: setCurrentItem(object.sequenceNumber, false) onClicked: _missionController.setCurrentPlanViewIndex(object.sequenceNumber, false)
onRemove: { onRemove: {
var removeIndex = index var removeIndex = index
...@@ -581,8 +560,7 @@ QGCView { ...@@ -581,8 +560,7 @@ QGCView {
if (removeIndex >= _missionController.visualItems.count) { if (removeIndex >= _missionController.visualItems.count) {
removeIndex-- removeIndex--
} }
_currentMissionIndex = -1 _missionController.setCurrentPlanViewIndex(removeIndex, true)
rootQgcView.setCurrentItem(removeIndex, true)
} }
onInsertWaypoint: insertSimpleMissionItem(editorMap.center, index) onInsertWaypoint: insertSimpleMissionItem(editorMap.center, index)
......
...@@ -82,6 +82,7 @@ ...@@ -82,6 +82,7 @@
#include "QGCCorePlugin.h" #include "QGCCorePlugin.h"
#include "QGCCameraManager.h" #include "QGCCameraManager.h"
#include "CameraCalc.h" #include "CameraCalc.h"
#include "VisualMissionItem.h"
#ifndef NO_SERIAL_LINK #ifndef NO_SERIAL_LINK
#include "SerialLink.h" #include "SerialLink.h"
...@@ -366,6 +367,7 @@ void QGCApplication::_initCommon(void) ...@@ -366,6 +367,7 @@ void QGCApplication::_initCommon(void)
qmlRegisterUncreatableType<MissionController> ("QGroundControl.Controllers", 1, 0, "MissionController", "Reference only"); qmlRegisterUncreatableType<MissionController> ("QGroundControl.Controllers", 1, 0, "MissionController", "Reference only");
qmlRegisterUncreatableType<GeoFenceController> ("QGroundControl.Controllers", 1, 0, "GeoFenceController", "Reference only"); qmlRegisterUncreatableType<GeoFenceController> ("QGroundControl.Controllers", 1, 0, "GeoFenceController", "Reference only");
qmlRegisterUncreatableType<RallyPointController>("QGroundControl.Controllers", 1, 0, "RallyPointController", "Reference only"); qmlRegisterUncreatableType<RallyPointController>("QGroundControl.Controllers", 1, 0, "RallyPointController", "Reference only");
qmlRegisterUncreatableType<VisualMissionItem> ("QGroundControl.Controllers", 1, 0, "VisualMissionItem", "Reference only");
qmlRegisterType<ParameterEditorController> ("QGroundControl.Controllers", 1, 0, "ParameterEditorController"); qmlRegisterType<ParameterEditorController> ("QGroundControl.Controllers", 1, 0, "ParameterEditorController");
qmlRegisterType<ESP8266ComponentController> ("QGroundControl.Controllers", 1, 0, "ESP8266ComponentController"); qmlRegisterType<ESP8266ComponentController> ("QGroundControl.Controllers", 1, 0, "ESP8266ComponentController");
......
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