2 * Copyright 2012 Ruediger Gad
4 * This file is part of QZeeControl.
6 * QZeeControl is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * QZeeControl is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with QZeeControl. If not, see <http://www.gnu.org/licenses/>.
21 import com.nokia.meego 1.0
22 import QtMobility.connectivity 1.2
23 import QtMobility.systeminfo 1.2
24 import "settingsstorage.js" as SettingsStorage
25 import qzeecontrol 1.0
31 orientationLock: PageOrientation.LockPortrait
33 property bool initializing: true
35 Component.onCompleted: {
36 SettingsStorage.initialize();
38 var address = SettingsStorage.getSetting("address");
39 var port = SettingsStorage.getSetting("port");
40 if(address !== "Unknown" && port !== "Unknown"){
41 console.log("Loaded address " + address + " and port " + port + " from DB.")
42 addressField.text = address
46 if(SettingsStorage.getSetting("A") === "Unknown"){
47 console.log("Initializing key bindings.")
48 setKeyBindingsToDefault()
55 function setKeyBindingsToDefault(){
56 console.log("Setting key bindings to default.")
57 SettingsStorage.setSetting("A", "a")
58 SettingsStorage.setSetting("B", "b")
59 SettingsStorage.setSetting("C", "c")
60 SettingsStorage.setSetting("D", "d")
62 SettingsStorage.setSetting("Up", "Up")
63 SettingsStorage.setSetting("Down", "Down")
64 SettingsStorage.setSetting("Left", "Left")
65 SettingsStorage.setSetting("Right", "Right")
68 function loadKeyBindings(){
69 console.log("Loading key bindings.")
70 btConn.keyBindingA = SettingsStorage.getSetting("A")
71 btConn.keyBindingB = SettingsStorage.getSetting("B")
72 btConn.keyBindingC = SettingsStorage.getSetting("C")
73 btConn.keyBindingD = SettingsStorage.getSetting("D")
75 btConn.keyBindingUp = SettingsStorage.getSetting("Up")
76 btConn.keyBindingDown = SettingsStorage.getSetting("Down")
77 btConn.keyBindingLeft = SettingsStorage.getSetting("Left")
78 btConn.keyBindingRight = SettingsStorage.getSetting("Right")
81 function updateConnectAndScanButton(){
82 if(!deviceInfo.currentBluetoothPowerState){
83 scanButton.enabled = false
84 connectButton.enabled = false
85 infoText.text = "To get started please turn Bluetooth on."
89 scanButton.enabled = true
90 connectButton.enabled = (addressField.text !== "No device found yet.")
91 infoText = (addressField.text !== "No device found yet.") ?
92 "To enable remote control please press \"Connect\" when ready." :
93 "Please scan for a Zeemote first."
101 target: cursorRectangle
102 x: moveArea.x + (moveArea.width * 0.5) + btConn.x - (cursorRectangle.width * 0.5)
103 y: moveArea.y + (moveArea.height * 0.5) + btConn.y - (cursorRectangle.height * 0.5)
107 color: btConn.a ? "red" : "blue"
111 color: btConn.b ? "red" : "blue"
115 color: btConn.c ? "red" : "blue"
119 color: btConn.d ? "red" : "blue"
125 target: cursorRectangle
126 x: moveArea.x + (moveArea.width * 0.5) - (cursorRectangle.width * 0.5)
127 y: moveArea.y + (moveArea.height * 0.5) - (cursorRectangle.height * 0.5)
161 target: connectButton
165 target: disconnectButton
170 text: "Connecting..."
188 target: connectButton
192 target: disconnectButton
197 text: "Press \"Connect\" to connect to the device."
203 target: platformWindow
206 if(platformWindow.active){
216 anchors{top: parent.top; left: parent.left; right: parent.right}
217 height: header.height
223 source: "image://theme/color8-meegotouch-view-header-fixed"
229 font.family: "Nokia Pure Text Light"
231 anchors.left: parent.left
232 anchors.leftMargin: 20
233 anchors.verticalCenter: parent.verticalCenter
239 anchors{top: headerItem.bottom; bottom: parent.bottom; left: parent.left; right: parent.right}
240 contentHeight: contentColumn.height
245 anchors{top: parent.top; left: parent.left; right: parent.right; topMargin: 10}
251 anchors.horizontalCenter: parent.horizontalCenter
255 btDiscovery.discovery = true
261 anchors.horizontalCenter: parent.horizontalCenter
266 text: "No device found yet."
269 if(mainPage.initializing)
272 if(text === "No device found yet.")
275 updateConnectAndScanButton();
277 console.log("Storing address in DB: " + text)
278 SettingsStorage.setSetting("address", text)
285 validator: IntValidator{}
288 if(mainPage.initializing)
294 console.log("Storing port in DB: " + text)
295 SettingsStorage.setSetting("port", text)
304 text: "Please scan for a device first."
305 horizontalAlignment: Text.AlignHCenter
306 wrapMode: Text.WordWrap
311 anchors.horizontalCenter: parent.horizontalCenter
317 mainPage.state = "connecting"
318 btConn.connect(addressField.text, parseInt(portField.text))
324 anchors.horizontalCenter: parent.horizontalCenter
335 anchors.horizontalCenter: parent.horizontalCenter
342 color: btConn.a ? "red" : "blue"
347 color: btConn.b ? "red" : "blue"
352 color: btConn.c ? "red" : "blue"
357 color: btConn.d ? "red" : "blue"
363 anchors.horizontalCenter: parent.horizontalCenter
364 height: moveArea.height
365 width: moveArea.width
381 x: moveArea.x + (moveArea.width * 0.5) + btConn.x - (cursorRectangle.width * 0.5)
382 y: moveArea.y + (moveArea.height * 0.5) + btConn.y - (cursorRectangle.height * 0.5)
391 monitorBluetoothStateChanges: true
393 onBluetoothStateChanged: {
394 updateConnectAndScanButton()
398 BluetoothDiscoveryModel{
402 minimalDiscovery: true
404 onDiscoveryChanged: {
406 infoText.text = "Scanning for a device..."
407 scanButton.enabled = false
408 connectButton.enabled = false
409 disconnectButton.enabled = false
410 addressField.enabled = false
411 portField.enabled = false
413 scanButton.enabled = true
414 disconnectButton.enabled = false
415 addressField.enabled = true
416 portField.enabled = true
418 if(addressField.text !== "No device found yet." && portField.text !== "na"){
419 infoText.text = "Device found. You can now connect."
420 connectButton.enabled = true
425 onNewServiceDiscovered: {
426 console.log("Service " + service.serviceName + " found on "
427 + service.deviceName + " at address " + service.deviceAddress
428 + " on port " + service.servicePort + ".")
429 if(service.serviceName === "Zeemote"){
430 addressField.text = service.deviceAddress
431 portField.text = service.servicePort
433 console.log("Found device. Stopped further discovery.")
443 property string keyBindingA
444 property string keyBindingB
445 property string keyBindingC
446 property string keyBindingD
448 property string keyBindingUp
449 property string keyBindingDown
450 property string keyBindingLeft
451 property string keyBindingRight
454 disconnectButton.enabled = true
455 infoText.text = "Connected. Have fun."
459 mainPage.state = "disconnected"
463 // console.log("Stick moved. x: " + x + " y: " + y)
466 // onButtonsChanged: {
467 // console.log("Buttons changed. A: " + a + " B: " + b + " C: " + c + " D: " + d)
471 // console.log("A changed to: " + val)
472 xtstAdapter.sendKey(keyBindingA, val);
475 // console.log("B changed to: " + val)
476 xtstAdapter.sendKey(keyBindingB, val);
479 // console.log("C changed to: " + val)
480 xtstAdapter.sendKey(keyBindingC, val);
483 // console.log("D changed to: " + val)
484 xtstAdapter.sendKey(keyBindingD, val);
487 onUpChanged: xtstAdapter.sendKey(keyBindingUp, val)
488 onDownChanged: xtstAdapter.sendKey(keyBindingDown, val)
489 onLeftChanged: xtstAdapter.sendKey(keyBindingLeft, val)
490 onRightChanged: xtstAdapter.sendKey(keyBindingRight, val)
493 // if(val > joystickThreshold){
494 // xtstAdapter.sendKey("Right", true);
495 // }else if(val < -joystickThreshold){
496 // xtstAdapter.sendKey("Left", true);
498 // xtstAdapter.sendKey("Right", false);
499 // xtstAdapter.sendKey("Left", false);
504 // if(val > joystickThreshold){
505 // xtstAdapter.sendKey("Down", true);
506 // }else if(val < -joystickThreshold){
507 // xtstAdapter.sendKey("Up", true);
509 // xtstAdapter.sendKey("Down", false);
510 // xtstAdapter.sendKey("Up", false);