Newer
Older
Gus Grubba
committed
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
import QtQuick.Dialogs 1.3
import QGroundControl.Airmap 1.0
import QGroundControl.Airspace 1.0
import QGroundControl.Controls 1.0
import QGroundControl.FactControls 1.0
import QGroundControl.Palette 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Vehicle 1.0
height: _colapsed ? colapsedRect.height : expandedRect.height
Gus Grubba
committed
property bool planView: false
property color _airspaceColor: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray
property bool _validRules: QGroundControl.airspaceManager.connected && QGroundControl.airspaceManager.ruleSets.valid
property bool _validAdvisories: QGroundControl.airspaceManager.connected && QGroundControl.airspaceManager.advisories.valid
property color _textColor: qgcPal.text
property bool _colapsed: !QGroundControl.airspaceManager.airspaceVisible || !QGroundControl.airspaceManager.connected
property int _flightPermit: QGroundControl.airspaceManager.flightPlan.flightPermitStatus
readonly property real _radius: ScreenTools.defaultFontPixelWidth * 0.5
readonly property color _colorOrange: "#d75e0d"
readonly property color _colorBrown: "#3c2b24"
readonly property color _colorLightBrown: "#5a4e49"
readonly property color _colorGray: "#615c61"
readonly property color _colorLightGray: "#a0a0a0"
readonly property color _colorMidBrown: "#3a322f"
readonly property color _colorYellow: "#d7c61d"
readonly property color _colorWhite: "#ffffff"
readonly property color _colorRed: "#aa1200"
readonly property color _colorGreen: "#125f00"
Gus Grubba
committed
readonly property real _baseHeight: ScreenTools.defaultFontPixelHeight * 22
readonly property real _baseWidth: ScreenTools.defaultFontPixelWidth * 40
QGCPalette {
id: qgcPal
colorGroupEnabled: enabled
}
function getAispaceColor(color) {
if(color === AirspaceAdvisoryProvider.Green) return _colorGreen;
if(color === AirspaceAdvisoryProvider.Yellow) return _colorYellow;
if(color === AirspaceAdvisoryProvider.Orange) return _colorOrange;
if(color === AirspaceAdvisoryProvider.Red) return _colorRed;
return _colorGray;
}
function hasBriefRules() {
if(QGroundControl.airspaceManager.flightPlan.rulesViolation.count > 0)
return true;
if(QGroundControl.airspaceManager.flightPlan.rulesInfo.count > 0)
return true;
if(QGroundControl.airspaceManager.flightPlan.rulesReview.count > 0)
return true;
if(QGroundControl.airspaceManager.flightPlan.rulesFollowing.count > 0)
return true;
return false;
}
on_AirspaceColorChanged: {
if(_validAdvisories) {
if(QGroundControl.airspaceManager.advisories.airspaceColor === AirspaceAdvisoryProvider.Yellow) {
_textColor = "#000000"
return
}
}
_textColor = _colorWhite
}
//---------------------------------------------------------------
//-- Colapsed State
Rectangle {
id: colapsedRect
width: parent.width
height: _colapsed ? colapsedRow.height + ScreenTools.defaultFontPixelHeight : 0
color: QGroundControl.airspaceManager.connected ? (_validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray) : _colorGray
Row {
id: colapsedRow
spacing: ScreenTools.defaultFontPixelWidth
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth
anchors.verticalCenter: parent.verticalCenter
QGCColoredImage {
width: height
height: ScreenTools.defaultFontPixelWidth * 2.5
sourceSize.height: height
source: "qrc:/airmap/advisory-icon.svg"
color: _textColor
Gus Grubba
committed
Column {
spacing: 0
Gus Grubba
committed
QGCLabel {
text: qsTr("Airspace")
color: _textColor
}
QGCLabel {
text: _validAdvisories ? QGroundControl.airspaceManager.advisories.advisories.count + qsTr(" Advisories") : ""
color: _textColor
visible: _validAdvisories
font.pointSize: ScreenTools.smallFontPointSize
}
Item {
width: ScreenTools.defaultFontPixelWidth
height: 1
}
AirspaceWeather {
iconHeight: ScreenTools.defaultFontPixelHeight * 2
visible: QGroundControl.airspaceManager.weatherInfo.valid && QGroundControl.airspaceManager.connected
contentColor: _textColor
QGCLabel {
text: qsTr("Not Connected")
color: qgcPal.text
visible: !QGroundControl.airspaceManager.connected
anchors.verticalCenter: parent.verticalCenter
}
QGCColoredImage {
width: height
height: ScreenTools.defaultFontPixelWidth * 2.5
sourceSize.height: height
source: "qrc:/airmap/expand.svg"
fillMode: Image.PreserveAspectFit
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.verticalCenter: parent.verticalCenter
}
anchors.fill: parent
enabled: QGroundControl.airspaceManager.connected
QGroundControl.airspaceManager.airspaceVisible = true
}
}
//---------------------------------------------------------------
//-- Expanded State
Rectangle {
id: expandedRect
width: parent.width
height: !_colapsed ? expandedCol.height + ScreenTools.defaultFontPixelHeight : 0
color: _validAdvisories ? getAispaceColor(QGroundControl.airspaceManager.advisories.airspaceColor) : _colorGray
MouseArea {
anchors.fill: parent
onWheel: { wheel.accepted = true; }
onPressed: { mouse.accepted = true; }
onReleased: { mouse.accepted = true; }
}
Column {
id: expandedCol
spacing: ScreenTools.defaultFontPixelHeight * 0.5
anchors.left: parent.left
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
//-- Header
Item {
height: expandedRow.height
anchors.left: parent.left
anchors.right: parent.right
Row {
id: expandedRow
spacing: ScreenTools.defaultFontPixelWidth
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth
QGCColoredImage {
width: height
height: ScreenTools.defaultFontPixelWidth * 2.5
sourceSize.height: height
source: "qrc:/airmap/advisory-icon.svg"
fillMode: Image.PreserveAspectFit
anchors.verticalCenter: parent.verticalCenter
}
Column {
spacing: 0
anchors.verticalCenter: parent.verticalCenter
QGCLabel {
text: qsTr("Airspace")
text: _validAdvisories ? QGroundControl.airspaceManager.advisories.advisories.count + qsTr(" Advisories") : ""
color: _textColor
visible: _validAdvisories
Item {
width: ScreenTools.defaultFontPixelWidth
height: 1
}
AirspaceWeather {
visible: QGroundControl.airspaceManager.weatherInfo.valid && showColapse
QGCColoredImage {
width: height
height: ScreenTools.defaultFontPixelWidth * 2.5
sourceSize.height: height
source: "qrc:/airmap/colapse.svg"
fillMode: Image.PreserveAspectFit
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.verticalCenter: parent.verticalCenter
MouseArea {
anchors.fill: parent
enabled: showColapse
onClicked: QGroundControl.airspaceManager.airspaceVisible = false
visible: QGroundControl.airspaceManager.weatherInfo.valid && !showColapse
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.verticalCenter: parent.verticalCenter
}
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
}
//-- Contents (Brown Box)
Rectangle {
color: _colorBrown
height: airspaceCol.height + ScreenTools.defaultFontPixelHeight
radius: _radius
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 0.5
Column {
id: airspaceCol
spacing: ScreenTools.defaultFontPixelHeight * 0.5
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.verticalCenter: parent.verticalCenter
//-- Regulations
Rectangle {
color: _colorLightBrown
height: regCol.height + ScreenTools.defaultFontPixelHeight
radius: _radius
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 0.5
Column {
id: regCol
spacing: ScreenTools.defaultFontPixelHeight * 0.25
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.verticalCenter: parent.verticalCenter
QGCLabel {
text: qsTr("Airspace Regulations")
color: _colorWhite
anchors.horizontalCenter: parent.horizontalCenter
}
QGCLabel {
text: qsTr("Advisories based on the selected rules.")
color: _colorWhite
anchors.horizontalCenter: parent.horizontalCenter
font.pointSize: ScreenTools.smallFontPointSize
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 0.125; }
GridLayout {
columns: 2
anchors.left: parent.left
anchors.right: parent.right
Rectangle {
width: regButton.height
height: width
radius: 2
color: _colorGray
Layout.alignment: Qt.AlignVCenter
width: height
height: parent.height * 0.5
sourceSize.height: height
source: "qrc:/airmap/pencil.svg"
color: _colorWhite
fillMode: Image.PreserveAspectFit
MouseArea {
anchors.fill: parent
onClicked: {
Gus Grubba
committed
ruleSelector.open()
Gus Grubba
committed
height: ScreenTools.defaultFontPixelHeight * 1.5
radius: 2
color: _colorMidBrown
Layout.fillWidth: true
QGCLabel {
Gus Grubba
committed
id: regLabel
text: _validRules ? QGroundControl.airspaceManager.ruleSets.selectedRuleSets : qsTr("None")
Gus Grubba
committed
elide: Text.ElideRight
horizontalAlignment: Text.AlignHCenter
color: _colorWhite
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.verticalCenter: parent.verticalCenter
height: ScreenTools.defaultFontPixelHeight * 8
contentHeight: advisoryCol.height
flickableDirection: Flickable.VerticalFlick
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 0.5
anchors.right: parent.right
anchors.rightMargin:ScreenTools.defaultFontPixelWidth * 0.5
Column {
id: advisoryCol
spacing: ScreenTools.defaultFontPixelHeight * 0.5
anchors.right: parent.right
anchors.left: parent.left
Repeater {
model: _validAdvisories ? QGroundControl.airspaceManager.advisories.advisories : []
delegate: AirspaceRegulation {
regTitle: object.typeStr
regText: object.name
regColor: getAispaceColor(object.color)
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth
}
}
}
QGCButton {
text: planView ? qsTr("File Flight Plan") : qsTr("Flight Brief")
backRadius: 4
heightFactor: 0.3333
showBorder: true
width: ScreenTools.defaultFontPixelWidth * 16
visible: _flightPermit !== AirspaceFlightPlanProvider.PermitNone
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
Gus Grubba
committed
planView ? flightDetails.open() : flightBrief.open()
font.pointSize: ScreenTools.smallFontPointSize
anchors.horizontalCenter: parent.horizontalCenter
}
}
}
//---------------------------------------------------------------
//-- Rule Selector
Gus Grubba
committed
Popup {
id: ruleSelector
width: rulesCol.width + ScreenTools.defaultFontPixelWidth
height: rulesCol.height + ScreenTools.defaultFontPixelHeight
modal: true
focus: true
parent: Overlay.overlay
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
property var _popupTarget: null
property var _arrowTarget: null
onVisibleChanged: {
if(visible) {
_popupTarget = mainWindow.contentItem.mapFromItem(_root, 0, 0)
_arrowTarget = mainWindow.contentItem.mapFromItem(pencilIcon, 0, 0)
Gus Grubba
committed
}
x: _popupTarget ? _popupTarget.x - width - (ScreenTools.defaultFontPixelWidth * 5) : 0
y: _popupTarget ? _popupTarget.y + mainWindow.header.height : 0
background: Rectangle {
anchors.fill: parent
color: qgcPal.window
radius: ScreenTools.defaultFontPixelWidth
}
Column {
id: rulesCol
spacing: ScreenTools.defaultFontPixelHeight * 0.5
anchors.centerIn: parent
//-- Regulations
Gus Grubba
committed
color: qgcPal.windowShade
height: rulesTitle.height + ScreenTools.defaultFontPixelHeight
width: parent.width * 0.95
radius: _radius
anchors.horizontalCenter: parent.horizontalCenter
QGCLabel {
id: rulesTitle
text: qsTr("Airspace Regulation Options")
anchors.centerIn: parent
}
Gus Grubba
committed
Flickable {
clip: true
width: ScreenTools.defaultFontPixelWidth * 30
height: ScreenTools.defaultFontPixelHeight * 14
contentHeight: rulesetCol.height
flickableDirection: Flickable.VerticalFlick
Gus Grubba
committed
id: rulesetCol
spacing: ScreenTools.defaultFontPixelHeight * 0.25
anchors.right: parent.right
anchors.left: parent.left
anchors.rightMargin: ScreenTools.defaultFontPixelWidth * 2
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2
Item {
width: 1
height: 1
}
QGCLabel {
text: qsTr("PICK ONE REGULATION")
font.pointSize: ScreenTools.smallFontPointSize
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2
}
Repeater {
model: _validRules ? QGroundControl.airspaceManager.ruleSets.ruleSets : []
delegate: RuleSelector {
visible: object.selectionType === AirspaceRuleSet.Pickone
rule: object
autoExclusive: true
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth
Gus Grubba
committed
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
Item {
width: 1
height: 1
}
QGCLabel {
text: qsTr("OPTIONAL")
font.pointSize: ScreenTools.smallFontPointSize
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2
}
Repeater {
model: _validRules ? QGroundControl.airspaceManager.ruleSets.ruleSets : []
delegate: RuleSelector {
visible: object.selectionType === AirspaceRuleSet.Optional
rule: object
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth
}
}
Item {
width: 1
height: 1
}
QGCLabel {
text: qsTr("REQUIRED")
font.pointSize: ScreenTools.smallFontPointSize
anchors.leftMargin: ScreenTools.defaultFontPixelWidth * 2
}
Repeater {
model: _validRules ? QGroundControl.airspaceManager.ruleSets.ruleSets : []
delegate: RuleSelector {
visible: object.selectionType === AirspaceRuleSet.Required
rule: object
enabled: false
anchors.right: parent.right
anchors.rightMargin: ScreenTools.defaultFontPixelWidth
anchors.left: parent.left
anchors.leftMargin: ScreenTools.defaultFontPixelWidth
Gus Grubba
committed
}
//-- Arrow
QGCColoredImage {
id: arrowIcon
width: height
height: ScreenTools.defaultFontPixelHeight * 2
sourceSize.height: height
source: "qrc:/airmap/right-arrow.svg"
color: qgcPal.window
anchors.left: parent.right
y: ruleSelector._arrowTarget ? (ruleSelector._arrowTarget.y - height) : 0
Gus Grubba
committed
//---------------------------------------------------------------
//-- Flight Details
Gus Grubba
committed
Popup {
id: flightDetails
width: flDetailsRow.width + (ScreenTools.defaultFontPixelWidth * 4)
height: flDetailsRow.height + (ScreenTools.defaultFontPixelHeight * 2)
modal: true
focus: true
parent: Overlay.overlay
x: Math.round((mainWindow.width - width) * 0.5)
y: Math.round((mainWindow.height - height) * 0.5)
closePolicy: Popup.NoAutoClose
background: Rectangle {
anchors.fill: parent
color: qgcPal.window
radius: ScreenTools.defaultFontPixelWidth
}
Row {
id: flDetailsRow
spacing: ScreenTools.defaultFontPixelWidth
anchors.centerIn: parent
//---------------------------------------------------------
//-- Flight Details
FlightDetails {
id: _flightDetails
baseHeight: _baseHeight
baseWidth: _baseWidth
}
Gus Grubba
committed
//---------------------------------------------------------
//-- Divider
Rectangle {
Gus Grubba
committed
color: qgcPal.text
width: 1
height: parent.height
opacity: 0.25
anchors.verticalCenter: parent.verticalCenter
}
Gus Grubba
committed
//---------------------------------------------------------
//-- Flight Brief
FlightBrief {
baseHeight: _baseHeight
baseWidth: _baseWidth
onClosed: flightDetails.close()
}
}
}
//---------------------------------------------------------------
//-- Flight Brief
Gus Grubba
committed
Popup {
id: flightBrief
width: flightBriedItem.width + (ScreenTools.defaultFontPixelWidth * 4)
height: flightBriedItem.height + (ScreenTools.defaultFontPixelHeight * 2)
modal: true
focus: true
parent: Overlay.overlay
x: Math.round((mainWindow.width - width) * 0.5)
y: Math.round((mainWindow.height - height) * 0.5)
closePolicy: Popup.NoAutoClose
background: Rectangle {
anchors.fill: parent
color: qgcPal.window
radius: ScreenTools.defaultFontPixelWidth
}
//---------------------------------------------------------
//-- Flight Brief
FlightBrief {
id: flightBriedItem
baseHeight: _baseHeight
baseWidth: _baseWidth
onClosed: flightBrief.close()
anchors.centerIn: parent
}
}