<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
-<!-- Written by Qt Creator 2.4.1, 2012-04-12T19:09:09. -->
+<!-- Written by Qt Creator 2.4.1, 2012-04-12T19:52:06. -->
<qtcreator>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
--- /dev/null
+/*
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 1.1
+import com.nokia.meego 1.0
+
+Dialog {
+ id: aboutDialog
+
+ content:Item {
+ anchors.fill: parent
+
+ Text {
+ id: homepage
+ text: "<a href=\"http://qzeecontrol.garage.maemo.org/\" style=\"text-decoration:none; color:#78bfff\">QZeeControl<br />Version 0.0.1</a>"
+ textFormat: Text.RichText;
+ onLinkActivated: { Qt.openUrlExternally(link); }
+ font.pixelSize: 25; horizontalAlignment: Text.AlignHCenter;
+ anchors.horizontalCenter: parent.horizontalCenter; anchors.bottom: description.top; anchors.bottomMargin: 8
+ }
+
+ Text {
+ id: description
+ text: "Control your N9 remotely."
+ font.pixelSize: 25; font.bold: true; anchors.horizontalCenter: parent.horizontalCenter; anchors.bottom: author.top; anchors.bottomMargin: 12; color: "white"
+ }
+
+ Text {
+ id: author;
+ text: "Author: <br />"
+ + "Ruediger Gad - <a href=\"mailto:r.c.g@gmx.de\" style=\"text-decoration:none; color:#78bfff\" >r.c.g@gmx.de</a><br />"
+ textFormat: Text.RichText;
+ onLinkActivated: { Qt.openUrlExternally(link); }
+ font.pixelSize: 20; anchors.centerIn: parent; color: "lightgray"; horizontalAlignment: Text.AlignHCenter
+ }
+
+ Text {
+ id: license
+ text: "QZeeControl is free software: you can redistribute it and/or modify "
+ + "it under the terms of the <a href=\"http://www.gnu.org/licenses\" style=\"text-decoration:none; color:#78bfff\" >GNU General Public License</a> as published by "
+ + "the Free Software Foundation, either version 3 of the License, or "
+ + "(at your option) any later version.";
+ textFormat: Text.RichText;
+ onLinkActivated: { Qt.openUrlExternally(link); }
+ font.pixelSize: 18;
+ anchors.horizontalCenter: parent.horizontalCenter;
+ anchors.top: author.bottom;
+ anchors.topMargin: 12;
+ width: parent.width;
+ color: "lightgray";
+ horizontalAlignment: Text.AlignHCenter;
+ wrapMode: Text.Wrap
+ }
+ }
+}
Page {
tools: commonTools
+ orientationLock: PageOrientation.LockPortrait
+
Component.onCompleted: {
SettingsStorage.initialize();
}
}
- Button{
- id: scanButton
- anchors{bottom: addressRow.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
- enabled: true
+ 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"
+ text: "Scan"
- onClicked: {
- btDiscovery.discovery = true
+ onClicked: {
+ btDiscovery.discovery = true
+ }
}
- }
- Row{
- id: addressRow
- spacing: 5
- anchors{bottom: infoText.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
+ Row{
+ id: addressRow
+ spacing: 5
+ anchors{bottom: infoText.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
- TextField{
- id: addressField
- text: "No device found yet."
+ TextField{
+ id: addressField
+ text: "No device found yet."
- onTextChanged: {
- if(text === "No device found yet.")
- return
+ 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)
+ 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)
+ 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
+ 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
- }
+ 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
+ Button{
+ id: connectButton
+ anchors{bottom: disconnectButton.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
+ enabled: false
- text: "Connect"
+ text: "Connect"
- onClicked: {
- enabled = false
- btConn.connect(addressField.text, parseInt(portField.text))
+ onClicked: {
+ enabled = false
+ btConn.connect(addressField.text, parseInt(portField.text))
+ }
}
- }
- Button{
- id: disconnectButton
- anchors{bottom: buttonRow.top; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
+ Button{
+ id: disconnectButton
+ anchors.centerIn: parent
- text: "Disconnect"
+ text: "Disconnect"
- onClicked: {
- btConn.disconnect()
+ onClicked: {
+ btConn.disconnect()
+ }
}
- }
- Row{
- id: buttonRow
- anchors.centerIn: parent
- spacing: 20
+ Row{
+ id: buttonRow
+ anchors{top: disconnectButton.bottom; bottomMargin: 10; horizontalCenter: parent.horizontalCenter}
- 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"
+ 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"
+ Rectangle{
+ id: moveArea
+ anchors{top: buttonRow.bottom; topMargin: 10; horizontalCenter: parent.horizontalCenter}
+ color: "gray"
- width: 256
- height: 256
- }
+ width: 256
+ height: 256
+ }
- Rectangle{
- id: cursorRectangle
- width: 10
- height: 10
- color: "red"
+ 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)
+ 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: myMenu
visualParent: pageStack
MenuLayout {
- MenuItem { text: "About" }
+ MenuItem {
+ text: "About"
+ onClicked: aboutDialog.open()
+ }
}
}
+
+ AboutDialog{
+ id: aboutDialog
+ }
}
--- /dev/null
+/*
+ * The following code is taken from:
+ * http://www.developer.nokia.com/Community/Wiki/How-to_create_a_persistent_settings_database_in_Qt_Quick_%28QML%29
+ * At the time of writing (2011-11-12) there were no copyright or licensing notes in place at the above web site.
+ * Hence, the following code is treated as public domain and has been simply copied and pasted here as is.
+ * Note: the application name and the name and size of the database had been changed to reflect Simplictionary.
+ * The version number is intended to describe the "storage format".
+ * Thanks to the original author (Slocan) for sharing this code.
+ */
+
+//storage.js
+// First, let's create a short helper function to get the database connection
+function getDatabase() {
+ return openDatabaseSync("QZeeControl", "1.0", "SettingsStorageDatabase", 4000);
+}
+
+// At the start of the application, we can initialize the tables we need if they haven't been created yet
+function initialize() {
+ var db = getDatabase();
+ db.transaction(
+ function(tx) {
+ // Create the settings table if it doesn't already exist
+ // If the table exists, this is skipped
+ tx.executeSql('CREATE TABLE IF NOT EXISTS settings(setting TEXT UNIQUE, value TEXT)');
+ });
+}
+
+// This function is used to write a setting into the database
+function setSetting(setting, value) {
+ // setting: string representing the setting name (eg: “username”)
+ // value: string representing the value of the setting (eg: “myUsername”)
+ var db = getDatabase();
+ var res = "";
+ db.transaction(function(tx) {
+ var rs = tx.executeSql('INSERT OR REPLACE INTO settings VALUES (?,?);', [setting,value]);
+ //console.log(rs.rowsAffected)
+ if (rs.rowsAffected > 0) {
+ res = "OK";
+ } else {
+ res = "Error";
+ }
+ }
+ );
+ // The function returns “OK” if it was successful, or “Error” if it wasn't
+ return res;
+}
+// This function is used to retrieve a setting from the database
+function getSetting(setting) {
+ var db = getDatabase();
+ var res="";
+ db.transaction(function(tx) {
+ var rs = tx.executeSql('SELECT value FROM settings WHERE setting=?;', [setting]);
+ if (rs.rows.length > 0) {
+ res = rs.rows.item(0).value;
+ } else {
+ res = "Unknown";
+ }
+ })
+ // The function returns “Unknown” if the setting was not found in the database
+ // For more advanced projects, this should probably be handled through error codes
+ return res
+}