@ -32,24 +32,22 @@ import QGroundControl.Airmap 1.0
@@ -32,24 +32,22 @@ import QGroundControl.Airmap 1.0
Item {
id: _root
z: QGroundControl . zOrderTopMost
property bool planControlColapsed: false
/ / / < T h i s p r o p e r t y i s u s e d t o d e t e r m i n e d i r t y s t a t e f o r p r o m p t i n g o n Q G C s h u t d o w n
readonly property bool dirty: _planMasterController . dirty
readonly property bool dirty: _planMasterController . dirty
readonly property int _decimalPlaces : 8
readonly property real _horizontalMargin : ScreenTools . defaultFontPixelWidth * 0.5
readonly property real _margin : ScreenTools . defaultFontPixelHeight * 0.5
readonly property real _radius : ScreenTools . defaultFontPixelWidth * 0.5
readonly property real _rightPanelWidth : Math . min ( parent . width / 3 , ScreenTools . defaultFontPixelWidth * 30 )
readonly property real _toolButtonTopMargin : parent . height - mainWindow . height + ( ScreenTools . defaultFontPixelHeight / 2 )
readonly property real _toolButtonTopMargin : ScreenTools . defaultFontPixelHeight * 0.5
readonly property var _defaultVehicleCoordinate : QtPositioning . coordinate ( 37.803784 , - 122.462276 )
readonly property bool _waypointsOnlyMode : QGroundControl . corePlugin . options . missionWaypointsOnly
property bool _airspaceEnabled : QGroundControl . airmapSupported ? ( QGroundControl . settingsManager . airMapSettings . enableAirMap . rawValue && QGroundControl . airspaceManager . connected ) : false
property var _planMasterController : masterController
property bool _airspaceEnabled : QGroundControl . airmapSupported ? ( QGroundControl . settingsManager . airMapSettings . enableAirMap . rawValue && QGroundControl . airspaceManager . connected ) : false
property var _missionController : _planMasterController . missionController
property var _geoFenceController : _planMasterController . geoFenceController
property var _rallyPointController : _planMasterController . rallyPointController
@ -68,11 +66,6 @@ Item {
@@ -68,11 +66,6 @@ Item {
readonly property int _layerRallyPoints : 3
readonly property string _armedVehicleUploadPrompt : qsTr ( "Vehicle is currently armed. Do you want to upload the mission to the vehicle?" )
Component.onCompleted: {
toolbar . planMasterController = Qt . binding ( function ( ) { return _planMasterController } )
toolbar . currentMissionItem = Qt . binding ( function ( ) { return _missionController . currentPlanViewItem } )
}
function addComplexItem ( complexItemName ) {
var coordinate = editorMap . center
coordinate . latitude = coordinate . latitude . toFixed ( _decimalPlaces )
@ -127,8 +120,7 @@ Item {
@@ -127,8 +120,7 @@ Item {
}
Connections {
target: _appSettings . defaultMissionItemAltitude
target: _appSettings ? _appSettings . defaultMissionItemAltitude : null
onRawValueChanged: {
if ( _visualItems . count > 1 ) {
mainWindow . showDialog ( applyNewAltitude , qsTr ( "Apply new alititude" ) , mainWindow . showDialogDefaultWidth , StandardButton . Yes | StandardButton . No )
@ -138,10 +130,8 @@ Item {
@@ -138,10 +130,8 @@ Item {
Component {
id: applyNewAltitude
QGCViewMessage {
message: qsTr ( "You have changed the default altitude for mission items. Would you like to apply that altitude to all the items in the current mission?" )
function accept ( ) {
hideDialog ( )
_missionController . applyDefaultMissionAltitude ( )
@ -151,25 +141,20 @@ Item {
@@ -151,25 +141,20 @@ Item {
Component {
id: activeMissionUploadDialogComponent
QGCViewDialog {
Column {
anchors.fill: parent
spacing: ScreenTools . defaultFontPixelHeight
QGCLabel {
width: parent . width
wrapMode: Text . WordWrap
text: qsTr ( "Your vehicle is currently flying a mission. In order to upload a new or modified mission the current mission will be paused." )
}
QGCLabel {
width: parent . width
wrapMode: Text . WordWrap
text: qsTr ( "After the mission is uploaded you can adjust the current waypoint and start the mission." )
}
QGCButton {
text: qsTr ( "Pause and Upload" )
onClicked: {
@ -197,11 +182,13 @@ Item {
@@ -197,11 +182,13 @@ Item {
}
PlanMasterController {
id: m asterController
id: _planM asterController
Component.onCompleted: {
start ( false /* flyView */ )
_missionController . setCurrentPlanViewIndex ( 0 , true )
mainWindow . planMasterControllerPlan = _planMasterController
mainWindow . currentPlanMissionItem = _planMasterController . missionController . currentPlanViewItem
}
function waitingOnDataMessage ( ) {
@ -224,7 +211,7 @@ Item {
@@ -224,7 +211,7 @@ Item {
fileDialog . title = qsTr ( "Select Plan File" )
fileDialog . planFiles = true
fileDialog . selectExisting = true
fileDialog . nameFilters = m asterController. loadNameFilters
fileDialog . nameFilters = _planM asterController. loadNameFilters
fileDialog . fileExtension = _appSettings . planFileExtension
fileDialog . fileExtension2 = _appSettings . missionFileExtension
fileDialog . openForLoad ( )
@ -238,7 +225,7 @@ Item {
@@ -238,7 +225,7 @@ Item {
fileDialog . title = qsTr ( "Save Plan" )
fileDialog . planFiles = true
fileDialog . selectExisting = false
fileDialog . nameFilters = m asterController. saveNameFilters
fileDialog . nameFilters = _planM asterController. saveNameFilters
fileDialog . fileExtension = _appSettings . planFileExtension
fileDialog . fileExtension2 = _appSettings . missionFileExtension
fileDialog . openForSave ( )
@ -275,9 +262,8 @@ Item {
@@ -275,9 +262,8 @@ Item {
Connections {
target: _missionController
onNewItemsFromVehicle: {
if ( _visualItems && _visualItems . count != 1 ) {
if ( _visualItems && _visualItems . count !== 1 ) {
mapFitFunctions . fitMapViewportToMissionItems ( )
}
_missionController . setCurrentPlanViewIndex ( 0 , true )
@ -312,23 +298,23 @@ Item {
@@ -312,23 +298,23 @@ Item {
QGCFileDialog {
id: fileDialog
folder: _appSettings . missionSavePath
folder: _appSettings ? _appSettings . missionSavePath : ""
property bool planFiles: true / / / < t r u e : w o r k i n g w i t h p l a n f i l e s , f a l s e : w o r k i n g w i t h k m l f i l e
onAcceptedForSave: {
if ( planFiles ) {
m asterController. saveToFile ( file )
_planM asterController. saveToFile ( file )
} else {
m asterController. saveToKml ( file )
_planM asterController. saveToKml ( file )
}
close ( )
}
onAcceptedForLoad: {
if ( planFiles ) {
m asterController. loadFromFile ( file )
m asterController. fitViewportToItems ( )
_planM asterController. loadFromFile ( file )
_planM asterController. fitViewportToItems ( )
_missionController . setCurrentPlanViewIndex ( 0 , true )
} else {
var retList = ShapeFileHelper . determineShapeType ( file )
@ -353,7 +339,6 @@ Item {
@@ -353,7 +339,6 @@ Item {
property string polygonSelectPatternFile
Component {
id: patternPolygonSelectDialog
QGCViewDialog {
function accept ( ) {
var complexItemName
@ -365,30 +350,25 @@ Item {
@@ -365,30 +350,25 @@ Item {
insertComplexMissionItemFromKMLOrSHP ( complexItemName , polygonSelectPatternFile , - 1 )
hideDialog ( )
}
ExclusiveGroup {
id: radioGroup
}
Column {
anchors.left: parent . left
anchors.right: parent . right
spacing: ScreenTools . defaultFontPixelHeight
QGCLabel {
anchors.left: parent . left
anchors.right: parent . right
wrapMode: Text . WordWrap
text: qsTr ( "Create which pattern type?" )
}
QGCRadioButton {
id: surveyRadio
text: qsTr ( "Survey" )
checked: true
exclusiveGroup: radioGroup
}
QGCRadioButton {
text: qsTr ( "Structure Scan" )
exclusiveGroup: radioGroup
@ -399,18 +379,15 @@ Item {
@@ -399,18 +379,15 @@ Item {
Component {
id: moveDialog
QGCViewDialog {
function accept ( ) {
var toIndex = toCombo . currentIndex
if ( toIndex === 0 ) {
toIndex = 1
}
_missionController . moveMissionItem ( _moveDialogMissionItemIndex , toIndex )
hideDialog ( )
}
Column {
anchors.left: parent . left
anchors.right: parent . right
@ -578,10 +555,10 @@ Item {
@@ -578,10 +555,10 @@ Item {
color: qgcPal . window
title: qsTr ( "Plan" )
z: QGroundControl . zOrderWidgets
showAlternateIcon: [ m asterController. dirty , false , false , false , false , false , false ]
rotateImage: [ m asterController. syncInProgress , false , false , false , false , false , false ]
animateImage: [ m asterController. dirty , false , false , false , false , false , false ]
buttonEnabled: [ ! m asterController. syncInProgress , true , true , true , true , true , true ]
showAlternateIcon: [ _planM asterController. dirty , false , false , false , false , false , false ]
rotateImage: [ _planM asterController. syncInProgress , false , false , false , false , false , false ]
animateImage: [ _planM asterController. dirty , false , false , false , false , false , false ]
buttonEnabled: [ ! _planM asterController. syncInProgress , true , true , true , true , true , true ]
buttonVisible: [ true , true , _waypointsOnlyMode , true , true , _showZoom , _showZoom ]
maxHeight: mapScale . y - toolStrip . y
@ -665,6 +642,7 @@ Item {
@@ -665,6 +642,7 @@ Item {
/ / R i g h t P a n e l C o n t r o l s
Item {
anchors.fill: rightPanel
anchors.topMargin: _toolButtonTopMargin
Column {
id: rightControls
spacing: ScreenTools . defaultFontPixelHeight * 0.5
@ -828,7 +806,7 @@ Item {
@@ -828,7 +806,7 @@ Item {
/ / - - L i s t E l e m e n t s
delegate: MissionItemEditor {
map: editorMap
masterController: _planMasterController
masterController: _planMasterController
missionItem: object
width: parent . width
readOnly: false
@ -908,7 +886,7 @@ Item {
@@ -908,7 +886,7 @@ Item {
message: qsTr ( "You have unsaved/unsent changes. Loading from the Vehicle will lose these changes. Are you sure you want to load from the Vehicle?" )
function accept ( ) {
hideDialog ( )
m asterController. loadFromVehicle ( )
_planM asterController. loadFromVehicle ( )
}
}
}
@ -920,7 +898,7 @@ Item {
@@ -920,7 +898,7 @@ Item {
message: qsTr ( "You have unsaved/unsent changes. Loading from a file will lose these changes. Are you sure you want to load from a file?" )
function accept ( ) {
hideDialog ( )
m asterController. loadFromSelectedFile ( )
_planM asterController. loadFromSelectedFile ( )
}
}
}
@ -932,9 +910,9 @@ Item {
@@ -932,9 +910,9 @@ Item {
( _planMasterController . offline ? "" : qsTr ( "This will also remove all items from the vehicle." ) )
function accept ( ) {
if ( _planMasterController . offline ) {
m asterController. removeAll ( )
_planM asterController. removeAll ( )
} else {
m asterController. removeAllFromVehicle ( )
_planM asterController. removeAllFromVehicle ( )
}
hideDialog ( )
}
@ -946,7 +924,7 @@ Item {
@@ -946,7 +924,7 @@ Item {
QGCViewMessage {
message: qsTr ( "Are you sure you want to remove all mission items and clear the mission from the vehicle?" )
function accept ( ) {
m asterController. removeAllFromVehicle ( )
_planM asterController. removeAllFromVehicle ( )
hideDialog ( )
}
}
@ -997,9 +975,9 @@ Item {
@@ -997,9 +975,9 @@ Item {
QGCButton {
text: qsTr ( "Load KML/SHP..." )
Layout.fillWidth: true
enabled: ! m asterController. syncInProgress
enabled: ! _planM asterController. syncInProgress
onClicked: {
m asterController. loadShapeFromSelectedFile ( )
_planM asterController. loadShapeFromSelectedFile ( )
dropPanel . hide ( )
}
}
@ -1018,7 +996,7 @@ Item {
@@ -1018,7 +996,7 @@ Item {
QGCLabel {
width: sendSaveGrid . width
wrapMode: Text . WordWrap
text: m asterController. dirty ?
text: _planM asterController. dirty ?
( activeVehicle ?
qsTr ( "You have unsaved changes. You should upload to your vehicle, or save to a file:" ) :
qsTr ( "You have unsaved changes." )
@ -1046,13 +1024,13 @@ Item {
@@ -1046,13 +1024,13 @@ Item {
QGCButton {
text: qsTr ( "Open..." )
Layout.fillWidth: true
enabled: ! m asterController. syncInProgress
enabled: ! _planM asterController. syncInProgress
onClicked: {
dropPanel . hide ( )
if ( m asterController. dirty ) {
if ( _planM asterController. dirty ) {
mainWindow . showDialog ( syncLoadFromFileOverwrite , columnHolder . _overwriteText , mainWindow . showDialogDefaultWidth , StandardButton . Yes | StandardButton . Cancel )
} else {
m asterController. loadFromSelectedFile ( )
_planM asterController. loadFromSelectedFile ( )
}
}
}
@ -1060,13 +1038,13 @@ Item {
@@ -1060,13 +1038,13 @@ Item {
QGCButton {
text: qsTr ( "Save" )
Layout.fillWidth: true
enabled: ! m asterController. syncInProgress && m asterController. currentPlanFile !== ""
enabled: ! _planM asterController. syncInProgress && _planM asterController. currentPlanFile !== ""
onClicked: {
dropPanel . hide ( )
if ( m asterController. currentPlanFile !== "" ) {
m asterController. saveToCurrent ( )
if ( _planM asterController. currentPlanFile !== "" ) {
_planM asterController. saveToCurrent ( )
} else {
m asterController. saveToSelectedFile ( )
_planM asterController. saveToSelectedFile ( )
}
}
}
@ -1074,17 +1052,17 @@ Item {
@@ -1074,17 +1052,17 @@ Item {
QGCButton {
text: qsTr ( "Save As..." )
Layout.fillWidth: true
enabled: ! m asterController. syncInProgress && _visualItems . count > 1
enabled: ! _planM asterController. syncInProgress && _visualItems . count > 1
onClicked: {
dropPanel . hide ( )
m asterController. saveToSelectedFile ( )
_planM asterController. saveToSelectedFile ( )
}
}
QGCButton {
text: qsTr ( "Save Mission Waypoints As KML..." )
Layout.columnSpan: 2
enabled: ! m asterController. syncInProgress && _visualItems . count > 1
enabled: ! _planM asterController. syncInProgress && _visualItems . count > 1
onClicked: {
/ / F i r s t p o i n t d o e s n o t c o u n t
if ( _visualItems . count < 2 ) {
@ -1092,7 +1070,7 @@ Item {
@@ -1092,7 +1070,7 @@ Item {
return
}
dropPanel . hide ( )
m asterController. saveKmlToSelectedFile ( )
_planM asterController. saveKmlToSelectedFile ( )
}
}
@ -1109,25 +1087,25 @@ Item {
@@ -1109,25 +1087,25 @@ Item {
QGCButton {
text: qsTr ( "Upload" )
Layout.fillWidth: true
enabled: ! m asterController. offline && ! m asterController. syncInProgress && _visualItems . count > 1
enabled: ! _planM asterController. offline && ! _planM asterController. syncInProgress && _visualItems . count > 1
visible: ! QGroundControl . corePlugin . options . disableVehicleConnection
onClicked: {
dropPanel . hide ( )
m asterController. upload ( )
_planM asterController. upload ( )
}
}
QGCButton {
text: qsTr ( "Download" )
Layout.fillWidth: true
enabled: ! m asterController. offline && ! m asterController. syncInProgress
enabled: ! _planM asterController. offline && ! _planM asterController. syncInProgress
visible: ! QGroundControl . corePlugin . options . disableVehicleConnection
onClicked: {
dropPanel . hide ( )
if ( m asterController. dirty ) {
if ( _planM asterController. dirty ) {
mainWindow . showDialog ( syncLoadFromVehicleOverwrite , columnHolder . _overwriteText , mainWindow . showDialogDefaultWidth , StandardButton . Yes | StandardButton . Cancel )
} else {
m asterController. loadFromVehicle ( )
_planM asterController. loadFromVehicle ( )
}
}
}
@ -1136,7 +1114,7 @@ Item {
@@ -1136,7 +1114,7 @@ Item {
text: qsTr ( "Clear Vehicle Mission" )
Layout.fillWidth: true
Layout.columnSpan: 2
enabled: ! m asterController. offline && ! m asterController. syncInProgress
enabled: ! _planM asterController. offline && ! _planM asterController. syncInProgress
visible: ! QGroundControl . corePlugin . options . disableVehicleConnection
onClicked: {
dropPanel . hide ( )
@ -1147,4 +1125,4 @@ Item {
@@ -1147,4 +1125,4 @@ Item {
}
}
}
} / / Q G C V I e w
}