Skip to content
PairingIndicator.qml 25.2 KiB
Newer Older
Gus Grubba's avatar
Gus Grubba committed
/****************************************************************************
 *
 *   (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
Gus Grubba's avatar
Gus Grubba committed
import QtQuick.Dialogs          1.3
Gus Grubba's avatar
Gus Grubba committed

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
Gus Grubba's avatar
Gus Grubba committed

    property bool _light:               qgcPal.globalTheme === QGCPalette.Light && !activeVehicle
Gus Grubba's avatar
Gus Grubba committed
    property real _contentWidth:        ScreenTools.defaultFontPixelWidth  * 34
Gus Grubba's avatar
Gus Grubba committed
    property real _contentSpacing:      ScreenTools.defaultFontPixelHeight * 0.5
    property real _rectWidth:           _contentWidth
    property real _rectHeight:          _contentWidth * 0.75

    property string kPairingManager:    qsTr("Pairing Manager")

Gus Grubba's avatar
Gus Grubba committed
    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)
                }
            }
        }
    }

Gus Grubba's avatar
Gus Grubba committed
    Row {
        id:                     pairingRow
        spacing:                ScreenTools.defaultFontPixelWidth
        anchors.top:            parent.top
        anchors.bottom:         parent.bottom
        anchors.horizontalCenter: parent.horizontalCenter
Gus Grubba's avatar
Gus Grubba committed
        QGCColoredImage {
Gus Grubba's avatar
Gus Grubba committed
            id:                 pairingIcon
            height:             parent.height
            width:              height
Gus Grubba's avatar
Gus Grubba committed
            color:              qgcPal.text
Gus Grubba's avatar
Gus Grubba committed
            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: {
Gus Grubba's avatar
Gus Grubba committed
            runPairing()
Gus Grubba's avatar
Gus Grubba committed
        }
    }
    //-------------------------------------------------------------------------
    //-- 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
Gus Grubba's avatar
Gus Grubba committed
                spacing:            _contentSpacing
Gus Grubba's avatar
Gus Grubba committed
                anchors.centerIn:   parent
                Item { width: 1; height: 1; }
                QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
                    text:           kPairingManager
Gus Grubba's avatar
Gus Grubba committed
                    font.family:    ScreenTools.demiboldFontFamily
Gus Grubba's avatar
Gus Grubba committed
                    font.pointSize: ScreenTools.mediumFontPointSize
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
                }
Gus Grubba's avatar
Gus Grubba committed
                Rectangle {
                    width:          _contentWidth
                    height:         1
                    color:          qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
                }
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: 1; }
                QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
                    text:           qsTr("To connect to your vehicle, please click on the pairing button in order to put the vehicle in discovery mode")
Gus Grubba's avatar
Gus Grubba committed
                    width:          _contentWidth
                    wrapMode:       Text.WordWrap
                    horizontalAlignment: Text.AlignHCenter
                    anchors.horizontalCenter: parent.horizontalCenter
                }
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: ScreenTools.defaultFontPixelHeight  * 2; }
                QGCColoredImage {
                    height:             ScreenTools.defaultFontPixelHeight * 6
                    width:              height
Gus Grubba's avatar
Gus Grubba committed
                    sourceSize.height:  height
                    fillMode:           Image.PreserveAspectFit
                    mipmap:             true
                    smooth:             true
                    color:              qgcPal.text
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
                }
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: ScreenTools.defaultFontPixelHeight  * 2; }
Gus Grubba's avatar
Gus Grubba committed
                QGCButton {
Gus Grubba's avatar
Gus Grubba committed
                    text:           qsTr("Pair a Vehicle")
Gus Grubba's avatar
Gus Grubba committed
                    width:          _contentWidth
                    anchors.horizontalCenter: parent.horizontalCenter
                    onClicked: {
                        mhPopup.close()
Gus Grubba's avatar
Gus Grubba committed
                        progressPopup.open()
Gus Grubba's avatar
Gus Grubba committed
                        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
Gus Grubba's avatar
Gus Grubba committed
                spacing:            _contentSpacing
Gus Grubba's avatar
Gus Grubba committed
                anchors.centerIn:   parent
                Item { width: 1; height: 1; }
                QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
                    text:           kPairingManager
Gus Grubba's avatar
Gus Grubba committed
                    font.family:    ScreenTools.demiboldFontFamily
Gus Grubba's avatar
Gus Grubba committed
                    font.pointSize: ScreenTools.mediumFontPointSize
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
                }
Gus Grubba's avatar
Gus Grubba committed
                Rectangle {
                    width:          _contentWidth
                    height:         1
                    color:          qgcPal.globalTheme !== QGCPalette.Light ? Qt.rgba(1,1,1,0.25) : Qt.rgba(0,0,0,0.25)
                }
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: 1; }
                Rectangle {
Gus Grubba's avatar
Gus Grubba committed
                    width:          _rectWidth
                    height:         _rectHeight
Gus Grubba's avatar
Gus Grubba committed
                    color:          Qt.rgba(0,0,0,0)
                    border.color:   qgcPal.text
                    border.width:   1
                    anchors.horizontalCenter: parent.horizontalCenter
                    QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
                        text:       "Vehicle and Tablet  Graphic"
Gus Grubba's avatar
Gus Grubba committed
                        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()
Gus Grubba's avatar
Gus Grubba committed
                        progressPopup.open()
Gus Grubba's avatar
Gus Grubba committed
                        QGroundControl.pairingManager.startNFCScan();
                    }
                }
                Item { width: 1; height: 1; }
            }
        }
    }
    //-------------------------------------------------------------------------
Gus Grubba's avatar
Gus Grubba committed
    //-- Pairing/Connection Progress
Gus Grubba's avatar
Gus Grubba committed
    Popup {
Gus Grubba's avatar
Gus Grubba committed
        id:                     progressPopup
        width:                  progressBody.width
        height:                 progressBody.height
Gus Grubba's avatar
Gus Grubba committed
        modal:                  true
        focus:                  true
        parent:                 Overlay.overlay
        x:                      Math.round((mainWindow.width  - width)  * 0.5)
        y:                      Math.round((mainWindow.height - height) * 0.5)
Gus Grubba's avatar
Gus Grubba committed
        closePolicy:            cancelButton.visible ? Popup.NoAutoClose : (Popup.CloseOnEscape | Popup.CloseOnPressOutside)
Gus Grubba's avatar
Gus Grubba committed
        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 {
Gus Grubba's avatar
Gus Grubba committed
            id:                 progressBody
            width:              progressCol.width  + (ScreenTools.defaultFontPixelWidth   * 8)
            height:             progressCol.height + (ScreenTools.defaultFontPixelHeight  * 2)
Gus Grubba's avatar
Gus Grubba committed
            anchors.centerIn:   parent
            Column {
Gus Grubba's avatar
Gus Grubba committed
                id:                     progressCol
Gus Grubba's avatar
Gus Grubba committed
                spacing:                _contentSpacing
                anchors.centerIn:       parent
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: 1; }
                QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
                    text:               kPairingManager
                    font.family:        ScreenTools.demiboldFontFamily
Gus Grubba's avatar
Gus Grubba committed
                    font.pointSize:     ScreenTools.mediumFontPointSize
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
                }
Gus Grubba's avatar
Gus Grubba committed
                QGCLabel {
                    text:               QGroundControl.pairingManager ? QGroundControl.pairingManager.pairingStatusStr : ""
Gus Grubba's avatar
Gus Grubba committed
                    visible:            !connectedIndicator.visible
Gus Grubba's avatar
Gus Grubba committed
                    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)
                }
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: 1; }
Gus Grubba's avatar
Gus Grubba committed
                //-- Pairing/Connecting
                Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 3; visible: busyIndicator.visible; }
Gus Grubba's avatar
Gus Grubba committed
                QGCColoredImage {
                    id:                 busyIndicator
Gus Grubba's avatar
Gus Grubba committed
                    height:             ScreenTools.defaultFontPixelHeight * 4
Gus Grubba's avatar
Gus Grubba committed
                    width:              height
                    source:             "/qmlimages/MapSync.svg"
                    sourceSize.height:  height
                    fillMode:           Image.PreserveAspectFit
                    mipmap:             true
                    smooth:             true
                    color:              qgcPal.text
Gus Grubba's avatar
Gus Grubba committed
                    visible:            QGroundControl.pairingManager.pairingStatus === PairingManager.PairingActive || QGroundControl.pairingManager.pairingStatus === PairingManager.PairingConnecting
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
                    RotationAnimation on rotation {
                        loops:          Animation.Infinite
                        from:           360
                        to:             0
                        duration:       720
                        running:        busyIndicator.visible
                    }
                }
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: ScreenTools.defaultFontPixelHeight * 3; visible: busyIndicator.visible; }
                //-- Error State
                Image {
                    height:             ScreenTools.defaultFontPixelHeight * 4
                    width:              height
Gus Grubba's avatar
Gus Grubba committed
                    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's avatar
Gus Grubba committed
                    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; }
Gus Grubba's avatar
Gus Grubba committed
                QGCLabel {
                    text:               qsTr("List Of Available Devices")
                    visible:            QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairedDeviceNameList.length > 0 && !cancelButton.visible) : false
                    font.family:        ScreenTools.demiboldFontFamily
Gus Grubba's avatar
Gus Grubba committed
                }
                Item { width: 1; height: 1; }
                GridLayout {
                    columns:            3
                    visible:            QGroundControl.pairingManager ? (QGroundControl.pairingManager.pairedDeviceNameList.length > 0 && !cancelButton.visible) : false
                    columnSpacing:      ScreenTools.defaultFontPixelWidth
                    rowSpacing:         ScreenTools.defaultFontPixelHeight * 0.25
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
Gus Grubba's avatar
Gus Grubba committed
                    property var _pairModel: QGroundControl.pairingManager ? QGroundControl.pairingManager.pairedDeviceNameList : []
Gus Grubba's avatar
Gus Grubba committed
                    Repeater {
Gus Grubba's avatar
Gus Grubba committed
                        model:                  parent._pairModel
                        delegate: QGCLabel {
Gus Grubba's avatar
Gus Grubba committed
                            text:               modelData
Gus Grubba's avatar
Gus Grubba committed
                            Layout.row:         index
                            Layout.column:      0
                            Layout.minimumWidth:ScreenTools.defaultFontPixelWidth * 14
                            Layout.fillWidth:   true
Gus Grubba's avatar
Gus Grubba committed
                        }
                    }
                    Repeater {
Gus Grubba's avatar
Gus Grubba committed
                        model:                  parent._pairModel
                        delegate: QGCButton {
Gus Grubba's avatar
Gus Grubba committed
                            text:               qsTr("Connect")
                            Layout.row:         index
                            Layout.column:      1
                            onClicked: {
                                QGroundControl.pairingManager.connectToPairedDevice(modelData)
Gus Grubba's avatar
Gus Grubba committed
                                connectionPopup.close()
                                progressPopup.open()
Gus Grubba's avatar
Gus Grubba committed
                            }
Gus Grubba's avatar
Gus Grubba committed
                        }
                    }
                    Repeater {
Gus Grubba's avatar
Gus Grubba committed
                        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
Gus Grubba's avatar
Gus Grubba committed
                            MouseArea {
Gus Grubba's avatar
Gus Grubba committed
                                anchors.fill:       parent
Gus Grubba's avatar
Gus Grubba committed
                                onClicked: {
Gus Grubba's avatar
Gus Grubba committed
                                    removePrompt.open()
                                }
                            }
                            MessageDialog {
Gus Grubba's avatar
Gus Grubba committed
                                id:                 removePrompt
                                title:              qsTr("Remove Paired Vehicle")
                                text:               qsTr("Confirm removing %1?").arg(modelData)
                                standardButtons:    StandardButton.Yes | StandardButton.No
                                onNo:               removePrompt.close()
Gus Grubba's avatar
Gus Grubba committed
                                onYes: {
                                    QGroundControl.pairingManager.removePairedDevice(modelData)
                                    removePrompt.close()
Gus Grubba's avatar
Gus Grubba committed
                Item { width: 1; height: _contentSpacing; }
                QGCButton {
                    width:                  _contentWidth
Gus Grubba's avatar
Gus Grubba committed
                    text:                   qsTr("Close")
Gus Grubba's avatar
Gus Grubba committed
                    anchors.horizontalCenter: parent.horizontalCenter
                    onClicked: {
                        connectionPopup.close()
Gus Grubba's avatar
Gus Grubba committed
                    }
Gus Grubba's avatar
Gus Grubba committed
                }
                QGCButton {
                    text:                   qsTr("Pair Another")
                    width:                  _contentWidth
                    anchors.horizontalCenter: parent.horizontalCenter
Gus Grubba's avatar
Gus Grubba committed
                    onClicked: {
                        connectionPopup.close()
Gus Grubba's avatar
Gus Grubba committed
                        mhPopup.open()
Gus Grubba's avatar
Gus Grubba committed
                    }
                }
                Item { width: 1; height: 1; }
            }
        }
    }
}