/* * Copyright 2012 Ruediger Gad * * This file is part of QZeeControl. * * QZeeControl is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * QZeeControl is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with QZeeControl. If not, see . */ import QtQuick 1.1 import com.nokia.meego 1.0 import QtMobility.connectivity 1.2 import "settingsstorage.js" as SettingsStorage import qzeecontrol 1.0 Page { tools: commonTools orientationLock: PageOrientation.LockPortrait Component.onCompleted: { SettingsStorage.initialize(); var address = SettingsStorage.getSetting("address"); var port = SettingsStorage.getSetting("port"); if(address !== "Unknown" && port !== "Unknown"){ console.log("Loaded address " + address + " and port " + port + " from DB.") addressField.text = address portField.text = port } } states: [ State { name: "active" PropertyChanges { target: cursorRectangle x: moveArea.x + (moveArea.width * 0.5) + btConn.x - (cursorRectangle.width * 0.5) y: moveArea.y + (moveArea.height * 0.5) + btConn.y - (cursorRectangle.height * 0.5) } PropertyChanges { target: labelA color: btConn.a ? "red" : "blue" } PropertyChanges { target: labelB color: btConn.b ? "red" : "blue" } PropertyChanges { target: labelC color: btConn.c ? "red" : "blue" } PropertyChanges { target: labelD color: btConn.d ? "red" : "blue" } }, State { name: "inactive" PropertyChanges { target: cursorRectangle x: moveArea.x + (moveArea.width * 0.5) - (cursorRectangle.width * 0.5) y: moveArea.y + (moveArea.height * 0.5) - (cursorRectangle.height * 0.5) } PropertyChanges { target: labelA color: "blue" } PropertyChanges { target: labelB color: "blue" } PropertyChanges { target: labelC color: "blue" } PropertyChanges { target: labelD color: "blue" } } ] Connections { target: platformWindow onActiveChanged: { if(platformWindow.active){ state = "active" }else{ state = "inactive" } } } Item { anchors.fill: parent Image { id: header height: 72 source: "image://theme/color8-meegotouch-view-header-fixed" anchors.left: parent.left anchors.top: parent.top anchors.right: parent.right Text { text: "QZeeControl" color: "white" font.family: "Nokia Pure Text Light" font.pixelSize: 32 anchors.left: parent.left anchors.leftMargin: 20 anchors.verticalCenter: parent.verticalCenter } } Button{ id: scanButton anchors{bottom: addressRow.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter} enabled: true text: "Scan" onClicked: { btDiscovery.discovery = true } } Row{ id: addressRow spacing: 5 anchors{bottom: infoText.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter} TextField{ id: addressField text: "No device found yet." onTextChanged: { if(text === "No device found yet.") return connectButton.enabled = true infoText.text = "Press \"Connect\" to connect to the device." console.log("Storing address in DB: " + text) SettingsStorage.setSetting("address", text) } } TextField{ id: portField text: "na" width: 60 validator: IntValidator{} onTextChanged: { if(text === "na") return console.log("Storing port in DB: " + text) SettingsStorage.setSetting("port", text) } } } Label { id: infoText anchors{bottom: connectButton.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter} width: parent.width text: "Please scan for a device first." horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap } Button{ id: connectButton anchors{bottom: disconnectButton.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter} enabled: false text: "Connect" onClicked: { enabled = false btConn.connect(addressField.text, parseInt(portField.text)) } } Button{ id: disconnectButton anchors.centerIn: parent text: "Disconnect" onClicked: { btConn.disconnect() } } Row{ id: buttonRow anchors{top: disconnectButton.bottom; bottomMargin: 10; horizontalCenter: parent.horizontalCenter} spacing: 20 Label{ id: labelA text: "A" color: btConn.a ? "red" : "blue" } Label{ id: labelB text: "B" color: btConn.b ? "red" : "blue" } Label{ id: labelC text: "C" color: btConn.c ? "red" : "blue" } Label{ id: labelD text: "D" color: btConn.d ? "red" : "blue" } } Rectangle{ id: moveArea anchors{top: buttonRow.bottom; topMargin: 10; horizontalCenter: parent.horizontalCenter} color: "gray" width: 256 height: 256 } Rectangle{ id: cursorRectangle width: 10 height: 10 color: "red" x: moveArea.x + (moveArea.width * 0.5) + btConn.x - (cursorRectangle.width * 0.5) y: moveArea.y + (moveArea.height * 0.5) + btConn.y - (cursorRectangle.height * 0.5) } } BluetoothDiscoveryModel{ id: btDiscovery discovery: false minimalDiscovery: true onDiscoveryChanged: { if(discovery){ infoText.text = "Scanning for a device..." scanButton.enabled = false connectButton.enabled = false disconnectButton.enabled = false }else{ scanButton.enabled = true disconnectButton.enabled = false if(addressField.text !== "No device found yet." && portField.text !== "na") connectButton.enabled = true } } onNewServiceDiscovered: { console.log("Service " + service.serviceName + " found on " + service.deviceName + " at address " + service.deviceAddress + " on port " + service.servicePort + ".") if(service.serviceName === "Zeemote"){ addressField.text = service.deviceAddress portField.text = service.servicePort } } } BtConnector{ id: btConn property int joystickThreshold: 50 onConnected: { disconnectButton.enabled = true infoText.text = "Connected. Have fun." } onDisconnected: { connectButton.enabled = true disconnectButton.enabled = false infoText.text = "Press \"Connect\" to connect to the device." } // onStickMoved: { // console.log("Stick moved. x: " + x + " y: " + y) // } // onButtonsChanged: { // console.log("Buttons changed. A: " + a + " B: " + b + " C: " + c + " D: " + d) // } onAChanged: { // console.log("A changed to: " + val) xtstAdapter.sendKey("a", val); } onBChanged: { // console.log("B changed to: " + val) xtstAdapter.sendKey("b", val); } onCChanged: { // console.log("C changed to: " + val) xtstAdapter.sendKey("c", val); } onDChanged: { // console.log("D changed to: " + val) xtstAdapter.sendKey("d", val); } onXChanged: { if(val > joystickThreshold){ xtstAdapter.sendKey("Right", true); }else if(val < -joystickThreshold){ xtstAdapter.sendKey("Left", true); }else{ xtstAdapter.sendKey("Right", false); xtstAdapter.sendKey("Left", false); } } onYChanged: { if(val > joystickThreshold){ xtstAdapter.sendKey("Down", true); }else if(val < -joystickThreshold){ xtstAdapter.sendKey("Up", true); }else{ xtstAdapter.sendKey("Down", false); xtstAdapter.sendKey("Up", false); } } } XtstAdapter{ id: xtstAdapter } }