From 5e3d81ecfe0a14be2e1028a15df80df16d301db2 Mon Sep 17 00:00:00 2001
From: Shawn Rutledge <shawn.rutledge@digia.com>
Date: Wed, 29 May 2013 15:22:32 +0200
Subject: [PATCH] Fix various bugs in calqlatr

It's still not a great example but at least it's somewhat usable now.
- added files to .pro so you see them all in Creator
- keypad is fixed size and the "tape" takes up the rest, so you can
  resize the window to be able to see long numbers
- you can flick the ListView (MouseArea not on top of the whole thing!)
- ListView scrolls to the bottom when you add numbers past the point
  that scrolling is necessary to see them
- Clear, sqrt and +/- keys are functional

Task-number: QTBUG-26556
Change-Id: I485e4123ad6c24ca64bad3efc3acfc14587268d8
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
---
 examples/quick/demos/calqlatr/calqlatr.pro    | 19 ++++++++++++++++++
 examples/quick/demos/calqlatr/calqlatr.qml    | 11 +++++++---
 .../quick/demos/calqlatr/content/Display.qml  | 20 +++++++++++++++++--
 .../demos/calqlatr/content/NumberPad.qml      |  2 +-
 .../demos/calqlatr/content/calculator.js      |  8 ++++----
 5 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/examples/quick/demos/calqlatr/calqlatr.pro b/examples/quick/demos/calqlatr/calqlatr.pro
index 1b002a5f27..91d52a293e 100644
--- a/examples/quick/demos/calqlatr/calqlatr.pro
+++ b/examples/quick/demos/calqlatr/calqlatr.pro
@@ -6,5 +6,24 @@ SOURCES += main.cpp
 RESOURCES += calqlatr.qrc \
     ../../shared/shared.qrc
 
+OTHER_FILES = calqlatr.qml \
+    content/Button.qml \
+    content/Display.qml \
+    content/NumberPad.qml \
+    content/StyleLabel.qml \
+    content/audio/touch.wav \
+    content/calculator.js \
+    content/images/icon-back.png \
+    content/images/icon-close.png \
+    content/images/icon-settings.png \
+    content/images/logo.png \
+    content/images/paper-edge-left.png \
+    content/images/paper-edge-right.png \
+    content/images/paper-grip.png \
+    content/images/settings-selected-a.png \
+    content/images/settings-selected-b.png \
+    content/images/touch-green.png \
+    content/images/touch-white.png
+
 target.path = $$[QT_INSTALL_EXAMPLES]/quick/demos/calqlatr
 INSTALLS += target
diff --git a/examples/quick/demos/calqlatr/calqlatr.qml b/examples/quick/demos/calqlatr/calqlatr.qml
index 16b2e19724..0a092c25da 100644
--- a/examples/quick/demos/calqlatr/calqlatr.qml
+++ b/examples/quick/demos/calqlatr/calqlatr.qml
@@ -57,7 +57,7 @@ Rectangle {
 
     Item {
         id: pad
-        width: window.width * 0.58
+        width: 180
         NumberPad { y: 10; anchors.horizontalCenter: parent.horizontalCenter }
     }
 
@@ -77,7 +77,7 @@ Rectangle {
     Display {
         id: display
         x: -16
-        width: window.width * 0.42
+        width: window.width - pad.width
         height: parent.height
 
         MouseArea {
@@ -85,7 +85,12 @@ Rectangle {
             property real oldP: 0
             property bool rewind: false
 
-            anchors.fill: parent
+            anchors {
+                bottom: parent.bottom
+                left: parent.left
+                right: parent.right
+            }
+            height: 50
             onPositionChanged: {
                 var reverse = startX > window.width / 2
                 var mx = mapToItem(window, mouse.x).x
diff --git a/examples/quick/demos/calqlatr/content/Display.qml b/examples/quick/demos/calqlatr/content/Display.qml
index 4a78a3ebcd..ec8edfea66 100644
--- a/examples/quick/demos/calqlatr/content/Display.qml
+++ b/examples/quick/demos/calqlatr/content/Display.qml
@@ -42,23 +42,38 @@ import QtQuick 2.0
 
 Item {
     id: display
+    property bool enteringDigits: false
 
     function displayOperator(operator)
     {
         listView.model.append({ "operator": operator, "operand": "" })
+        enteringDigits = true
     }
 
     function newLine(operator, operand)
     {
         listView.model.append({ "operator": operator, "operand": operand })
+        enteringDigits = false
+        listView.positionViewAtEnd()
     }
 
     function appendDigit(digit)
     {
-        if (!listView.model.count)
+        if (!enteringDigits)
             listView.model.append({ "operator": "", "operand": "" })
         var i = listView.model.count - 1;
         listView.model.get(i).operand = listView.model.get(i).operand + digit;
+        enteringDigits = true
+    }
+
+    function clear()
+    {
+        if (enteringDigits) {
+            var i = listView.model.count - 1
+            if (i >= 0)
+                listView.model.remove(i)
+            enteringDigits = false
+        }
     }
 
     Item {
@@ -87,6 +102,7 @@ Item {
         }
 
         Image {
+            id: grip
             source: "images/paper-grip.png"
             anchors.horizontalCenter: parent.horizontalCenter
             anchors.bottom: parent.bottom
@@ -97,7 +113,7 @@ Item {
             id: listView
             x: 16; y: 30
             width: display.width
-            height: display.height
+            height: display.height - 50 - y
             delegate: Item {
                 height: 20
                 width: parent.width
diff --git a/examples/quick/demos/calqlatr/content/NumberPad.qml b/examples/quick/demos/calqlatr/content/NumberPad.qml
index 3203e18431..c7f2680651 100644
--- a/examples/quick/demos/calqlatr/content/NumberPad.qml
+++ b/examples/quick/demos/calqlatr/content/NumberPad.qml
@@ -60,7 +60,7 @@ Grid {
     Button { text: "±"; color: "#6da43d"; operator: true }
     Button { text: "−"; color: "#6da43d"; operator: true }
     Button { text: "+"; color: "#6da43d"; operator: true }
-    Button { text: " "; color: "#6da43d"; operator: true }
+    Button { text: "√"; color: "#6da43d"; operator: true }
     Button { text: "÷"; color: "#6da43d"; operator: true }
     Button { text: "×"; color: "#6da43d"; operator: true }
     Button { text: "C"; color: "#6da43d"; operator: true }
diff --git a/examples/quick/demos/calqlatr/content/calculator.js b/examples/quick/demos/calqlatr/content/calculator.js
index d86fecbf39..da8e940b16 100644
--- a/examples/quick/demos/calqlatr/content/calculator.js
+++ b/examples/quick/demos/calqlatr/content/calculator.js
@@ -84,7 +84,7 @@ function operatorPressed(op)
     } else if (previousOperator == "×") {
         digits = Number(curVal) * Number(digits.valueOf())
     } else if (previousOperator == "÷") {
-        digits = Number(Number(curVal) / Number(digits.valueOf())).toString()
+        digits = Number(curVal) / Number(digits.valueOf())
     } else if (previousOperator == "=") {
     }
 
@@ -110,9 +110,9 @@ function operatorPressed(op)
         digits = (Math.abs(digits.valueOf())).toString()
     } else if (op == "Int") {
         digits = (Math.floor(digits.valueOf())).toString()
-    } else if (op == window.plusminus) {
+    } else if (op == "±") {
         digits = (digits.valueOf() * -1).toString()
-    } else if (op == window.squareRoot) {
+    } else if (op == "√") {
         digits = (Math.sqrt(digits.valueOf())).toString()
     } else if (op == "mc") {
         memory = 0;
@@ -130,7 +130,7 @@ function operatorPressed(op)
     } else if (op == "Off") {
         Qt.quit();
     } else if (op == "C") {
-        digits = "0"
+        display.clear()
     } else if (op == "AC") {
         curVal = 0
         memory = 0
-- 
GitLab