Newer
Older
/****************************************************************************
*
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
*
* QGroundControl is licensed according to the terms in the file
* COPYING.md in the root of the source code directory.
*
****************************************************************************/
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
import QGroundControl 1.0
import QGroundControl.Controls 1.0
import QGroundControl.MultiVehicleManager 1.0
import QGroundControl.ScreenTools 1.0
import QGroundControl.Palette 1.0
//-------------------------------------------------------------------------
//-- GPS Indicator
Item {
id: _root
width: pairingRow.width * 1.1
anchors.top: parent.top
anchors.bottom: parent.bottom
property bool _light: qgcPal.globalTheme === QGCPalette.Light && !activeVehicle
property real _contentWidth: ScreenTools.defaultFontPixelWidth * 34
property real _contentSpacing: ScreenTools.defaultFontPixelHeight * 0.5
property real _rectWidth: _contentWidth
property real _rectHeight: _contentWidth * 0.75
property string kPairingManager: qsTr("Pairing Manager")
function runPairing() {
QGroundControl.pairingManager.firstBoot = false
if(QGroundControl.pairingManager.pairedDeviceNameList.length > 0) {
connectionPopup.open()
} else {
mhPopup.open()
}
}
Connections {
target: QGroundControl.pairingManager
//-- Connect automatically once paired
onPairingStatusChanged: {
if(QGroundControl.pairingManager.pairingStatus === PairingManager.PairingSuccess) {
if(QGroundControl.pairingManager.pairedVehicle !== "") {
QGroundControl.pairingManager.connectToPairedDevice(QGroundControl.pairingManager.pairedVehicle)
}
}
}
}
Row {
id: pairingRow
spacing: ScreenTools.defaultFontPixelWidth
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
Gus Grubba
committed
source: "/custom/img/PairingIcon.svg"
sourceSize.width: width
fillMode: Image.PreserveAspectFit
smooth: true
mipmap: true
antialiasing: true
anchors.verticalCenter: parent.verticalCenter
}
QGCLabel {
text: qsTr("Pair Vehicle")
width: !activeVehicle ? (ScreenTools.defaultFontPixelWidth * 12) : 0
visible: !activeVehicle
font.family: ScreenTools.demiboldFontFamily
anchors.verticalCenter: parent.verticalCenter
}
}
MouseArea {
anchors.fill: parent
onClicked: {
}
}
//-------------------------------------------------------------------------
//-- Microhard
Popup {
id: mhPopup
width: mhBody.width
height: mhBody.height
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.CloseOnEscape | Popup.CloseOnPressOutside
background: Rectangle {
anchors.fill: parent
color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(1,1,1,0.95) : Qt.rgba(0,0,0,0.75)
radius: ScreenTools.defaultFontPixelWidth * 0.25
}
Item {
id: mhBody
width: mhCol.width + (ScreenTools.defaultFontPixelWidth * 8)
height: mhCol.height + (ScreenTools.defaultFontPixelHeight * 2)
anchors.centerIn: parent
Column {
id: mhCol
anchors.centerIn: parent
Item { width: 1; height: 1; }
QGCLabel {
Rectangle {
width: _contentWidth
height: 1
color: qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
}
text: qsTr("To connect to your vehicle, please click on the pairing button in order to put the vehicle in discovery mode")
width: _contentWidth
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
anchors.horizontalCenter: parent.horizontalCenter
}
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 2; }
QGCColoredImage {
height: ScreenTools.defaultFontPixelHeight * 6
width: height
Gus Grubba
committed
source: "/custom/img/PairingButton.svg"
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
color: qgcPal.text
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 2; }
width: _contentWidth
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
mhPopup.close()
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
QGroundControl.pairingManager.startMicrohardPairing();
}
}
Item { width: 1; height: 1; }
}
}
}
//-------------------------------------------------------------------------
//-- NFC
Popup {
id: nfcPopup
width: nfcBody.width
height: nfcBody.height
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.CloseOnEscape | Popup.CloseOnPressOutside
background: Rectangle {
anchors.fill: parent
color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(1,1,1,0.95) : Qt.rgba(0,0,0,0.75)
radius: ScreenTools.defaultFontPixelWidth * 0.25
}
Item {
id: nfcBody
width: nfcCol.width + (ScreenTools.defaultFontPixelWidth * 8)
height: nfcCol.height + (ScreenTools.defaultFontPixelHeight * 2)
anchors.centerIn: parent
Column {
id: nfcCol
anchors.centerIn: parent
Item { width: 1; height: 1; }
QGCLabel {
Rectangle {
width: _contentWidth
height: 1
color: qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
}
color: Qt.rgba(0,0,0,0)
border.color: qgcPal.text
border.width: 1
anchors.horizontalCenter: parent.horizontalCenter
QGCLabel {
anchors.centerIn: parent
}
}
Item { width: 1; height: 1; }
QGCLabel {
text: qsTr("Please make sure your vehicle is close to your Ground Station device")
width: _contentWidth
wrapMode: Text.WordWrap
horizontalAlignment: Text.AlignHCenter
anchors.horizontalCenter: parent.horizontalCenter
}
Item { width: 1; height: 1; }
QGCButton {
text: qsTr("Pair Via NFC")
width: _contentWidth
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
nfcPopup.close()
QGroundControl.pairingManager.startNFCScan();
}
}
Item { width: 1; height: 1; }
}
}
}
//-------------------------------------------------------------------------
id: progressPopup
width: progressBody.width
height: progressBody.height
modal: true
focus: true
parent: Overlay.overlay
x: Math.round((mainWindow.width - width) * 0.5)
y: Math.round((mainWindow.height - height) * 0.5)
closePolicy: cancelButton.visible ? Popup.NoAutoClose : (Popup.CloseOnEscape | Popup.CloseOnPressOutside)
background: Rectangle {
anchors.fill: parent
color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(1,1,1,0.95) : Qt.rgba(0,0,0,0.75)
radius: ScreenTools.defaultFontPixelWidth * 0.25
}
Item {
id: progressBody
width: progressCol.width + (ScreenTools.defaultFontPixelWidth * 8)
height: progressCol.height + (ScreenTools.defaultFontPixelHeight * 2)
text: kPairingManager
font.family: ScreenTools.demiboldFontFamily
QGCLabel {
text: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairingStatusStr : ""
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
width: _contentWidth
height: 1
color: qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
}
//-- Pairing/Connecting
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 3; visible: busyIndicator.visible; }
width: height
source: "/qmlimages/MapSync.svg"
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
color: qgcPal.text
visible: QGroundControl.pairingManager.pairingStatus === PairingManager.PairingActive || QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnecting
anchors.horizontalCenter: parent.horizontalCenter
RotationAnimation on rotation {
loops: Animation.Infinite
from: 360
to: 0
duration: 720
running: busyIndicator.visible
}
}
Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 3; visible: busyIndicator.visible; }
//-- Error State
Image {
height: ScreenTools.defaultFontPixelHeight * 4
width: height
Gus Grubba
committed
source: "/custom/img/PairingError.svg"
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
visible: QGroundControl.pairingManager.errorState
anchors.horizontalCenter: parent.horizontalCenter
}
//-- Connection Successful
Image {
id: connectedIndicator
height: width * 0.2
width: _contentWidth
Gus Grubba
committed
source: "/custom/img/PairingConnected.svg"
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
sourceSize.height: height
fillMode: Image.PreserveAspectFit
mipmap: true
smooth: true
visible: QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnected
anchors.horizontalCenter: parent.horizontalCenter
}
Item { width: 1; height: _contentSpacing; visible: connectedIndicator.visible; }
QGCLabel {
text: QGroundControl.pairingManager.pairedVehicle
visible: connectedIndicator.visible
anchors.horizontalCenter: parent.horizontalCenter
}
QGCLabel {
text: qsTr("Connection Successful")
visible: connectedIndicator.visible
anchors.horizontalCenter: parent.horizontalCenter
}
Item { width: 1; height: _contentSpacing; }
//-- Buttons
QGCButton {
width: _contentWidth
visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnected) : false
text: qsTr("Done")
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
progressPopup.close()
}
}
QGCButton {
text: qsTr("Pair Another")
width: _contentWidth
visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnected) : false
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
progressPopup.close()
mhPopup.open()
}
}
QGCButton {
text: qsTr("Try Again")
width: _contentWidth
visible: QGroundControl.pairingManager ? QGroundControl.pairingManager.errorState : false
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
progressPopup.close()
runPairing()
}
}
QGCButton {
id: cancelButton
width: _contentWidth
visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairingStatus === PairingManager.PairingActive || QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnecting || QGroundControl.pairingManager.errorState) : false
text: qsTr("Cancel")
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
if(QGroundControl.pairingManager.pairingStatus === PairingManager.PairingActive)
QGroundControl.pairingManager.stopPairing()
else {
//-- TODO: Cancel connection to paired device
}
progressPopup.close()
}
}
Item { width: 1; height: 1; }
}
}
}
//-------------------------------------------------------------------------
//-- Connection Manager
Popup {
id: connectionPopup
width: connectionBody.width
height: connectionBody.height
modal: true
focus: true
parent: Overlay.overlay
x: Math.round((mainWindow.width - width) * 0.5)
y: Math.round((mainWindow.height - height) * 0.5)
closePolicy: cancelButton.visible ? Popup.NoAutoClose : (Popup.CloseOnEscape | Popup.CloseOnPressOutside)
background: Rectangle {
anchors.fill: parent
color: qgcPal.globalTheme === QGCPalette.Light ? Qt.rgba(1,1,1,0.95) : Qt.rgba(0,0,0,0.75)
radius: ScreenTools.defaultFontPixelWidth * 0.25
}
Item {
id: connectionBody
width: connectionCol.width + (ScreenTools.defaultFontPixelWidth * 8)
height: connectionCol.height + (ScreenTools.defaultFontPixelHeight * 2)
anchors.centerIn: parent
Column {
id: connectionCol
spacing: _contentSpacing
anchors.centerIn: parent
Item { width: 1; height: 1; }
QGCLabel {
text: kPairingManager
font.family: ScreenTools.demiboldFontFamily
font.pointSize: ScreenTools.mediumFontPointSize
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
width: _contentWidth
height: 1
color: qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
}
Item { width: 1; height: 1; }
text: qsTr("List Of Available Devices")
visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairedDeviceNameList.length > 0 && !cancelButton.visible) : false
font.family: ScreenTools.demiboldFontFamily
columns: 3
visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairedDeviceNameList.length > 0 && !cancelButton.visible) : false
columnSpacing: ScreenTools.defaultFontPixelWidth
rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
property var _pairModel: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
Layout.row: index
Layout.column: 0
Layout.minimumWidth:ScreenTools.defaultFontPixelWidth * 14
Layout.fillWidth: true
text: qsTr("Connect")
Layout.row: index
Layout.column: 1
onClicked: {
QGroundControl.pairingManager.connectToPairedDevice(modelData)
model: parent._pairModel
delegate: QGCColoredImage {
Layout.preferredWidth: ScreenTools.defaultFontPixelHeight * 1.5
Layout.preferredHeight: ScreenTools.defaultFontPixelHeight * 1.5
sourceSize.height: height
source: "/res/TrashDelete.svg"
color: qgcPal.colorRed
Layout.row: index
Layout.column: 2
id: removePrompt
title: qsTr("Remove Paired Vehicle")
text: qsTr("Confirm removing %1?").arg(modelData)
standardButtons: StandardButton.Yes | StandardButton.No
onNo: removePrompt.close()
onYes: {
QGroundControl.pairingManager.removePairedDevice(modelData)
removePrompt.close()
Item { width: 1; height: _contentSpacing; }
QGCButton {
width: _contentWidth
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
connectionPopup.close()
}
QGCButton {
text: qsTr("Pair Another")
width: _contentWidth
anchors.horizontalCenter: parent.horizontalCenter
}
}
Item { width: 1; height: 1; }
}
}
}
}