Commit ef29f8c1 authored by DoinLakeFlyer's avatar DoinLakeFlyer

parent 294f086d
...@@ -6,6 +6,12 @@ Note: This file only contains high level features or important fixes. ...@@ -6,6 +6,12 @@ Note: This file only contains high level features or important fixes.
### 4.0.3 - Not yet released ### 4.0.3 - Not yet released
### 4.0.3 - Not yet released
* Plan: Add setting for takeoff item not required
* Plan: Takeoff item must be added prior to allowing other item types to enable
### 4.0.2 - Stable ### 4.0.2 - Stable
* Fix Mavlink V2 protocol negotation based on capability bits * Fix Mavlink V2 protocol negotation based on capability bits
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include "KML.h" #include "KML.h"
#include "QGCCorePlugin.h" #include "QGCCorePlugin.h"
#include "TakeoffMissionItem.h" #include "TakeoffMissionItem.h"
#include "PlanViewSettings.h"
#define UPDATE_TIMEOUT 5000 ///< How often we check for bounding box changes #define UPDATE_TIMEOUT 5000 ///< How often we check for bounding box changes
...@@ -59,6 +60,7 @@ const QString MissionController::patternCorridorScanName (QT_TRANSLATE_NOOP(" ...@@ -59,6 +60,7 @@ const QString MissionController::patternCorridorScanName (QT_TRANSLATE_NOOP("
MissionController::MissionController(PlanMasterController* masterController, QObject *parent) MissionController::MissionController(PlanMasterController* masterController, QObject *parent)
: PlanElementController (masterController, parent) : PlanElementController (masterController, parent)
, _planViewSettings (qgcApp()->toolbox()->settingsManager()->planViewSettings())
, _missionManager (_managerVehicle->missionManager()) , _missionManager (_managerVehicle->missionManager())
, _missionItemCount (0) , _missionItemCount (0)
, _visualItems (nullptr) , _visualItems (nullptr)
...@@ -77,6 +79,8 @@ MissionController::MissionController(PlanMasterController* masterController, QOb ...@@ -77,6 +79,8 @@ MissionController::MissionController(PlanMasterController* masterController, QOb
managerVehicleChanged(_managerVehicle); managerVehicleChanged(_managerVehicle);
_updateTimer.setSingleShot(true); _updateTimer.setSingleShot(true);
connect(&_updateTimer, &QTimer::timeout, this, &MissionController::_updateTimeout); connect(&_updateTimer, &QTimer::timeout, this, &MissionController::_updateTimeout);
connect(_planViewSettings->takeoffItemNotRequired(), &Fact::rawValueChanged, this, &MissionController::_takeoffItemNotRequiredChanged);
} }
MissionController::~MissionController() MissionController::~MissionController()
...@@ -2301,6 +2305,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) ...@@ -2301,6 +2305,7 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
_currentPlanViewItem = nullptr; _currentPlanViewItem = nullptr;
_currentPlanViewSeqNum = -1; _currentPlanViewSeqNum = -1;
_currentPlanViewVIIndex = -1; _currentPlanViewVIIndex = -1;
_onlyInsertTakeoffValid = !_planViewSettings->takeoffItemNotRequired()->rawValue().toBool() && _visualItems->count() == 1; // First item must be takeoff
_isInsertTakeoffValid = true; _isInsertTakeoffValid = true;
_isInsertLandValid = true; _isInsertLandValid = true;
_isROIActive = false; _isROIActive = false;
...@@ -2430,10 +2435,15 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force) ...@@ -2430,10 +2435,15 @@ void MissionController::setCurrentPlanViewSeqNum(int sequenceNumber, bool force)
} }
} }
// These are not valid when only takeoff is allowed
_isInsertLandValid = _isInsertLandValid && !_onlyInsertTakeoffValid;
_flyThroughCommandsAllowed = _flyThroughCommandsAllowed && !_onlyInsertTakeoffValid;
emit currentPlanViewSeqNumChanged(); emit currentPlanViewSeqNumChanged();
emit currentPlanViewVIIndexChanged(); emit currentPlanViewVIIndexChanged();
emit currentPlanViewItemChanged(); emit currentPlanViewItemChanged();
emit splitSegmentChanged(); emit splitSegmentChanged();
emit onlyInsertTakeoffValidChanged();
emit isInsertTakeoffValidChanged(); emit isInsertTakeoffValidChanged();
emit isInsertLandValidChanged(); emit isInsertLandValidChanged();
emit isROIActiveChanged(); emit isROIActiveChanged();
...@@ -2531,3 +2541,9 @@ bool MissionController::isEmpty(void) const ...@@ -2531,3 +2541,9 @@ bool MissionController::isEmpty(void) const
{ {
return _visualItems->count() <= 1; return _visualItems->count() <= 1;
} }
void MissionController::_takeoffItemNotRequiredChanged(void)
{
// Force a recalc of allowed bits
setCurrentPlanViewSeqNum(_currentPlanViewSeqNum, true /* force */);
}
...@@ -28,6 +28,7 @@ class SimpleMissionItem; ...@@ -28,6 +28,7 @@ class SimpleMissionItem;
class ComplexMissionItem; class ComplexMissionItem;
class MissionSettingsItem; class MissionSettingsItem;
class QDomDocument; class QDomDocument;
class PlanViewSettings;
Q_DECLARE_LOGGING_CATEGORY(MissionControllerLog) Q_DECLARE_LOGGING_CATEGORY(MissionControllerLog)
...@@ -95,6 +96,7 @@ public: ...@@ -95,6 +96,7 @@ public:
Q_PROPERTY(QString surveyComplexItemName READ surveyComplexItemName CONSTANT) Q_PROPERTY(QString surveyComplexItemName READ surveyComplexItemName CONSTANT)
Q_PROPERTY(QString corridorScanComplexItemName READ corridorScanComplexItemName CONSTANT) Q_PROPERTY(QString corridorScanComplexItemName READ corridorScanComplexItemName CONSTANT)
Q_PROPERTY(QString structureScanComplexItemName READ structureScanComplexItemName CONSTANT) Q_PROPERTY(QString structureScanComplexItemName READ structureScanComplexItemName CONSTANT)
Q_PROPERTY(bool onlyInsertTakeoffValid MEMBER _onlyInsertTakeoffValid NOTIFY onlyInsertTakeoffValidChanged)
Q_PROPERTY(bool isInsertTakeoffValid MEMBER _isInsertTakeoffValid NOTIFY isInsertTakeoffValidChanged) Q_PROPERTY(bool isInsertTakeoffValid MEMBER _isInsertTakeoffValid NOTIFY isInsertTakeoffValidChanged)
Q_PROPERTY(bool isInsertLandValid MEMBER _isInsertLandValid NOTIFY isInsertLandValidChanged) Q_PROPERTY(bool isInsertLandValid MEMBER _isInsertLandValid NOTIFY isInsertLandValidChanged)
Q_PROPERTY(bool isROIActive MEMBER _isROIActive NOTIFY isROIActiveChanged) Q_PROPERTY(bool isROIActive MEMBER _isROIActive NOTIFY isROIActiveChanged)
...@@ -264,6 +266,7 @@ signals: ...@@ -264,6 +266,7 @@ signals:
void currentPlanViewItemChanged (void); void currentPlanViewItemChanged (void);
void missionBoundingCubeChanged (void); void missionBoundingCubeChanged (void);
void missionItemCountChanged (int missionItemCount); void missionItemCountChanged (int missionItemCount);
void onlyInsertTakeoffValidChanged (void);
void isInsertTakeoffValidChanged (void); void isInsertTakeoffValidChanged (void);
void isInsertLandValidChanged (void); void isInsertLandValidChanged (void);
void isROIActiveChanged (void); void isROIActiveChanged (void);
...@@ -286,6 +289,7 @@ private slots: ...@@ -286,6 +289,7 @@ private slots:
void _updateTimeout (void); void _updateTimeout (void);
void _complexBoundingBoxChanged (void); void _complexBoundingBoxChanged (void);
void _recalcAll (void); void _recalcAll (void);
void _takeoffItemNotRequiredChanged (void);
private: private:
void _init(void); void _init(void);
...@@ -329,6 +333,7 @@ private: ...@@ -329,6 +333,7 @@ private:
CoordinateVector* _createCoordinateVectorWorker(VisualItemPair& pair); CoordinateVector* _createCoordinateVectorWorker(VisualItemPair& pair);
private: private:
PlanViewSettings* _planViewSettings = nullptr;
MissionManager* _missionManager; MissionManager* _missionManager;
int _missionItemCount; int _missionItemCount;
QmlObjectListModel* _visualItems; QmlObjectListModel* _visualItems;
...@@ -352,10 +357,11 @@ private: ...@@ -352,10 +357,11 @@ private:
QGeoCoordinate _takeoffCoordinate; QGeoCoordinate _takeoffCoordinate;
QGeoCoordinate _previousCoordinate; QGeoCoordinate _previousCoordinate;
CoordinateVector* _splitSegment; CoordinateVector* _splitSegment;
bool _onlyInsertTakeoffValid = true;
bool _isInsertTakeoffValid = true; bool _isInsertTakeoffValid = true;
bool _isInsertLandValid = true; bool _isInsertLandValid = false;
bool _isROIActive = false; bool _isROIActive = false;
bool _flyThroughCommandsAllowed = true; bool _flyThroughCommandsAllowed = false;
bool _isROIBeginCurrentItem = false; bool _isROIBeginCurrentItem = false;
static const char* _settingsGroup; static const char* _settingsGroup;
......
...@@ -617,7 +617,7 @@ Item { ...@@ -617,7 +617,7 @@ Item {
{ {
name: _missionController.isROIActive ? qsTr("Cancel ROI") : qsTr("ROI"), name: _missionController.isROIActive ? qsTr("Cancel ROI") : qsTr("ROI"),
iconSource: "/qmlimages/MapAddMission.svg", iconSource: "/qmlimages/MapAddMission.svg",
buttonEnabled: true, buttonEnabled: !_missionController.onlyInsertTakeoffValid,
buttonVisible: _isMissionLayer && _planMasterController.controllerVehicle.roiModeSupported, buttonVisible: _isMissionLayer && _planMasterController.controllerVehicle.roiModeSupported,
toggle: !_missionController.isROIActive toggle: !_missionController.isROIActive
}, },
......
...@@ -16,5 +16,11 @@ ...@@ -16,5 +16,11 @@
"shortDescription": "Show/Hide the mission item status display", "shortDescription": "Show/Hide the mission item status display",
"type": "bool", "type": "bool",
"defaultValue": false "defaultValue": false
},
{
"name": "takeoffItemNotRequired",
"shortDescription": "Allow missions to not require a takeoff item",
"type": "bool",
"defaultValue": false
} }
] ]
...@@ -20,3 +20,4 @@ DECLARE_SETTINGGROUP(PlanView, "PlanView") ...@@ -20,3 +20,4 @@ DECLARE_SETTINGGROUP(PlanView, "PlanView")
DECLARE_SETTINGSFACT(PlanViewSettings, displayPresetsTabFirst) DECLARE_SETTINGSFACT(PlanViewSettings, displayPresetsTabFirst)
DECLARE_SETTINGSFACT(PlanViewSettings, aboveTerrainWarning) DECLARE_SETTINGSFACT(PlanViewSettings, aboveTerrainWarning)
DECLARE_SETTINGSFACT(PlanViewSettings, showMissionItemStatus) DECLARE_SETTINGSFACT(PlanViewSettings, showMissionItemStatus)
DECLARE_SETTINGSFACT(PlanViewSettings, takeoffItemNotRequired)
...@@ -23,4 +23,5 @@ public: ...@@ -23,4 +23,5 @@ public:
DEFINE_SETTINGFACT(displayPresetsTabFirst) DEFINE_SETTINGFACT(displayPresetsTabFirst)
DEFINE_SETTINGFACT(aboveTerrainWarning) DEFINE_SETTINGFACT(aboveTerrainWarning)
DEFINE_SETTINGFACT(showMissionItemStatus) DEFINE_SETTINGFACT(showMissionItemStatus)
DEFINE_SETTINGFACT(takeoffItemNotRequired)
}; };
...@@ -43,6 +43,7 @@ Rectangle { ...@@ -43,6 +43,7 @@ Rectangle {
property Fact _followTarget: QGroundControl.settingsManager.appSettings.followTarget property Fact _followTarget: QGroundControl.settingsManager.appSettings.followTarget
property real _panelWidth: _root.width * _internalWidthRatio property real _panelWidth: _root.width * _internalWidthRatio
property real _margins: ScreenTools.defaultFontPixelWidth property real _margins: ScreenTools.defaultFontPixelWidth
property var _planViewSettings: QGroundControl.settingsManager.planViewSettings
property string _videoSource: QGroundControl.settingsManager.videoSettings.videoSource.value property string _videoSource: QGroundControl.settingsManager.videoSettings.videoSource.value
property bool _isGst: QGroundControl.videoManager.isGStreamer property bool _isGst: QGroundControl.videoManager.isGStreamer
...@@ -595,7 +596,7 @@ Rectangle { ...@@ -595,7 +596,7 @@ Rectangle {
QGCLabel { QGCLabel {
id: planViewSectionLabel id: planViewSectionLabel
text: qsTr("Plan View") text: qsTr("Plan View")
visible: QGroundControl.settingsManager.planViewSettings.visible visible: _planViewSettings.visible
} }
Rectangle { Rectangle {
Layout.preferredHeight: planViewCol.height + (_margins * 2) Layout.preferredHeight: planViewCol.height + (_margins * 2)
...@@ -621,6 +622,12 @@ Rectangle { ...@@ -621,6 +622,12 @@ Rectangle {
fact: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude fact: QGroundControl.settingsManager.appSettings.defaultMissionItemAltitude
} }
} }
FactCheckBox {
text: qsTr("Missions Do Not Require Takeoff Item")
fact: _planViewSettings.takeoffItemNotRequired
visible: _planViewSettings.takeoffItemNotRequired.visible
}
} }
} }
......
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