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()
52 updateConnectAndScanButton()
56 function setKeyBindingsToDefault(){
57 console.log("Setting key bindings to default.")
58 SettingsStorage.setSetting("A", "a")
59 SettingsStorage.setSetting("B", "b")
60 SettingsStorage.setSetting("C", "c")
61 SettingsStorage.setSetting("D", "d")
63 SettingsStorage.setSetting("Up", "Up")
64 SettingsStorage.setSetting("Down", "Down")
65 SettingsStorage.setSetting("Left", "Left")
66 SettingsStorage.setSetting("Right", "Right")
69 function loadKeyBindings(){
70 console.log("Loading key bindings.")
71 btConn.keyBindingA = SettingsStorage.getSetting("A")
72 btConn.keyBindingB = SettingsStorage.getSetting("B")
73 btConn.keyBindingC = SettingsStorage.getSetting("C")
74 btConn.keyBindingD = SettingsStorage.getSetting("D")
76 btConn.keyBindingUp = SettingsStorage.getSetting("Up")
77 btConn.keyBindingDown = SettingsStorage.getSetting("Down")
78 btConn.keyBindingLeft = SettingsStorage.getSetting("Left")
79 btConn.keyBindingRight = SettingsStorage.getSetting("Right")
82 function updateConnectAndScanButton(){
83 if(!deviceInfo.currentBluetoothPowerState){
84 scanButton.enabled = false
85 connectButton.enabled = false
87 addressField.enabled = false
88 portField.enabled = false
90 infoText.text = "To get started please turn Bluetooth on."
94 scanButton.enabled = true
96 addressField.enabled = true
97 portField.enabled = true
99 connectButton.enabled = (addressField.text !== "No Zeemote found yet.")
100 infoText.text = (addressField.text !== "No Zeemote found yet.") ?
101 "To enable remote control please press \"Connect\" when ready." :
102 "Please scan for a Zeemote first."
110 target: cursorRectangle
111 x: moveArea.x + (moveArea.width * 0.5) + btConn.x - (cursorRectangle.width * 0.5)
112 y: moveArea.y + (moveArea.height * 0.5) + btConn.y - (cursorRectangle.height * 0.5)
116 color: btConn.a ? "red" : "blue"
120 color: btConn.b ? "red" : "blue"
124 color: btConn.c ? "red" : "blue"
128 color: btConn.d ? "red" : "blue"
134 target: cursorRectangle
135 x: moveArea.x + (moveArea.width * 0.5) - (cursorRectangle.width * 0.5)
136 y: moveArea.y + (moveArea.height * 0.5) - (cursorRectangle.height * 0.5)
170 target: connectButton
174 target: disconnectButton
179 text: "Connecting..."
197 target: connectButton
201 target: disconnectButton
206 text: "To enable remote control please press \"Connect\" when ready."
212 target: platformWindow
215 if(platformWindow.active){
225 anchors{top: parent.top; left: parent.left; right: parent.right}
226 height: header.height
232 source: "image://theme/color8-meegotouch-view-header-fixed"
238 font.family: "Nokia Pure Text Light"
240 anchors.left: parent.left
241 anchors.leftMargin: 20
242 anchors.verticalCenter: parent.verticalCenter
248 anchors{top: headerItem.bottom; bottom: parent.bottom; left: parent.left; right: parent.right}
249 contentHeight: contentColumn.height
254 anchors{top: parent.top; left: parent.left; right: parent.right; topMargin: 10}
260 anchors.horizontalCenter: parent.horizontalCenter
264 btDiscovery.discovery = true
270 anchors.horizontalCenter: parent.horizontalCenter
275 text: "No Zeemote found yet."
279 if(mainPage.initializing)
282 if(text === "No Zeemote found yet.")
285 updateConnectAndScanButton();
287 console.log("Storing address in DB: " + text)
288 SettingsStorage.setSetting("address", text)
295 validator: IntValidator{}
298 if(mainPage.initializing)
304 console.log("Storing port in DB: " + text)
305 SettingsStorage.setSetting("port", text)
314 horizontalAlignment: Text.AlignHCenter
315 wrapMode: Text.WordWrap
320 anchors.horizontalCenter: parent.horizontalCenter
326 mainPage.state = "connecting"
327 btConn.connect(addressField.text, parseInt(portField.text))
333 anchors.horizontalCenter: parent.horizontalCenter
344 anchors.horizontalCenter: parent.horizontalCenter
351 color: btConn.a ? "red" : "blue"
356 color: btConn.b ? "red" : "blue"
361 color: btConn.c ? "red" : "blue"
366 color: btConn.d ? "red" : "blue"
372 anchors.horizontalCenter: parent.horizontalCenter
373 height: moveArea.height
374 width: moveArea.width
390 x: moveArea.x + (moveArea.width * 0.5) + btConn.x - (cursorRectangle.width * 0.5)
391 y: moveArea.y + (moveArea.height * 0.5) + btConn.y - (cursorRectangle.height * 0.5)
400 monitorBluetoothStateChanges: true
402 onBluetoothStateChanged: {
403 updateConnectAndScanButton()
407 BluetoothDiscoveryModel{
411 minimalDiscovery: true
413 onDiscoveryChanged: {
415 infoText.text = "Scanning for a Zeemote..."
416 scanButton.enabled = false
417 connectButton.enabled = false
418 disconnectButton.enabled = false
419 addressField.enabled = false
420 portField.enabled = false
422 scanButton.enabled = true
423 disconnectButton.enabled = false
424 addressField.enabled = true
425 portField.enabled = true
427 if(addressField.text !== "No Zeemote found yet." && portField.text !== "na"){
428 infoText.text = "Zeemote found. To enable remote control please press \"Connect\" when ready."
429 connectButton.enabled = true
434 onNewServiceDiscovered: {
435 console.log("Service " + service.serviceName + " found on "
436 + service.deviceName + " at address " + service.deviceAddress
437 + " on port " + service.servicePort + ".")
438 if(service.serviceName === "Zeemote"){
439 addressField.text = service.deviceAddress
440 portField.text = service.servicePort
442 console.log("Found Zeemote. Stopped further discovery.")
452 property string keyBindingA
453 property string keyBindingB
454 property string keyBindingC
455 property string keyBindingD
457 property string keyBindingUp
458 property string keyBindingDown
459 property string keyBindingLeft
460 property string keyBindingRight
463 disconnectButton.enabled = true
464 infoText.text = "Connected. Have fun."
468 mainPage.state = "disconnected"
472 // console.log("Stick moved. x: " + x + " y: " + y)
475 // onButtonsChanged: {
476 // console.log("Buttons changed. A: " + a + " B: " + b + " C: " + c + " D: " + d)
480 // console.log("A changed to: " + val)
481 xtstAdapter.sendKey(keyBindingA, val);
484 // console.log("B changed to: " + val)
485 xtstAdapter.sendKey(keyBindingB, val);
488 // console.log("C changed to: " + val)
489 xtstAdapter.sendKey(keyBindingC, val);
492 // console.log("D changed to: " + val)
493 xtstAdapter.sendKey(keyBindingD, val);
496 onUpChanged: xtstAdapter.sendKey(keyBindingUp, val)
497 onDownChanged: xtstAdapter.sendKey(keyBindingDown, val)
498 onLeftChanged: xtstAdapter.sendKey(keyBindingLeft, val)
499 onRightChanged: xtstAdapter.sendKey(keyBindingRight, val)
502 // if(val > joystickThreshold){
503 // xtstAdapter.sendKey("Right", true);
504 // }else if(val < -joystickThreshold){
505 // xtstAdapter.sendKey("Left", true);
507 // xtstAdapter.sendKey("Right", false);
508 // xtstAdapter.sendKey("Left", false);
513 // if(val > joystickThreshold){
514 // xtstAdapter.sendKey("Down", true);
515 // }else if(val < -joystickThreshold){
516 // xtstAdapter.sendKey("Up", true);
518 // xtstAdapter.sendKey("Down", false);
519 // xtstAdapter.sendKey("Up", false);