Commit 3c411781 authored by Gus Grubba's avatar Gus Grubba

Maintain flight start time and duration instead of flight start/end time.

The "Now" button now sets a "now" flag instead of adjusting the start time. Once the flight is created, the actual "now" time is set for flight start time.
The button is also exclusive. Once set, the start time slider is hidden as it becomes irrelevant.
parent e25f7af6
...@@ -124,7 +124,6 @@ AirMapFlightPlanManager::AirMapFlightPlanManager(AirMapSharedState& shared, QObj ...@@ -124,7 +124,6 @@ AirMapFlightPlanManager::AirMapFlightPlanManager(AirMapSharedState& shared, QObj
{ {
connect(&_pollTimer, &QTimer::timeout, this, &AirMapFlightPlanManager::_pollBriefing); connect(&_pollTimer, &QTimer::timeout, this, &AirMapFlightPlanManager::_pollBriefing);
_flightStartTime = QDateTime::currentDateTime().addSecs(60); _flightStartTime = QDateTime::currentDateTime().addSecs(60);
_flightEndTime = _flightStartTime.addSecs(30 * 60);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -145,27 +144,27 @@ AirMapFlightPlanManager::setFlightStartTime(QDateTime start) ...@@ -145,27 +144,27 @@ AirMapFlightPlanManager::setFlightStartTime(QDateTime start)
_flightStartTime = start; _flightStartTime = start;
emit flightStartTimeChanged(); emit flightStartTimeChanged();
} }
//-- End has to be after start qCDebug(AirMapManagerLog) << "Set time start time" << _flightStartTime;
if(_flightEndTime < _flightStartTime) {
_flightEndTime = _flightStartTime.addSecs(30 * 60);
emit flightEndTimeChanged();
}
qCDebug(AirMapManagerLog) << "Set time start time" << _flightStartTime << _flightEndTime;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void void
AirMapFlightPlanManager::setFlightEndTime(QDateTime end) AirMapFlightPlanManager::setFlightStartsNow(bool now)
{ {
//-- End has to be after start _flightStartsNow = now;
if(end < _flightStartTime) { emit flightStartsNowChanged();
end = _flightStartTime.addSecs(30 * 60); }
}
if(_flightEndTime != end) { //-----------------------------------------------------------------------------
_flightEndTime = end; void
emit flightEndTimeChanged(); AirMapFlightPlanManager::setFlightDuration(int seconds)
{
_flightDuration = seconds;
if(_flightDuration < 30) {
_flightDuration = 30;
} }
qCDebug(AirMapManagerLog) << "Set time end time" << _flightStartTime << _flightEndTime; emit flightDurationChanged();
qCDebug(AirMapManagerLog) << "Set time duration" << _flightDuration;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -176,10 +175,10 @@ AirMapFlightPlanManager::flightStartTime() const ...@@ -176,10 +175,10 @@ AirMapFlightPlanManager::flightStartTime() const
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
QDateTime int
AirMapFlightPlanManager::flightEndTime() const AirMapFlightPlanManager::flightDuration() const
{ {
return _flightEndTime; return _flightDuration;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -379,7 +378,7 @@ AirMapFlightPlanManager::_createFlightPlan() ...@@ -379,7 +378,7 @@ AirMapFlightPlanManager::_createFlightPlan()
qCDebug(AirMapManagerLog) << "Takeoff: " << _flight.takeoffCoord; qCDebug(AirMapManagerLog) << "Takeoff: " << _flight.takeoffCoord;
qCDebug(AirMapManagerLog) << "Bounding box:" << _flight.bc.pointNW << _flight.bc.pointSE; qCDebug(AirMapManagerLog) << "Bounding box:" << _flight.bc.pointNW << _flight.bc.pointSE;
qCDebug(AirMapManagerLog) << "Flight Start:" << flightStartTime().toString(); qCDebug(AirMapManagerLog) << "Flight Start:" << flightStartTime().toString();
qCDebug(AirMapManagerLog) << "Flight End: " << flightEndTime().toString(); qCDebug(AirMapManagerLog) << "Flight Duration: " << flightDuration();
if (_pilotID == "" && !_shared.settings().userName.isEmpty() && !_shared.settings().password.isEmpty()) { if (_pilotID == "" && !_shared.settings().userName.isEmpty() && !_shared.settings().password.isEmpty()) {
//-- Need to get the pilot id before uploading the flight plan //-- Need to get the pilot id before uploading the flight plan
...@@ -477,19 +476,18 @@ AirMapFlightPlanManager::_updateRulesAndFeatures(std::vector<RuleSet::Id>& rules ...@@ -477,19 +476,18 @@ AirMapFlightPlanManager::_updateRulesAndFeatures(std::vector<RuleSet::Id>& rules
void void
AirMapFlightPlanManager::_updateFlightStartEndTime(DateTime& start_time, DateTime& end_time) AirMapFlightPlanManager::_updateFlightStartEndTime(DateTime& start_time, DateTime& end_time)
{ {
if(_flightStartsNow) {
setFlightStartTime(QDateTime::currentDateTime().addSecs(60));
} else {
if(_flightStartTime < QDateTime::currentDateTime()) { if(_flightStartTime < QDateTime::currentDateTime()) {
//-- Can't start in the past //-- Can't start in the past
_flightStartTime = QDateTime::currentDateTime(); _flightStartTime = QDateTime::currentDateTime();
emit flightStartTimeChanged(); emit flightStartTimeChanged();
} }
}
quint64 startt = static_cast<quint64>(_flightStartTime.toUTC().toMSecsSinceEpoch()); quint64 startt = static_cast<quint64>(_flightStartTime.toUTC().toMSecsSinceEpoch());
start_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds(static_cast<qint64>(startt))); start_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds(static_cast<qint64>(startt)));
//-- End has to be after start quint64 endt = startt + (static_cast<uint64_t>(_flightDuration) * 1000);
if(_flightEndTime < _flightStartTime) {
_flightEndTime = _flightStartTime.addSecs(30 * 60);
emit flightEndTimeChanged();
}
quint64 endt = static_cast<quint64>(_flightEndTime.toUTC().toMSecsSinceEpoch());
end_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds(static_cast<qint64>(endt))); end_time = airmap::from_milliseconds_since_epoch(airmap::milliseconds(static_cast<qint64>(endt)));
} }
...@@ -561,7 +559,7 @@ AirMapFlightPlanManager::_updateFlightPlan(bool interactive) ...@@ -561,7 +559,7 @@ AirMapFlightPlanManager::_updateFlightPlan(bool interactive)
qCDebug(AirMapManagerLog) << "Updating flight plan. State:" << static_cast<int>(_state); qCDebug(AirMapManagerLog) << "Updating flight plan. State:" << static_cast<int>(_state);
if(_state != State::Idle) { if(_state != State::Idle) {
QTimer::singleShot(100, this, &AirMapFlightPlanManager::_updateFlightPlanOnTimer); QTimer::singleShot(250, this, &AirMapFlightPlanManager::_updateFlightPlanOnTimer);
return; return;
} }
//-- Get flight data //-- Get flight data
...@@ -593,9 +591,9 @@ AirMapFlightPlanManager::_updateFlightPlan(bool interactive) ...@@ -593,9 +591,9 @@ AirMapFlightPlanManager::_updateFlightPlan(bool interactive)
_flightPlan.geometry = Geometry(polygon); _flightPlan.geometry = Geometry(polygon);
qCDebug(AirMapManagerLog) << "Takeoff: " << _flight.takeoffCoord; qCDebug(AirMapManagerLog) << "Takeoff: " << _flight.takeoffCoord;
qCDebug(AirMapManagerLog) << "Bounding box:" << _flight.bc.pointNW << _flight.bc.pointSE; qCDebug(AirMapManagerLog) << "Bounding box: " << _flight.bc.pointNW << _flight.bc.pointSE;
qCDebug(AirMapManagerLog) << "Flight Start:" << flightStartTime().toString(); qCDebug(AirMapManagerLog) << "Flight Start: " << flightStartTime().toString();
qCDebug(AirMapManagerLog) << "Flight End: " << flightEndTime().toString(); qCDebug(AirMapManagerLog) << "Flight Duration:" << flightDuration();
_state = State::FlightUpdate; _state = State::FlightUpdate;
std::weak_ptr<LifetimeChecker> isAlive(_instance); std::weak_ptr<LifetimeChecker> isAlive(_instance);
...@@ -779,10 +777,7 @@ AirMapFlightPlanManager::_pollBriefing() ...@@ -779,10 +777,7 @@ AirMapFlightPlanManager::_pollBriefing()
break; break;
} }
} }
emit advisoryChanged();
emit rulesChanged();
qCDebug(AirMapManagerLog) << "Flight approval: accepted=" << accepted << "rejected" << rejected << "pending" << pending; qCDebug(AirMapManagerLog) << "Flight approval: accepted=" << accepted << "rejected" << rejected << "pending" << pending;
_state = State::Idle;
if ((rejected || accepted) && !pending) { if ((rejected || accepted) && !pending) {
if (rejected) { // rejected has priority if (rejected) { // rejected has priority
_flightPermitStatus = AirspaceFlightPlanProvider::PermitRejected; _flightPermitStatus = AirspaceFlightPlanProvider::PermitRejected;
...@@ -796,6 +791,9 @@ AirMapFlightPlanManager::_pollBriefing() ...@@ -796,6 +791,9 @@ AirMapFlightPlanManager::_pollBriefing()
_pollTimer.start(1000); _pollTimer.start(1000);
} }
} }
emit advisoryChanged();
emit rulesChanged();
_state = State::Idle;
} else { } else {
_state = State::Idle; _state = State::Idle;
QString description = QString::fromStdString(result.error().description() ? result.error().description().get() : ""); QString description = QString::fromStdString(result.error().description() ? result.error().description().get() : "");
......
...@@ -73,7 +73,8 @@ public: ...@@ -73,7 +73,8 @@ public:
PermitStatus flightPermitStatus () const override { return _flightPermitStatus; } PermitStatus flightPermitStatus () const override { return _flightPermitStatus; }
QDateTime flightStartTime () const override; QDateTime flightStartTime () const override;
QDateTime flightEndTime () const override; int flightDuration () const override;
bool flightStartsNow () const override { return _flightStartsNow; }
bool valid () override { return _valid; } bool valid () override { return _valid; }
QmlObjectListModel* advisories () override { return &_advisories; } QmlObjectListModel* advisories () override { return &_advisories; }
QmlObjectListModel* ruleSets () override { return &_rulesets; } QmlObjectListModel* ruleSets () override { return &_rulesets; }
...@@ -97,8 +98,9 @@ public: ...@@ -97,8 +98,9 @@ public:
void submitFlightPlan () override; void submitFlightPlan () override;
void startFlightPlanning (PlanMasterController* planController) override; void startFlightPlanning (PlanMasterController* planController) override;
void setFlightStartTime (QDateTime start) override; void setFlightStartTime (QDateTime start) override;
void setFlightEndTime (QDateTime end) override; void setFlightDuration (int seconds) override;
void loadFlightList (QDateTime startTime, QDateTime endTime) override; void loadFlightList (QDateTime startTime, QDateTime endTime) override;
void setFlightStartsNow (bool now) override;
void endFlight (QString flightID) override; void endFlight (QString flightID) override;
signals: signals:
...@@ -155,6 +157,7 @@ private: ...@@ -155,6 +157,7 @@ private:
PlanMasterController* _planController = nullptr; PlanMasterController* _planController = nullptr;
bool _valid = false; bool _valid = false;
bool _loadingFlightList = false; bool _loadingFlightList = false;
bool _flightStartsNow = false;
QmlObjectListModel _advisories; QmlObjectListModel _advisories;
QmlObjectListModel _rulesets; QmlObjectListModel _rulesets;
QmlObjectListModel _rulesViolation; QmlObjectListModel _rulesViolation;
...@@ -168,7 +171,7 @@ private: ...@@ -168,7 +171,7 @@ private:
QDateTime _rangeEnd; QDateTime _rangeEnd;
airmap::FlightPlan _flightPlan; airmap::FlightPlan _flightPlan;
QDateTime _flightStartTime; QDateTime _flightStartTime;
QDateTime _flightEndTime; int _flightDuration = 15 * 60;
QList<AirMapRuleFeature*> _importantFeatures; QList<AirMapRuleFeature*> _importantFeatures;
......
...@@ -19,13 +19,6 @@ Item { ...@@ -19,13 +19,6 @@ Item {
implicitWidth: detailCol.width implicitWidth: detailCol.width
property real baseHeight: ScreenTools.defaultFontPixelHeight * 22 property real baseHeight: ScreenTools.defaultFontPixelHeight * 22
property real baseWidth: ScreenTools.defaultFontPixelWidth * 40 property real baseWidth: ScreenTools.defaultFontPixelWidth * 40
function setEndTime() {
_dirty = true
var endTime = QGroundControl.airspaceManager.flightPlan.flightStartTime
endTime.setTime(endTime.getTime() + (Math.floor(durationSlider.value * 0.25) * 60 * 60 * 1000))
endTime.setTime(endTime.getTime() + ((durationSlider.value * 15) % 60) * 60 * 1000)
QGroundControl.airspaceManager.flightPlan.flightEndTime = endTime
}
Column { Column {
id: detailCol id: detailCol
spacing: ScreenTools.defaultFontPixelHeight * 0.25 spacing: ScreenTools.defaultFontPixelHeight * 0.25
...@@ -76,11 +69,10 @@ Item { ...@@ -76,11 +69,10 @@ Item {
anchors.left: parent.left anchors.left: parent.left
QGCButton { QGCButton {
text: qsTr("Now") text: qsTr("Now")
checked: QGroundControl.airspaceManager.flightPlan.flightStartsNow
onClicked: { onClicked: {
_dirty = true _dirty = true
var today = new Date() QGroundControl.airspaceManager.flightPlan.flightStartsNow = !QGroundControl.airspaceManager.flightPlan.flightStartsNow
QGroundControl.airspaceManager.flightPlan.flightStartTime = today
timeSlider.updateTime()
} }
} }
QGCButton { QGCButton {
...@@ -94,6 +86,7 @@ Item { ...@@ -94,6 +86,7 @@ Item {
} }
} }
Layout.fillWidth: true Layout.fillWidth: true
enabled: !QGroundControl.airspaceManager.flightPlan.flightStartsNow
iconSource: "qrc:/airmap/expand.svg" iconSource: "qrc:/airmap/expand.svg"
onClicked: { onClicked: {
_dirty = true _dirty = true
...@@ -108,10 +101,12 @@ Item { ...@@ -108,10 +101,12 @@ Item {
anchors.right: parent.right anchors.right: parent.right
anchors.left: parent.left anchors.left: parent.left
height: timeSlider.height height: timeSlider.height
visible: !QGroundControl.airspaceManager.flightPlan.flightStartsNow
QGCSlider { QGCSlider {
id: timeSlider id: timeSlider
width: parent.width - timeLabel.width - ScreenTools.defaultFontPixelWidth width: parent.width - timeLabel.width - ScreenTools.defaultFontPixelWidth
stepSize: 1 stepSize: 1
enabled: !QGroundControl.airspaceManager.flightPlan.flightStartsNow
minimumValue: 0 minimumValue: 0
maximumValue: 95 // 96 blocks of 15 minutes in 24 hours maximumValue: 95 // 96 blocks of 15 minutes in 24 hours
anchors.left: parent.left anchors.left: parent.left
...@@ -124,7 +119,6 @@ Item { ...@@ -124,7 +119,6 @@ Item {
today.setSeconds(0) today.setSeconds(0)
today.setMilliseconds(0) today.setMilliseconds(0)
QGroundControl.airspaceManager.flightPlan.flightStartTime = today QGroundControl.airspaceManager.flightPlan.flightStartTime = today
setEndTime()
} }
Component.onCompleted: { Component.onCompleted: {
updateTime() updateTime()
...@@ -146,6 +140,11 @@ Item { ...@@ -146,6 +140,11 @@ Item {
property int minute: (timeSlider.value * 15) % 60 property int minute: (timeSlider.value * 15) % 60
} }
} }
QGCLabel {
text: qsTr("Now")
visible: QGroundControl.airspaceManager.flightPlan.flightStartsNow
anchors.horizontalCenter: parent.horizontalCenter
}
QGCLabel { QGCLabel {
text: qsTr("Duration") text: qsTr("Duration")
} }
...@@ -162,16 +161,13 @@ Item { ...@@ -162,16 +161,13 @@ Item {
anchors.left: parent.left anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
onValueChanged: { onValueChanged: {
setEndTime() var hour = Math.floor(durationSlider.value * 0.25)
var minute = (durationSlider.value * 15) % 60
var seconds = (hour * 60 * 60) + (minute * 60)
QGroundControl.airspaceManager.flightPlan.flightDuration = seconds
} }
Component.onCompleted: { Component.onCompleted: {
updateTime() var val = ((QGroundControl.airspaceManager.flightPlan.flightDuration / 60) * (96/1440)) + 1
}
function updateTime() {
var startTime = QGroundControl.airspaceManager.flightPlan.flightStartTime
var endTime = QGroundControl.airspaceManager.flightPlan.flightEndTime
var val = (endTime.getTime() - startTime.getTime()) / 1000 / 60
val = (val * (96/360)) + 1
if(val > 24) val = 24 if(val > 24) val = 24
durationSlider.value = Math.ceil(val) durationSlider.value = Math.ceil(val)
} }
......
...@@ -144,7 +144,8 @@ public: ...@@ -144,7 +144,8 @@ public:
///< Flight Planning and Filing ///< Flight Planning and Filing
Q_PROPERTY(QDateTime flightStartTime READ flightStartTime WRITE setFlightStartTime NOTIFY flightStartTimeChanged) ///< Start of flight Q_PROPERTY(QDateTime flightStartTime READ flightStartTime WRITE setFlightStartTime NOTIFY flightStartTimeChanged) ///< Start of flight
Q_PROPERTY(QDateTime flightEndTime READ flightEndTime WRITE setFlightEndTime NOTIFY flightEndTimeChanged) ///< End of flight Q_PROPERTY(int flightDuration READ flightDuration WRITE setFlightDuration NOTIFY flightDurationChanged) ///< Flight Duration
Q_PROPERTY(bool flightStartsNow READ flightStartsNow WRITE setFlightStartsNow NOTIFY flightStartsNowChanged)
///< Flight Briefing ///< Flight Briefing
Q_PROPERTY(PermitStatus flightPermitStatus READ flightPermitStatus NOTIFY flightPermitStatusChanged) ///< State of flight permission Q_PROPERTY(PermitStatus flightPermitStatus READ flightPermitStatus NOTIFY flightPermitStatusChanged) ///< State of flight permission
...@@ -172,7 +173,8 @@ public: ...@@ -172,7 +173,8 @@ public:
virtual PermitStatus flightPermitStatus () const { return PermitNone; } virtual PermitStatus flightPermitStatus () const { return PermitNone; }
virtual QDateTime flightStartTime () const = 0; virtual QDateTime flightStartTime () const = 0;
virtual QDateTime flightEndTime () const = 0; virtual int flightDuration () const = 0;
virtual bool flightStartsNow () const = 0;
virtual QGCGeoBoundingCube* missionArea () = 0; virtual QGCGeoBoundingCube* missionArea () = 0;
virtual bool valid () = 0; ///< Current advisory list is valid virtual bool valid () = 0; ///< Current advisory list is valid
virtual QmlObjectListModel* advisories () = 0; ///< List of AirspaceAdvisory virtual QmlObjectListModel* advisories () = 0; ///< List of AirspaceAdvisory
...@@ -189,13 +191,15 @@ public: ...@@ -189,13 +191,15 @@ public:
virtual bool loadingFlightList () = 0; virtual bool loadingFlightList () = 0;
virtual void setFlightStartTime (QDateTime start) = 0; virtual void setFlightStartTime (QDateTime start) = 0;
virtual void setFlightEndTime (QDateTime end) = 0; virtual void setFlightDuration (int seconds) = 0;
virtual void setFlightStartsNow (bool now) = 0;
virtual void startFlightPlanning (PlanMasterController* planController) = 0; virtual void startFlightPlanning (PlanMasterController* planController) = 0;
signals: signals:
void flightPermitStatusChanged (); void flightPermitStatusChanged ();
void flightStartTimeChanged (); void flightStartTimeChanged ();
void flightEndTimeChanged (); void flightStartsNowChanged ();
void flightDurationChanged ();
void advisoryChanged (); void advisoryChanged ();
void missionAreaChanged (); void missionAreaChanged ();
void rulesChanged (); void rulesChanged ();
......
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