7 changed files with 416 additions and 298 deletions
@ -0,0 +1,199 @@ |
|||||||
|
import QtQuick 2.3 |
||||||
|
import QtQuick.Controls 1.2 |
||||||
|
import QtQuick.Controls.Styles 1.4 |
||||||
|
import QtQuick.Dialogs 1.2 |
||||||
|
import QtQml 2.2 |
||||||
|
|
||||||
|
import QGroundControl 1.0 |
||||||
|
import QGroundControl.Airmap 1.0 |
||||||
|
import QGroundControl.Airspace 1.0 |
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.Palette 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
import QGroundControl.SettingsManager 1.0 |
||||||
|
|
||||||
|
Item { |
||||||
|
id: _root |
||||||
|
implicitHeight: briefRootCol.height |
||||||
|
implicitWidth: briefRootCol.width |
||||||
|
property real baseHeight: ScreenTools.defaultFontPixelHeight * 22 |
||||||
|
property real baseWidth: ScreenTools.defaultFontPixelWidth * 40 |
||||||
|
Column { |
||||||
|
id: briefRootCol |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight * 0.25 |
||||||
|
Rectangle { |
||||||
|
color: qgcPal.windowShade |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
height: briefLabel.height + ScreenTools.defaultFontPixelHeight |
||||||
|
QGCLabel { |
||||||
|
id: briefLabel |
||||||
|
text: qsTr("Flight Brief") |
||||||
|
font.pointSize: ScreenTools.mediumFontPointSize |
||||||
|
font.family: ScreenTools.demiboldFontFamily |
||||||
|
anchors.centerIn: parent |
||||||
|
} |
||||||
|
} |
||||||
|
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 0.5; } |
||||||
|
Flickable { |
||||||
|
clip: true |
||||||
|
width: baseWidth |
||||||
|
height: baseHeight - buttonRow.height - ScreenTools.defaultFontPixelHeight |
||||||
|
contentHeight: briefCol.height |
||||||
|
flickableDirection: Flickable.VerticalFlick |
||||||
|
Column { |
||||||
|
id: briefCol |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight * 0.5 |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Authorizations") |
||||||
|
} |
||||||
|
Rectangle { |
||||||
|
color: qgcPal.windowShade |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
height: authCol.height + ScreenTools.defaultFontPixelHeight |
||||||
|
Column { |
||||||
|
id: authCol |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight * 0.5 |
||||||
|
anchors.margins: ScreenTools.defaultFontPixelWidth |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.verticalCenter: parent.verticalCenter |
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Federal Aviation Administration") |
||||||
|
visible: _flightPermit !== AirspaceFlightPlanProvider.PermitNone |
||||||
|
} |
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Automatic authorization to fly in controlled airspace") |
||||||
|
visible: _flightPermit !== AirspaceFlightPlanProvider.PermitNone |
||||||
|
font.pointSize: ScreenTools.smallFontPointSize |
||||||
|
} |
||||||
|
Rectangle { |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
height: label.height + (ScreenTools.defaultFontPixelHeight * 0.5) |
||||||
|
color: { |
||||||
|
if(_flightPermit == AirspaceFlightPlanProvider.PermitPending) |
||||||
|
return _colorOrange |
||||||
|
if(_flightPermit == AirspaceFlightPlanProvider.PermitAccepted) |
||||||
|
return _colorGreen |
||||||
|
if(_flightPermit == AirspaceFlightPlanProvider.PermitRejected) |
||||||
|
return _colorRed |
||||||
|
return _colorGray |
||||||
|
} |
||||||
|
QGCLabel { |
||||||
|
id: label |
||||||
|
color: _colorWhite |
||||||
|
text: { |
||||||
|
if(_flightPermit === AirspaceFlightPlanProvider.PermitPending) |
||||||
|
return qsTr("Authorization Pending") |
||||||
|
if(_flightPermit === AirspaceFlightPlanProvider.PermitAccepted) |
||||||
|
return qsTr("Authorization Accepted") |
||||||
|
if(_flightPermit === AirspaceFlightPlanProvider.PermitRejected) |
||||||
|
return qsTr("Authorization Rejected") |
||||||
|
return qsTr("Authorization Unknown") |
||||||
|
} |
||||||
|
anchors.centerIn: parent |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 0.25; } |
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Rules & Compliance") |
||||||
|
visible: hasBriefRules() |
||||||
|
} |
||||||
|
ExclusiveGroup { id: ruleGroup } |
||||||
|
ComplianceRules { |
||||||
|
text: qsTr("Rules you may be violating") |
||||||
|
rules: violationRules |
||||||
|
visible: violationRules && violationRules.count |
||||||
|
color: _colorRed |
||||||
|
exclusiveGroup: ruleGroup |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
property var violationRules: QGroundControl.airspaceManager.flightPlan.rulesViolation |
||||||
|
} |
||||||
|
ComplianceRules { |
||||||
|
text: qsTr("Rules needing more information") |
||||||
|
rules: infoRules |
||||||
|
color: _colorOrange |
||||||
|
visible: infoRules && infoRules.count |
||||||
|
exclusiveGroup: ruleGroup |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
property var infoRules: QGroundControl.airspaceManager.flightPlan.rulesInfo |
||||||
|
} |
||||||
|
ComplianceRules { |
||||||
|
text: qsTr("Rules you should review") |
||||||
|
rules: reviewRules |
||||||
|
color: _colorYellow |
||||||
|
visible: reviewRules && reviewRules.count |
||||||
|
exclusiveGroup: ruleGroup |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
property var reviewRules: QGroundControl.airspaceManager.flightPlan.rulesReview |
||||||
|
} |
||||||
|
ComplianceRules { |
||||||
|
text: qsTr("Rules you are following") |
||||||
|
rules: followRules |
||||||
|
color: _colorGreen |
||||||
|
visible: followRules && followRules.count |
||||||
|
exclusiveGroup: ruleGroup |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
property var followRules: QGroundControl.airspaceManager.flightPlan.rulesFollowing |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
//------------------------------------------------------------- |
||||||
|
//-- File Flight Plan or Close |
||||||
|
Item { width: 1; height: ScreenTools.defaultFontPixelHeight; } |
||||||
|
Row { |
||||||
|
id: buttonRow |
||||||
|
spacing: ScreenTools.defaultFontPixelWidth |
||||||
|
anchors.horizontalCenter: parent.horizontalCenter |
||||||
|
QGCButton { |
||||||
|
text: qsTr("Update Plan") |
||||||
|
backRadius: 4 |
||||||
|
heightFactor: 0.3333 |
||||||
|
showBorder: true |
||||||
|
enabled: _flightPermit !== AirspaceFlightPlanProvider.PermitNone && _dirty |
||||||
|
visible: planView |
||||||
|
width: ScreenTools.defaultFontPixelWidth * 12 |
||||||
|
onClicked: { |
||||||
|
//-- TODO: Update Plan |
||||||
|
mainWindow.enableToolbar() |
||||||
|
rootLoader.sourceComponent = null |
||||||
|
} |
||||||
|
} |
||||||
|
QGCButton { |
||||||
|
text: qsTr("Submit Plan") |
||||||
|
backRadius: 4 |
||||||
|
heightFactor: 0.3333 |
||||||
|
showBorder: true |
||||||
|
enabled: _flightPermit !== AirspaceFlightPlanProvider.PermitNone |
||||||
|
width: ScreenTools.defaultFontPixelWidth * 12 |
||||||
|
visible: planView |
||||||
|
onClicked: { |
||||||
|
//-- TODO: File Plan |
||||||
|
mainWindow.enableToolbar() |
||||||
|
rootLoader.sourceComponent = null |
||||||
|
} |
||||||
|
} |
||||||
|
QGCButton { |
||||||
|
text: qsTr("Close") |
||||||
|
backRadius: 4 |
||||||
|
heightFactor: 0.3333 |
||||||
|
showBorder: true |
||||||
|
width: ScreenTools.defaultFontPixelWidth * 12 |
||||||
|
onClicked: { |
||||||
|
mainWindow.enableToolbar() |
||||||
|
rootLoader.sourceComponent = null |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,145 @@ |
|||||||
|
import QtQuick 2.3 |
||||||
|
import QtQuick.Controls 1.2 |
||||||
|
import QtQuick.Controls.Styles 1.4 |
||||||
|
import QtQuick.Dialogs 1.2 |
||||||
|
import QtQml 2.2 |
||||||
|
|
||||||
|
import QGroundControl 1.0 |
||||||
|
import QGroundControl.Airmap 1.0 |
||||||
|
import QGroundControl.Airspace 1.0 |
||||||
|
import QGroundControl.Controls 1.0 |
||||||
|
import QGroundControl.Palette 1.0 |
||||||
|
import QGroundControl.ScreenTools 1.0 |
||||||
|
import QGroundControl.SettingsManager 1.0 |
||||||
|
|
||||||
|
Item { |
||||||
|
id: _root |
||||||
|
implicitHeight: detailCol.height |
||||||
|
implicitWidth: detailCol.width |
||||||
|
property real baseHeight: ScreenTools.defaultFontPixelHeight * 22 |
||||||
|
property real baseWidth: ScreenTools.defaultFontPixelWidth * 40 |
||||||
|
Column { |
||||||
|
id: detailCol |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight * 0.25 |
||||||
|
Rectangle { |
||||||
|
color: qgcPal.windowShade |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
height: detailsLabel.height + ScreenTools.defaultFontPixelHeight |
||||||
|
QGCLabel { |
||||||
|
id: detailsLabel |
||||||
|
text: qsTr("Flight Details") |
||||||
|
font.pointSize: ScreenTools.mediumFontPointSize |
||||||
|
font.family: ScreenTools.demiboldFontFamily |
||||||
|
anchors.centerIn: parent |
||||||
|
} |
||||||
|
} |
||||||
|
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 0.5; } |
||||||
|
Flickable { |
||||||
|
clip: true |
||||||
|
width: baseWidth |
||||||
|
height: baseHeight |
||||||
|
contentHeight: flContextCol.height |
||||||
|
flickableDirection: Flickable.VerticalFlick |
||||||
|
Column { |
||||||
|
id: flContextCol |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight * 0.5 |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Flight Date & Time") |
||||||
|
} |
||||||
|
Rectangle { |
||||||
|
id: dateRect |
||||||
|
color: qgcPal.windowShade |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
height: datePickerCol.height + (ScreenTools.defaultFontPixelHeight * 2) |
||||||
|
Column { |
||||||
|
id: datePickerCol |
||||||
|
spacing: ScreenTools.defaultFontPixelHeight * 0.5 |
||||||
|
anchors.margins: ScreenTools.defaultFontPixelWidth |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.verticalCenter: parent.verticalCenter |
||||||
|
QGCButton { |
||||||
|
text: { |
||||||
|
var today = new Date(); |
||||||
|
if(datePicker.selectedDate.setHours(0,0,0,0) === today.setHours(0,0,0,0)) { |
||||||
|
return qsTr("Today") |
||||||
|
} else { |
||||||
|
return datePicker.selectedDate.toLocaleDateString(Qt.locale()) |
||||||
|
} |
||||||
|
} |
||||||
|
iconSource: "qrc:/airmap/expand.svg" |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
onClicked: { |
||||||
|
_dirty = true |
||||||
|
datePicker.visible = true |
||||||
|
} |
||||||
|
} |
||||||
|
Item { |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
height: timeSlider.height |
||||||
|
QGCLabel { |
||||||
|
id: timeLabel |
||||||
|
text: ('00' + hour).slice(-2) + ":" + ('00' + minute).slice(-2) |
||||||
|
width: ScreenTools.defaultFontPixelWidth * 5 |
||||||
|
anchors.left: parent.left |
||||||
|
anchors.verticalCenter: parent.verticalCenter |
||||||
|
property int hour: Math.floor(timeSlider.value * 0.25) |
||||||
|
property int minute: (timeSlider.value * 15) % 60 |
||||||
|
} |
||||||
|
QGCSlider { |
||||||
|
id: timeSlider |
||||||
|
width: parent.width - timeLabel.width - ScreenTools.defaultFontPixelWidth |
||||||
|
stepSize: 1 |
||||||
|
minimumValue: 0 |
||||||
|
maximumValue: 95 // 96 blocks of 15 minutes in 24 hours |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.verticalCenter: parent.verticalCenter |
||||||
|
onValueChanged: { |
||||||
|
_dirty = true |
||||||
|
} |
||||||
|
Component.onCompleted: { |
||||||
|
var today = new Date() |
||||||
|
var val = (((today.getHours() * 60) + today.getMinutes()) * (96/1440)) + 1 |
||||||
|
if(val > 95) val = 95 |
||||||
|
value = Math.ceil(val) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 0.25; } |
||||||
|
QGCLabel { |
||||||
|
text: qsTr("Flight Context") |
||||||
|
visible: QGroundControl.airspaceManager.flightPlan.briefFeatures.count > 0 |
||||||
|
} |
||||||
|
Repeater { |
||||||
|
model: QGroundControl.airspaceManager.flightPlan.briefFeatures |
||||||
|
visible: QGroundControl.airspaceManager.flightPlan.briefFeatures.count > 0 |
||||||
|
delegate: FlightFeature { |
||||||
|
feature: object |
||||||
|
visible: object && object.type !== AirspaceRuleFeature.Unknown && object.description !== "" && object.name !== "" |
||||||
|
anchors.right: parent.right |
||||||
|
anchors.left: parent.left |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
Calendar { |
||||||
|
id: datePicker |
||||||
|
anchors.centerIn: parent |
||||||
|
visible: false; |
||||||
|
minimumDate: { |
||||||
|
return new Date() |
||||||
|
} |
||||||
|
onClicked: { |
||||||
|
visible = false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue