org.symbian.tools.wrttools.previewer/preview/script/accelerometer.js
changeset 407 c7c8bde493b1
parent 403 ba20dd5983c7
child 410 084ae6de03b5
--- a/org.symbian.tools.wrttools.previewer/preview/script/accelerometer.js	Wed Jun 30 14:04:26 2010 -0700
+++ b/org.symbian.tools.wrttools.previewer/preview/script/accelerometer.js	Wed Jun 30 16:50:22 2010 -0700
@@ -3,47 +3,88 @@
 }
 
 function RotationControls(accelCallback) {
-	this.angleX = 180;
-	this.angleY = 180;
-	this.angleZ = 180;
+	this.angleX = 0;
+	this.angleY = 0;
+	this.angleZ = 0;
 	var control = this;
 	this.accelerationCallback = accelCallback;
 
-	$("#sliderX").slider( {
-		slide : updateAngleX,
-		animate : true,
-		max : 360,
-		min : 0,
-		value : this.angleX
-	});
-	$("#sliderY").slider( {
-		slide : updateAngleY,
-		animate : true,
-		max : 360,
-		min : 0,
-		value : this.angleY
-	});
-	$("#sliderZ").slider( {
-		slide : updateAngleZ,
-		animate : true,
-		max : 360,
-		min : 0,
-		value : this.angleZ
-	});
-	this.paint();
+	setupListeners("xaxis", "xleft", "xright", updateAngleX, this.angleX);
+	setupListeners("yaxis", "yleft", "yright", updateAngleY, this.angleY);
+	setupListeners("zaxis", "zleft", "zright", updateAngleZ, this.angleZ);
+
+	window.setTimeout(function() {
+		this.paint();
+	}, 50);
+
+	function setupListeners(inputId, leftArrow, rightArrow, fn, initial) {
+		var input = $("#" + inputId);
+		input.numeric();
+		input.val(initial);
+		input.change(function() {
+			adjust(input, fn, 0);
+		});
+		handleButton(leftArrow, input, fn, -1);
+		handleButton(rightArrow, input, fn, 1);
+	}
 
-	function updateAngleX(event, ui) {
-		control.angleX = ui.value;
+	function handleButton(buttonId, input, fn, increment) {
+		var id = false;
+		var timeout = false;
+		var stop = function() {
+			if (timeout) {
+				window.clearTimeout(timeout);
+				timeout = false;
+				adjust(input, fn, increment);
+			}
+			if (id) {
+				window.clearInterval(id);
+				id = false;
+			}
+		};
+
+		$("#" + buttonId).mousedown(function() {
+			timeout = window.setTimeout(function() {
+				id = window.setInterval(function() {
+					timeout = false;
+					adjust(input, fn, increment);
+				}, 10);
+			}, 250);
+		}).mouseup(stop).focusout(stop).blur(stop).mouseleave(stop);
+	}
+
+	function adjust(input, callback, increment) {
+		var n = parseInt(input.val());
+		if (isNaN(n)) {
+			n = 0;
+		}
+		var val = fix(n + increment);
+		input.val(val);
+		callback(val);
+	}
+
+	function fix(n) {
+		while (n < -180) {
+			n = n + 360;
+		}
+		while (n >= 180) {
+			n = n - 360;
+		}
+		return n;
+	}
+
+	function updateAngleX(angle) {
+		control.angleX = angle;
 		control.paint();
 	}
 
-	function updateAngleY(event, ui) {
-		control.angleY = ui.value;
+	function updateAngleY(angle) {
+		control.angleY = angle;
 		control.paint();
 	}
 
-	function updateAngleZ(event, ui) {
-		control.angleZ = ui.value;
+	function updateAngleZ(angle) {
+		control.angleZ = angle;
 		control.paint();
 	}
 }
@@ -58,7 +99,7 @@
 
 	var r = 62;
 
-	var xy = (180 - this.angleX) * Math.PI / 180;
+	var xy = (this.angleX - 180) * Math.PI / 180;
 	var yz = (this.angleY - 180) * Math.PI / 180;
 	var xz = (180 - this.angleZ) * Math.PI / 180 + Math.PI / 2;
 
@@ -336,16 +377,13 @@
 
 RotationSupport.prototype.setAngles = function(x, y, z) {
 	this.controls.angleX = x;
-	this.controls.angleY = z; // It is extremly messy - this UI was developed separately from the rest and follows 
+	this.controls.angleY = z; // It is extremly messy - this UI was developed
+	// separately from the rest and follows
 	this.controls.angleZ = y; // different conventions
-	$("#sliderX").slider( {
-		value : x
-	});
-	$("#sliderY").slider( {
-		value : z
-	});
-	$("#sliderZ").slider( {
-		value : y
-	});
+
+	$("#xaxis").val(this.controls.angleX);
+	$("#yaxis").val(this.controls.angleY);
+	$("#zaxis").val(this.controls.angleZ);
+
 	this.controls.paint(true);
 };