diff options
Diffstat (limited to 'examples/wifi/wifi-qml/WifiScanner.qml')
-rw-r--r-- | examples/wifi/wifi-qml/WifiScanner.qml | 251 |
1 files changed, 251 insertions, 0 deletions
diff --git a/examples/wifi/wifi-qml/WifiScanner.qml b/examples/wifi/wifi-qml/WifiScanner.qml new file mode 100644 index 0000000..f5ebec2 --- /dev/null +++ b/examples/wifi/wifi-qml/WifiScanner.qml @@ -0,0 +1,251 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use the contact form at +** http://www.qt.io +** +** This file is part of Qt Enterprise Embedded. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** the contact form at http://www.qt.io +** +****************************************************************************/ +import QtQuick 2.3 +import QtQuick.Controls 1.2 +import B2Qt.Wifi 1.0 + +Item { + anchors.fill: parent + + Binding { + target: WifiManager + property: "scanning" + value: networkView.visible + } + + Button { + id: wifiOnOffButton + anchors.top: parent.top + anchors.topMargin: 20 + anchors.left: parent.left + anchors.right: parent.right + onClicked: { + if (WifiManager.backendState === WifiManager.Running) { + if (networkView.visible) + networkView.visible = false + WifiManager.stop() + } else if (WifiManager.backendState === WifiManager.NotRunning) { + WifiManager.start() + } + } + + Component.onCompleted: updateButtonText(WifiManager.backendState) + Connections { + target: WifiManager + onBackendStateChanged: wifiOnOffButton.updateButtonText(backendState) + } + + function updateButtonText(backendState) + { + if (backendState === WifiManager.Initializing) + wifiOnOffButton.text = "Initializing..." + if (backendState === WifiManager.Terminating) + wifiOnOffButton.text = "Terminating..." + if (backendState === WifiManager.NotRunning) + wifiOnOffButton.text = "Switch On" + if (backendState === WifiManager.Running) + wifiOnOffButton.text = "Switch Off" + } + } + + Button { + id: listNetworksButton + anchors.top: wifiOnOffButton.bottom + anchors.topMargin: 30 + anchors.left: parent.left + anchors.right: parent.right + visible: WifiManager.backendState === WifiManager.Running + text: networkView.visible ? "Hide wifi networks" + : "List available wifi networks" + onClicked: networkView.visible = !networkView.visible + } + //! [0] + ListView { + id: networkView + model: WifiManager.networks + delegate: listDelegate + implicitHeight: 800 + anchors.top: listNetworksButton.bottom + anchors.topMargin: 30 + anchors.left: parent.left + anchors.right: parent.right + visible: false + clip: true + + property string networkStateText: "" + property QtObject expandedNetworkBox: null + property bool hasExpandedNetworkBox: expandedNetworkBox !== null + + function setNetworkStateText(networkState) { + if (networkState === WifiManager.ObtainingIPAddress) + networkView.networkStateText = " (obtaining ip..)" + else if (networkState === WifiManager.DhcpRequestFailed) + networkView.networkStateText = " (dhcp request failed)" + else if (networkState === WifiManager.Connected) + networkView.networkStateText = " (connected)" + else if (networkState === WifiManager.Authenticating) + networkView.networkStateText = " (authenticating..)" + else if (networkState === WifiManager.HandshakeFailed) + networkView.networkStateText = " (wrong password)" + else if (networkState === WifiManager.Disconnected) + networkView.networkStateText = "" + } + + Connections { + target: WifiManager + onNetworkStateChanged: networkView.setNetworkStateText(networkState) + } + } + //! [0] + //! [2] + WifiConfiguration { id: config } + //! [2] + Component { + id: listDelegate + Rectangle { + id: networkBox + property bool expanded: false + property bool isCurrentNetwork: WifiManager.currentSSID === ssid + property bool connected: isCurrentNetwork && WifiManager.networkState === WifiManager.Connected + property int notExpandedHeight: ssidLabel.height + bssidLabel.height + 20 + property int expandedHeight: notExpandedHeight + passwordInput.height + connectionButton.height + 54 + property int connectedExpandedHeight: notExpandedHeight + connectionButton.height + 30 + height: expanded ? (connected ? connectedExpandedHeight : expandedHeight) : notExpandedHeight + width: parent.width + clip: true + color: "#5C5C5C" + border.color: "black" + border.width: 1 + + Component.onDestruction: if (expanded) networkView.expandedNetworkBox = null + onHeightChanged: if (expanded) networkView.positionViewAtIndex(index, ListView.Contain) + + Behavior on height { NumberAnimation { duration: 500; easing.type: Easing.InOutCubic } } + //! [1] + Text { + id: ssidLabel + anchors.top: parent.top + anchors.left: parent.left + anchors.margins: 5 + anchors.leftMargin: 10 + font.pixelSize: 26 + font.bold: true + color: "#E6E6E6" + text: isCurrentNetwork ? ssid + networkView.networkStateText : ssid + Component.onCompleted: networkView.setNetworkStateText(WifiManager.networkState) + } + + Text { + id: bssidLabel + anchors.top: ssidLabel.bottom + anchors.left: parent.left + anchors.margins: 5 + anchors.leftMargin: 30 + text: bssid + color: "#E6E6E6" + font.pixelSize: ssidLabel.font.pixelSize * 0.8 + } + + Text { + id: flagsLabel + anchors.top: bssidLabel.top + anchors.left: bssidLabel.right + anchors.leftMargin: 35 + text: (supportsWPA2 ? "WPA2 " : "") + + (supportsWPA ? "WPA " : "") + + (supportsWEP ? "WEP " : "") + + (supportsWPS ? "WPS " : ""); + color: "#E6E6E6" + font.pixelSize: ssidLabel.font.pixelSize * 0.8 + font.italic: true + } + + Rectangle { + id: signalStrengthBar + height: 15 + radius: 20 + antialiasing: true + anchors.margins: 10 + anchors.right: parent.right + anchors.top: parent.top + color: "#BF8888" + border.color: "#212126" + property int strengthBarWidth: Math.max(100 + signalStrength, 0) / 100 * parent.width + onStrengthBarWidthChanged: { + if (strengthBarWidth > parent.width * 0.55) + signalStrengthBar.width = parent.width * 0.55 + else + signalStrengthBar.width = strengthBarWidth + } + } + //! [1] + MouseArea { + anchors.fill: parent + onClicked: handleNetworkBoxExpanding() + } + + function handleNetworkBoxExpanding() + { + expanded = !expanded + if (expanded) { + if (networkView.hasExpandedNetworkBox) + networkView.expandedNetworkBox.expanded = false + networkView.expandedNetworkBox = networkBox + } else { + networkView.expandedNetworkBox = null + } + } + + TextField { + id: passwordInput + anchors.top: flagsLabel.bottom + anchors.topMargin: 15 + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width * 0.36 + height: connectionButton.height * 1.1 + placeholderText: "Enter Password" + visible: !connected + font.pixelSize: 16 + echoMode: TextInput.Password + inputMethodHints: Qt.ImhNoPredictiveText + } + + Button { + id: connectionButton + y: connected ? passwordInput.y + : passwordInput.y + passwordInput.height + 10 + width: passwordInput.width + anchors.horizontalCenter: parent.horizontalCenter + text: connected ? "Disconnect" : "Connect" + //! [3] + onClicked: { + if (connected) { + WifiManager.disconnect() + } else { + config.ssid = ssid; + config.passphrase = passwordInput.text + if (!WifiManager.connect(config)) + print("failed to connect: " + WifiManager.lastError) + } + } + //! [3] + } + } + } +} |