import QtQuick 1.1
import com.nokia.meego 1.0
import QtMobility.connectivity 1.2
+import QtMobility.systeminfo 1.2
import "settingsstorage.js" as SettingsStorage
import qzeecontrol 1.0
Page {
+ id: mainPage
tools: commonTools
+ orientationLock: PageOrientation.LockPortrait
+
+ property bool initializing: true
+
Component.onCompleted: {
SettingsStorage.initialize();
addressField.text = address
portField.text = port
}
+
+ if(SettingsStorage.getSetting("A") === "Unknown"){
+ console.log("Initializing key bindings.")
+ setKeyBindingsToDefault()
+ }
+
+ loadKeyBindings()
+ updateConnectAndScanButton()
+ initializing = false
+ }
+
+ function setKeyBindingsToDefault(){
+ console.log("Setting key bindings to default.")
+ SettingsStorage.setSetting("A", "a")
+ SettingsStorage.setSetting("B", "b")
+ SettingsStorage.setSetting("C", "c")
+ SettingsStorage.setSetting("D", "d")
+
+ SettingsStorage.setSetting("Up", "Up")
+ SettingsStorage.setSetting("Down", "Down")
+ SettingsStorage.setSetting("Left", "Left")
+ SettingsStorage.setSetting("Right", "Right")
+ }
+
+ function loadKeyBindings(){
+ console.log("Loading key bindings.")
+ zeeRemoteControl.keyBindingA = SettingsStorage.getSetting("A")
+ zeeRemoteControl.keyBindingB = SettingsStorage.getSetting("B")
+ zeeRemoteControl.keyBindingC = SettingsStorage.getSetting("C")
+ zeeRemoteControl.keyBindingD = SettingsStorage.getSetting("D")
+
+ zeeRemoteControl.keyBindingUp = SettingsStorage.getSetting("Up")
+ zeeRemoteControl.keyBindingDown = SettingsStorage.getSetting("Down")
+ zeeRemoteControl.keyBindingLeft = SettingsStorage.getSetting("Left")
+ zeeRemoteControl.keyBindingRight = SettingsStorage.getSetting("Right")
+ }
+
+ function updateConnectAndScanButton(){
+ if(!deviceInfo.currentBluetoothPowerState){
+ scanButton.enabled = false
+ connectButton.enabled = false
+
+ addressField.enabled = false
+ portField.enabled = false
+
+ infoText.text = "To get started please turn Bluetooth on."
+ return
+ }
+
+ scanButton.enabled = true
+
+ addressField.enabled = true
+ portField.enabled = true
+
+ connectButton.enabled = (addressField.text !== "No Zeemote found yet.")
+ infoText.text = (addressField.text !== "No Zeemote found yet.") ?
+ "To enable remote control please press \"Connect\" when ready." :
+ "Please scan for a Zeemote first."
}
states: [
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)
+ x: moveArea.x + (moveArea.width * 0.5) + zeeRemoteControl.x - (cursorRectangle.width * 0.5)
+ y: moveArea.y + (moveArea.height * 0.5) + zeeRemoteControl.y - (cursorRectangle.height * 0.5)
}
PropertyChanges {
target: labelA
- color: btConn.a ? "red" : "blue"
+ color: zeeRemoteControl.a ? "red" : "blue"
}
PropertyChanges {
target: labelB
- color: btConn.b ? "red" : "blue"
+ color: zeeRemoteControl.b ? "red" : "blue"
}
PropertyChanges {
target: labelC
- color: btConn.c ? "red" : "blue"
+ color: zeeRemoteControl.c ? "red" : "blue"
}
PropertyChanges {
target: labelD
- color: btConn.d ? "red" : "blue"
+ color: zeeRemoteControl.d ? "red" : "blue"
}
},
State {
color: "blue"
}
}
-
]
Connections {
}
}
- Button{
- id: scanButton
- anchors{bottom: addressRow.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
- enabled: true
-
- text: "Scan"
-
- onClicked: {
- btDiscovery.discovery = true
+ Item {
+ id: headerItem
+ anchors{top: parent.top; left: parent.left; right: parent.right}
+ height: header.height
+ z: 1
+
+ Image {
+ id: header
+ height: 72
+ source: "image://theme/color8-meegotouch-view-header-fixed"
+ anchors.fill: parent
+
+ 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
+ }
}
}
- Row{
- id: addressRow
- spacing: 5
- anchors{bottom: infoText.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
+ Flickable {
+ anchors{top: headerItem.bottom; bottom: parent.bottom; left: parent.left; right: parent.right}
+ contentHeight: contentColumn.height
- TextField{
- id: addressField
- text: "No device found yet."
+ Column{
+ id: contentColumn
+ spacing: 10
+ anchors{top: parent.top; left: parent.left; right: parent.right; topMargin: 10}
- onTextChanged: {
- if(text === "No device found yet.")
- return
+ Button{
+ id: scanButton
+ enabled: false
- connectButton.enabled = true
- infoText.text = "Press \"Connect\" to connect to the device."
- console.log("Storing address in DB: " + text)
- SettingsStorage.setSetting("address", text)
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: "Scan"
+
+ onClicked: {
+ btDiscovery.discovery = true
+ }
}
- }
- 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)
+
+ Row{
+ id: addressRow
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: 5
+
+ TextField{
+ id: addressField
+ text: "No Zeemote found yet."
+ width: 280
+
+ onTextChanged: {
+ if(mainPage.initializing)
+ return
+
+ if(text === "No Zeemote found yet.")
+ return
+
+ updateConnectAndScanButton();
+
+ console.log("Storing address in DB: " + text)
+ SettingsStorage.setSetting("address", text)
+ }
+ }
+ TextField{
+ id: portField
+ text: "na"
+ width: 60
+ validator: IntValidator{}
+
+ onTextChanged: {
+ if(mainPage.initializing)
+ return
+
+ 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
+ Label {
+ id: infoText
+ width: parent.width
- text: "Please scan for a device first."
- horizontalAlignment: Text.AlignHCenter
- wrapMode: Text.WordWrap
- }
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ }
- Button{
- id: connectButton
- anchors{bottom: disconnectButton.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
- enabled: false
+ Button{
+ id: connectButton
+ anchors.horizontalCenter: parent.horizontalCenter
+ enabled: false
- text: "Connect"
+ text: "Connect"
- onClicked: {
- enabled = false
- btConn.connect(addressField.text, parseInt(portField.text))
- }
- }
+ onClicked: {
+ scanButton.enabled = false
+ addressField.enabled = false
+ portField.enabled = false
+ connectButton.enabled = false
+ disconnectButton.enabled = false
+ infoText.text = "Connecting..."
- Button{
- id: disconnectButton
- anchors{bottom: buttonRow.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
+ zeeRemoteControl.connect(addressField.text, parseInt(portField.text))
+ }
+ }
- text: "Disconnect"
+ Button{
+ id: disconnectButton
+ anchors.horizontalCenter: parent.horizontalCenter
- onClicked: {
- btConn.disconnect()
+ text: "Disconnect"
- }
- }
+ onClicked: {
+ zeeRemoteControl.disconnect()
+ }
+ }
- Row{
- id: buttonRow
- anchors.centerIn: parent
- spacing: 20
+ Row{
+ id: buttonRow
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ spacing: 20
+
+ Label{
+ id: labelA
+ text: "A"
+ color: zeeRemoteControl.a ? "red" : "blue"
+ }
+ Label{
+ id: labelB
+ text: "B"
+ color: zeeRemoteControl.b ? "red" : "blue"
+ }
+ Label{
+ id: labelC
+ text: "C"
+ color: zeeRemoteControl.c ? "red" : "blue"
+ }
+ Label{
+ id: labelD
+ text: "D"
+ color: zeeRemoteControl.d ? "red" : "blue"
+ }
+ }
- 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"
+ Item{
+ id: testArea
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: moveArea.height
+ width: moveArea.width
+
+ Rectangle{
+ id: moveArea
+ color: "gray"
+
+ width: 256
+ height: 256
+ }
+
+ Rectangle{
+ id: cursorRectangle
+ width: 10
+ height: 10
+ color: "red"
+
+ x: moveArea.x + (moveArea.width * 0.5) + zeeRemoteControl.x - (cursorRectangle.width * 0.5)
+ y: moveArea.y + (moveArea.height * 0.5) + zeeRemoteControl.y - (cursorRectangle.height * 0.5)
+ }
+ }
}
}
- Rectangle{
- id: moveArea
- anchors{top: buttonRow.bottom; topMargin: 10; horizontalCenter: parent.horizontalCenter}
- color: "gray"
-
- width: 256
- height: 256
- }
+ DeviceInfo{
+ id: deviceInfo
- Rectangle{
- id: cursorRectangle
- width: 10
- height: 10
- color: "red"
+ monitorBluetoothStateChanges: true
- 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)
+ onBluetoothStateChanged: {
+ updateConnectAndScanButton()
+ }
}
BluetoothDiscoveryModel{
minimalDiscovery: true
onDiscoveryChanged: {
+ if(initializing)
+ return
+
if(discovery){
- infoText.text = "Scanning for devices..."
+ infoText.text = "Scanning for a Zeemote..."
scanButton.enabled = false
connectButton.enabled = false
disconnectButton.enabled = false
+ addressField.enabled = false
+ portField.enabled = false
}else{
scanButton.enabled = true
disconnectButton.enabled = false
+ addressField.enabled = true
+ portField.enabled = true
+
+ if(addressField.text !== "No Zeemote found yet." && portField.text !== "na"){
+ infoText.text = "Zeemote found. To enable remote control please press \"Connect\" when ready."
+ connectButton.enabled = true
+ }
}
}
if(service.serviceName === "Zeemote"){
addressField.text = service.deviceAddress
portField.text = service.servicePort
+ discovery = false
+ console.log("Found Zeemote. Stopped further discovery.")
}
}
}
- BtConnector{
- id: btConn
+ ZeeRemoteControl{
+ id: zeeRemoteControl
- property int joystickThreshold: 50
+ threshold: 50
onConnected: {
disconnectButton.enabled = true
infoText.text = "Connected. Have fun."
}
-
onDisconnected: {
+ scanButton.enabled = true
+ addressField.enabled = true
+ portField.enabled = true
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);
- }
+ infoText.text = "To enable remote control please press \"Connect\" when ready."
}
}