diff --git a/custom-example/res/MainToolbar/CustomMainToolBarIndicators.qml b/custom-example/res/MainToolbar/CustomMainToolBarIndicators.qml
index 8b95635..858bb85 100644
--- a/custom-example/res/MainToolbar/CustomMainToolBarIndicators.qml
+++ b/custom-example/res/MainToolbar/CustomMainToolBarIndicators.qml
@@ -23,6 +23,29 @@ import QGroundControl.Palette 1.0
Item {
anchors.fill: parent
readonly property real _indicatorMargins: ScreenTools.defaultFontPixelHeight * 0.75
+ Component.onCompleted: {
+ if(QGroundControl.pairingManager) {
+ if(!activeVehicle) {
+ pairingTimer.start()
+ }
+ }
+ }
+ //-------------------------------------------------------------------------
+ //-- Launch pairing manager if nothing connected
+ Timer {
+ id: pairingTimer
+ interval: 5000
+ running: false;
+ repeat: false;
+ onTriggered: {
+ if(!activeVehicle) {
+ if(QGroundControl.pairingManager.firstBoot && pairingLoader.item) {
+ QGroundControl.pairingManager.firstBoot = false
+ pairingLoader.item.runPairing()
+ }
+ }
+ }
+ }
//-------------------------------------------------------------------------
//-- Waiting for a vehicle
Row {
@@ -60,6 +83,7 @@ Item {
spacing: ScreenTools.defaultFontPixelWidth * 2
visible: !indicatorRow.visible
Loader {
+ id: pairingLoader
anchors.top: parent.top
anchors.bottom: parent.bottom
anchors.margins: _indicatorMargins
diff --git a/qgcimages.qrc b/qgcimages.qrc
index 031ea95..8d12d67 100644
--- a/qgcimages.qrc
+++ b/qgcimages.qrc
@@ -66,11 +66,11 @@
src/AutoPilotPlugins/PX4/Images/CameraTrigger.svg
resources/check.svg
src/QmlControls/checkbox-check.svg
+ src/FlightMap/Images/cOGPointer.svg
src/MissionManager/CogWheel.svg
+ src/FlightMap/Images/compassDottedLine.svg
src/FlightMap/Images/compassInstrumentArrow.svg
src/FlightMap/Images/compassInstrumentDial.svg
- src/FlightMap/Images/compassDottedLine.svg
- src/FlightMap/Images/cOGPointer.svg
src/ui/toolbar/Images/Connect.svg
src/FlightMap/Images/crossHair.svg
src/AutoPilotPlugins/PX4/Images/DatalinkLoss.svg
@@ -121,6 +121,10 @@
src/AutoPilotPlugins/PX4/Images/no-logging-light.svg
src/AutoPilotPlugins/PX4/Images/no-logging.svg
src/AutoPilotPlugins/PX4/Images/ObjectAvoidance.svg
+ src/PairingManager/Images/PairingButton.svg
+ src/PairingManager/Images/PairingConnected.svg
+ src/PairingManager/Images/PairingError.svg
+ src/PairingManager/Images/PairingIcon.svg
src/ui/toolbar/Images/PaperPlane.svg
src/FlightMap/Images/PiP.svg
src/FlightMap/Images/pipHide.svg
@@ -181,9 +185,5 @@
src/ui/toolbar/Images/Yield.svg
src/FlightMap/Images/ZoomMinus.svg
src/FlightMap/Images/ZoomPlus.svg
-
- src/PairingManager/Images/PairingIcon.svg
- src/PairingManager/Images/PairingIconLight.svg
-
diff --git a/src/PairingManager/Images/PairingButton.svg b/src/PairingManager/Images/PairingButton.svg
new file mode 100644
index 0000000..1166e20
--- /dev/null
+++ b/src/PairingManager/Images/PairingButton.svg
@@ -0,0 +1,23 @@
+
+
+
diff --git a/src/PairingManager/Images/PairingConnected.svg b/src/PairingManager/Images/PairingConnected.svg
new file mode 100644
index 0000000..02ac3be
--- /dev/null
+++ b/src/PairingManager/Images/PairingConnected.svg
@@ -0,0 +1,44 @@
+
+
+
diff --git a/src/PairingManager/Images/PairingError.svg b/src/PairingManager/Images/PairingError.svg
new file mode 100644
index 0000000..db18451
--- /dev/null
+++ b/src/PairingManager/Images/PairingError.svg
@@ -0,0 +1,11 @@
+
+
+
diff --git a/src/PairingManager/Images/PairingIcon.svg b/src/PairingManager/Images/PairingIcon.svg
index 23579e8..aff3e41 100644
--- a/src/PairingManager/Images/PairingIcon.svg
+++ b/src/PairingManager/Images/PairingIcon.svg
@@ -3,21 +3,29 @@
diff --git a/src/PairingManager/PairingManager.cc b/src/PairingManager/PairingManager.cc
index 84f8208..96c02a5 100644
--- a/src/PairingManager/PairingManager.cc
+++ b/src/PairingManager/PairingManager.cc
@@ -70,7 +70,9 @@ PairingManager::_pairingCompleted(QString name)
{
_writeJson(_jsonDoc, _pairingCacheFile(name));
_remotePairingMap["NM"] = name;
+ _lastPaired = name;
emit pairedListChanged();
+ emit pairedVehicleChanged();
_app->informationMessageBoxOnMainThread("", tr("Paired with %1").arg(name));
setPairingStatus(PairingSuccess, tr("Pairing Successfull"));
}
@@ -154,7 +156,7 @@ PairingManager::_uploadFinished(void)
} else {
if(++_pairRetryCount > 3) {
qCDebug(PairingManagerLog) << "Giving up";
- setPairingStatus(PairingError, tr("Too Many Errors"));
+ setPairingStatus(PairingError, tr("No Response From Vehicle"));
_uploadManager->deleteLater();
_uploadManager = nullptr;
} else {
@@ -191,6 +193,15 @@ PairingManager::connectToPairedDevice(QString name)
}
//-----------------------------------------------------------------------------
+void
+PairingManager::removePairedDevice(QString name)
+{
+ QFile file(_pairingCacheFile(name));
+ file.remove();
+ emit pairedListChanged();
+}
+
+//-----------------------------------------------------------------------------
QStringList
PairingManager::pairedDeviceNameList(void)
{
diff --git a/src/PairingManager/PairingManager.h b/src/PairingManager/PairingManager.h
index 71c79ae..ada48de 100644
--- a/src/PairingManager/PairingManager.h
+++ b/src/PairingManager/PairingManager.h
@@ -61,18 +61,23 @@ public:
Q_ENUM(PairingStatus)
- QStringList pairingLinkTypeStrings(void);
- QString pairingStatusStr(void) const;
- QStringList pairedDeviceNameList(void);
- PairingStatus pairingStatus() { return _status; }
- int nfcIndex(void) { return _nfcIndex; }
- int microhardIndex(void) { return _microhardIndex; }
- void setStatusMessage(PairingStatus status, QString statusStr) { emit setPairingStatus(status, statusStr); }
- void jsonReceived(QString json) { emit parsePairingJson(json); }
+ QStringList pairingLinkTypeStrings (void);
+ QString pairingStatusStr (void) const;
+ QStringList pairedDeviceNameList (void);
+ PairingStatus pairingStatus () { return _status; }
+ QString pairedVehicle () { return _lastPaired; }
+ int nfcIndex (void) { return _nfcIndex; }
+ int microhardIndex (void) { return _microhardIndex; }
+ bool firstBoot () { return _firstBoot; }
+ bool errorState () { return _status == PairingRejected || _status == PairingConnectionRejected || _status == PairingError; }
+ void setStatusMessage (PairingStatus status, QString statusStr) { emit setPairingStatus(status, statusStr); }
+ void jsonReceived (QString json) { emit parsePairingJson(json); }
+ void setFirstBoot (bool set) { _firstBoot = set; emit firstBootChanged(); }
#ifdef __android__
- static void setNativeMethods(void);
+ static void setNativeMethods (void);
#endif
- Q_INVOKABLE void connectToPairedDevice(QString name);
+ Q_INVOKABLE void connectToPairedDevice (QString name);
+ Q_INVOKABLE void removePairedDevice (QString name);
#if defined QGC_ENABLE_NFC || defined QGC_ENABLE_QTNFC
Q_INVOKABLE void startNFCScan();
@@ -86,8 +91,11 @@ public:
Q_PROPERTY(PairingStatus pairingStatus READ pairingStatus NOTIFY pairingStatusChanged)
Q_PROPERTY(QStringList pairedDeviceNameList READ pairedDeviceNameList NOTIFY pairedListChanged)
Q_PROPERTY(QStringList pairingLinkTypeStrings READ pairingLinkTypeStrings CONSTANT)
+ Q_PROPERTY(QString pairedVehicle READ pairedVehicle NOTIFY pairedVehicleChanged)
+ Q_PROPERTY(bool errorState READ errorState NOTIFY pairingStatusChanged)
Q_PROPERTY(int nfcIndex READ nfcIndex CONSTANT)
Q_PROPERTY(int microhardIndex READ microhardIndex CONSTANT)
+ Q_PROPERTY(bool firstBoot READ firstBoot WRITE setFirstBoot NOTIFY firstBootChanged)
signals:
void startUpload(QString pairURL, QJsonDocument);
@@ -98,6 +106,8 @@ signals:
void parsePairingJson(QString json);
void setPairingStatus(PairingStatus status, QString pairingStatus);
void pairedListChanged();
+ void pairedVehicleChanged();
+ void firstBootChanged();
private slots:
void _startUpload(QString pairURL, QJsonDocument);
@@ -109,6 +119,7 @@ private slots:
private:
QString _statusString;
QString _jsonFileName;
+ QString _lastPaired;
QVariantMap _remotePairingMap;
int _nfcIndex = -1;
int _microhardIndex = -1;
@@ -121,20 +132,21 @@ private:
QString _uploadURL{};
QString _uploadData{};
- void _parsePairingJsonFile();
- QJsonDocument _createZeroTierConnectJson(QString cert2);
- QJsonDocument _createMicrohardConnectJson(QString cert2);
- QJsonDocument _createZeroTierPairingJson(QString cert1);
- QJsonDocument _createMicrohardPairingJson(QString pwd, QString cert1);
- QString _assumeMicrohardPairingJson();
- void _writeJson(QJsonDocument &jsonDoc, QString fileName);
- QString _getLocalIPInNetwork(QString remoteIP, int num);
- void _uploadFinished(void);
- void _uploadError(QNetworkReply::NetworkError code);
- void _pairingCompleted(QString name);
- void _connectionCompleted(QString name);
- QDir _pairingCacheDir();
- QString _pairingCacheFile(QString uavName);
+ void _parsePairingJsonFile();
+ QJsonDocument _createZeroTierConnectJson(QString cert2);
+ QJsonDocument _createMicrohardConnectJson(QString cert2);
+ QJsonDocument _createZeroTierPairingJson(QString cert1);
+ QJsonDocument _createMicrohardPairingJson(QString pwd, QString cert1);
+ QString _assumeMicrohardPairingJson();
+ void _writeJson(QJsonDocument &jsonDoc, QString fileName);
+ QString _getLocalIPInNetwork(QString remoteIP, int num);
+ void _uploadFinished(void);
+ void _uploadError(QNetworkReply::NetworkError code);
+ void _pairingCompleted(QString name);
+ void _connectionCompleted(QString name);
+ QDir _pairingCacheDir();
+ QString _pairingCacheFile(QString uavName);
+ bool _firstBoot = true;
#if defined QGC_ENABLE_NFC || defined QGC_ENABLE_QTNFC
PairingNFC pairingNFC;
diff --git a/src/ui/preferences/GeneralSettings.qml b/src/ui/preferences/GeneralSettings.qml
index d0dc218..2809c20 100644
--- a/src/ui/preferences/GeneralSettings.qml
+++ b/src/ui/preferences/GeneralSettings.qml
@@ -484,14 +484,14 @@ Rectangle {
}
FactCheckBox {
text: qsTr("Show additional heading indicators on Compass")
- visible: _showAdditionalIndicatorsCompass.visible
+ visible: _showAdditionalIndicatorsCompass ? _showAdditionalIndicatorsCompass.visible : false
fact: _showAdditionalIndicatorsCompass
property Fact _showAdditionalIndicatorsCompass: QGroundControl.settingsManager.flyViewSettings.showAdditionalIndicatorsCompass
}
FactCheckBox {
text: qsTr("Lock Compass Nose-Up")
- visible: _lockNoseUpCompass.visible
+ visible: _lockNoseUpCompass ? _lockNoseUpCompass.visible : false
fact: _lockNoseUpCompass
property Fact _lockNoseUpCompass: QGroundControl.settingsManager.flyViewSettings.lockNoseUpCompass
diff --git a/src/ui/toolbar/PairingIndicator.qml b/src/ui/toolbar/PairingIndicator.qml
index 3d60bb0..90f6bca 100644
--- a/src/ui/toolbar/PairingIndicator.qml
+++ b/src/ui/toolbar/PairingIndicator.qml
@@ -10,6 +10,7 @@
import QtQuick 2.11
import QtQuick.Controls 2.4
import QtQuick.Layouts 1.11
+import QtQuick.Dialogs 1.3
import QGroundControl 1.0
import QGroundControl.Controls 1.0
@@ -26,24 +27,46 @@ Item {
anchors.bottom: parent.bottom
property bool _light: qgcPal.globalTheme === QGCPalette.Light && !activeVehicle
- property real _contentWidth: ScreenTools.defaultFontPixelWidth * 40
+ 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
- Image {
+ QGCColoredImage {
id: pairingIcon
height: parent.height
width: height
- source: _light ? "/qmlimages/PairingIconLight.svg" : "/qmlimages/PairingIcon.svg"
+ color: qgcPal.text
+ source: "/qmlimages/PairingIcon.svg"
sourceSize.width: width
fillMode: Image.PreserveAspectFit
smooth: true
@@ -62,89 +85,7 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: {
- if(QGroundControl.pairingManager.pairedDeviceNameList.length > 1) {
- connectionPopup.open()
- } else {
- if(QGroundControl.pairingManager.pairingLinkTypeStrings.length > 1)
- pairingPopup.open()
- else {
- mhPopup.open()
- }
- }
- }
- }
- //-------------------------------------------------------------------------
- //-- Pairing
- Popup {
- id: pairingPopup
- width: pairingBody.width
- height: pairingBody.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: pairingBody
- width: comboListCol.width + (ScreenTools.defaultFontPixelWidth * 8)
- height: comboListCol.height + (ScreenTools.defaultFontPixelHeight * 2)
- anchors.centerIn: parent
- Column {
- id: comboListCol
- spacing: _contentSpacing
- anchors.centerIn: parent
- Item { width: 1; height: 1; }
- QGCLabel {
- text: kPairingManager
- font.family: ScreenTools.demiboldFontFamily
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Item { width: 1; height: 1; }
- Rectangle {
- width: _rectWidth
- height: _rectHeight
- color: Qt.rgba(0,0,0,0)
- border.color: qgcPal.text
- border.width: 1
- anchors.horizontalCenter: parent.horizontalCenter
- QGCLabel {
- text: "Pair Graphic"
- anchors.centerIn: parent
- }
- }
- Item { width: 1; height: 1; }
- QGCLabel {
- text: qsTr("Please choose a pairing method in order to connect to a nearby device")
- width: _contentWidth
- wrapMode: Text.WordWrap
- horizontalAlignment: Text.AlignHCenter
- anchors.horizontalCenter: parent.horizontalCenter
- }
- Item { width: 1; height: 1; }
- Repeater {
- model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairingLinkTypeStrings : []
- delegate: QGCButton {
- text: modelData
- width: _contentWidth
- anchors.horizontalCenter: parent.horizontalCenter
- onClicked: {
- pairingPopup.close()
- if (index === QGroundControl.pairingManager.nfcIndex) {
- nfcPopup.open()
- } else if (index === QGroundControl.pairingManager.microhardIndex) {
- mhPopup.open()
- }
- }
- }
- }
- Item { width: 1; height: 1; }
- }
+ runPairing()
}
}
//-------------------------------------------------------------------------
@@ -177,37 +118,42 @@ Item {
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; }
QGCLabel {
- text: qsTr("To connect to your vehicle, please click 3 times on the button in order to put the vehicle in a discovery mode")
+ 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: 1; }
- Rectangle {
- width: _rectWidth
- height: _rectHeight
- color: Qt.rgba(0,0,0,0)
- border.color: qgcPal.text
- border.width: 1
+ Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 2; }
+ QGCColoredImage {
+ height: ScreenTools.defaultFontPixelHeight * 6
+ width: height
+ source: "/qmlimages/PairingButton.svg"
+ sourceSize.height: height
+ fillMode: Image.PreserveAspectFit
+ mipmap: true
+ smooth: true
+ color: qgcPal.text
anchors.horizontalCenter: parent.horizontalCenter
- QGCLabel {
- text: "Button Positioning Graphic"
- anchors.centerIn: parent
- }
}
- Item { width: 1; height: 1; }
+ Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 2; }
QGCButton {
- text: qsTr("Pair Via Microhard")
+ text: qsTr("Pair a Vehicle")
width: _contentWidth
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
mhPopup.close()
- connectionPopup.open()
+ progressPopup.open()
QGroundControl.pairingManager.startMicrohardPairing();
}
}
@@ -245,8 +191,14 @@ Item {
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; }
Rectangle {
width: _rectWidth
@@ -275,7 +227,7 @@ Item {
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
nfcPopup.close()
- connectionPopup.open()
+ progressPopup.open()
QGroundControl.pairingManager.startNFCScan();
}
}
@@ -284,11 +236,11 @@ Item {
}
}
//-------------------------------------------------------------------------
- //-- Connection Manager
+ //-- Pairing/Connection Progress
Popup {
- id: connectionPopup
- width: connectionBody.width
- height: connectionBody.height
+ id: progressPopup
+ width: progressBody.width
+ height: progressBody.height
modal: true
focus: true
parent: Overlay.overlay
@@ -301,22 +253,24 @@ Item {
radius: ScreenTools.defaultFontPixelWidth * 0.25
}
Item {
- id: connectionBody
- width: connectionCol.width + (ScreenTools.defaultFontPixelWidth * 8)
- height: connectionCol.height + (ScreenTools.defaultFontPixelHeight * 2)
+ id: progressBody
+ width: progressCol.width + (ScreenTools.defaultFontPixelWidth * 8)
+ height: progressCol.height + (ScreenTools.defaultFontPixelHeight * 2)
anchors.centerIn: parent
Column {
- id: connectionCol
+ id: progressCol
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
}
QGCLabel {
text: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairingStatusStr : ""
+ visible: !connectedIndicator.visible
anchors.horizontalCenter: parent.horizontalCenter
}
Rectangle {
@@ -325,9 +279,11 @@ Item {
color: qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
}
Item { width: 1; height: 1; }
+ //-- Pairing/Connecting
+ Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 3; visible: busyIndicator.visible; }
QGCColoredImage {
id: busyIndicator
- height: ScreenTools.defaultFontPixelHeight * 2
+ height: ScreenTools.defaultFontPixelHeight * 4
width: height
source: "/qmlimages/MapSync.svg"
sourceSize.height: height
@@ -335,7 +291,7 @@ Item {
mipmap: true
smooth: true
color: qgcPal.text
- visible: cancelButton.visible
+ visible: QGroundControl.pairingManager.pairingStatus === PairingManager.PairingActive || QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnecting
anchors.horizontalCenter: parent.horizontalCenter
RotationAnimation on rotation {
loops: Animation.Infinite
@@ -345,6 +301,132 @@ Item {
running: busyIndicator.visible
}
}
+ Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 3; visible: busyIndicator.visible; }
+ //-- Error State
+ Image {
+ height: ScreenTools.defaultFontPixelHeight * 4
+ width: height
+ source: "/qmlimages/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
+ source: "/qmlimages/PairingConnected.svg"
+ 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; }
QGCLabel {
text: qsTr("List Of Available Devices")
visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairedDeviceNameList.length > 0 && !cancelButton.visible) : false
@@ -358,9 +440,9 @@ Item {
rowSpacing: ScreenTools.defaultFontPixelHeight * 0.25
anchors.horizontalCenter: parent.horizontalCenter
Repeater {
- model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
+ model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
QGCLabel {
- text: modelData
+ text: modelData
Layout.row: index
Layout.column: 0
Layout.minimumWidth:ScreenTools.defaultFontPixelWidth * 14
@@ -368,18 +450,20 @@ Item {
}
}
Repeater {
- model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
+ model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
QGCButton {
text: qsTr("Connect")
Layout.row: index
Layout.column: 1
onClicked: {
QGroundControl.pairingManager.connectToPairedDevice(modelData)
+ connectionPopup.close()
+ progressPopup.open()
}
}
}
Repeater {
- model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
+ model: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
QGCColoredImage {
height: ScreenTools.defaultFontPixelHeight * 1.5
width: height
@@ -391,7 +475,18 @@ Item {
MouseArea {
anchors.fill: parent
onClicked: {
- //-- TODO:
+ removePrompt.open()
+ }
+ }
+ MessageDialog {
+ 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()
}
}
}
@@ -399,10 +494,8 @@ Item {
}
Item { width: 1; height: _contentSpacing; }
QGCButton {
- id: connectedButton
width: _contentWidth
- visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnected || QGroundControl.pairingManager.pairingStatus === PairingManager.PairingIdle) : false
- text: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnected ? qsTr("Done ") : qsTr("Close")) : ""
+ text: qsTr("Close")
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
connectionPopup.close()
@@ -411,39 +504,10 @@ Item {
QGCButton {
text: qsTr("Pair Another")
width: _contentWidth
- visible: connectedButton.visible
- anchors.horizontalCenter: parent.horizontalCenter
- onClicked: {
- connectionPopup.close()
- if(QGroundControl.pairingManager.pairingLinkTypeStrings.length > 1)
- pairingPopup.open()
- else {
- mhPopup.open()
- }
- }
- }
- QGCButton {
- id: cancelButton
- width: _contentWidth
- visible: QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairingStatus === PairingManager.PairingActive || QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnecting) : 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
- }
- connectionPopup.close()
- }
- }
- QGCButton {
- visible: !cancelButton.visible && !connectedButton.visible
- text: qsTr("Close")
- width: _contentWidth
anchors.horizontalCenter: parent.horizontalCenter
onClicked: {
connectionPopup.close()
+ mhPopup.open()
}
}
Item { width: 1; height: 1; }