aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/threading
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quick/threading')
-rw-r--r--examples/quick/threading/workerscript/Spinner.qml87
-rw-r--r--examples/quick/threading/workerscript/workerscript.js31
-rw-r--r--examples/quick/threading/workerscript/workerscript.qml56
3 files changed, 141 insertions, 33 deletions
diff --git a/examples/quick/threading/workerscript/Spinner.qml b/examples/quick/threading/workerscript/Spinner.qml
new file mode 100644
index 0000000000..32ab248529
--- /dev/null
+++ b/examples/quick/threading/workerscript/Spinner.qml
@@ -0,0 +1,87 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+
+Rectangle {
+ width: 64
+ height: 64
+ property alias value: list.currentIndex
+ property alias label: caption.text
+
+ Text {
+ id: caption
+ text: "Spinner"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Rectangle {
+ anchors.top: caption.bottom
+ anchors.topMargin: 4
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: 48
+ width: 32
+ color: "black"
+ ListView {
+ id: list
+ anchors.fill: parent
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: height/3
+ preferredHighlightEnd: height/3
+ clip: true
+ model: 64
+ delegate: Text {
+ font.pixelSize: 18;
+ color: "white";
+ text: index;
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ }
+ Rectangle {
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop { position: 0.0; color: "#FF000000" }
+ GradientStop { position: 0.2; color: "#00000000" }
+ GradientStop { position: 0.8; color: "#00000000" }
+ GradientStop { position: 1.0; color: "#FF000000" }
+ }
+ }
+ }
+}
diff --git a/examples/quick/threading/workerscript/workerscript.js b/examples/quick/threading/workerscript/workerscript.js
index f76471f920..ada3d82589 100644
--- a/examples/quick/threading/workerscript/workerscript.js
+++ b/examples/quick/threading/workerscript/workerscript.js
@@ -1,15 +1,24 @@
-var lastx = 0;
-var lasty = 0;
+//Will be initialized when WorkerScript{} is instantiated
+var cache = new Array(64);
+for (var i = 0; i < 64; i++)
+ cache[i] = new Array(64);
-WorkerScript.onMessage = function(message) {
- var ydiff = message.y - lasty;
- var xdiff = message.x - lastx;
-
- var total = Math.sqrt(ydiff * ydiff + xdiff * xdiff);
-
- lastx = message.x;
- lasty = message.y;
+function triangle(row, column) {
+ if (cache[row][column])
+ return cache[row][column]
+ if (column < 0 || column > row)
+ return -1;
+ if (column == 0 || column == row)
+ return 1;
+ return triangle(row-1, column-1) + triangle(row-1, column);
+}
- WorkerScript.sendMessage( {xmove: xdiff, ymove: ydiff, move: total} );
+WorkerScript.onMessage = function(message) {
+ //Calculate result (may take a while, using a naive algorithm)
+ var calculatedResult = triangle(message.row, message.column);
+ //Send result back to main thread
+ WorkerScript.sendMessage( { row: message.row,
+ column: message.column,
+ result: calculatedResult} );
}
diff --git a/examples/quick/threading/workerscript/workerscript.qml b/examples/quick/threading/workerscript/workerscript.qml
index 7fced8166c..640df0b483 100644
--- a/examples/quick/threading/workerscript/workerscript.qml
+++ b/examples/quick/threading/workerscript/workerscript.qml
@@ -41,43 +41,55 @@
import QtQuick 2.0
Rectangle {
- width: 480; height: 320
+ width: 320; height: 480
WorkerScript {
id: myWorker
source: "workerscript.js"
onMessage: {
- console.log("Moved " + messageObject.xmove + " along the X axis.");
- console.log("Moved " + messageObject.ymove + " along the Y axis.");
- console.log("Moved " + messageObject.move + " pixels.");
+ if (messageObject.row == rowSpinner.value && messageObject.column == columnSpinner.value){ //Not an old result
+ if (messageObject.result == -1)
+ resultText.text = "Column must be <= Row";
+ else
+ resultText.text = messageObject.result;
+ }
}
}
+ Row {
+ y: 24
+ spacing: 24
+ anchors.horizontalCenter: parent.horizontalCenter
+ Spinner {
+ id: rowSpinner
+ label: "Row"
+ onValueChanged: {
+ resultText.text = "Loading...";
+ myWorker.sendMessage( { row: rowSpinner.value, column: columnSpinner.value } );
+ }
+ }
- Rectangle {
- width: 200; height: 200
- anchors.left: parent.left; anchors.leftMargin: 20
- color: "red"
-
- MouseArea {
- anchors.fill: parent
- onClicked: myWorker.sendMessage( { rectangle: "red", x: mouse.x, y: mouse.y } );
+ Spinner {
+ id: columnSpinner
+ label: "Column"
+ onValueChanged: {
+ resultText.text = "Loading...";
+ myWorker.sendMessage( { row: rowSpinner.value, column: columnSpinner.value } );
+ }
}
}
- Rectangle {
- width: 200; height: 200
- anchors.right: parent.right; anchors.rightMargin: 20
- color: "blue"
-
- MouseArea {
- anchors.fill: parent
- onClicked: myWorker.sendMessage( { rectangle: "blue", x: mouse.x, y: mouse.y } );
- }
+ Text {
+ id: resultText
+ y: 180
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+ font.pixelSize: 32
}
Text {
- text: "Click a Rectangle!"
+ text: "Pascal's Triangle Calculator"
anchors { horizontalCenter: parent.horizontalCenter; bottom: parent.bottom; bottomMargin: 50 }
}
}