changeset 978:3b334a7d81ec

finished calibration dialog
author hertzhaft
date Thu, 26 Jan 2012 20:44:21 +0100
parents 17bf6ac7a8cd
children 5db496a7e48c 367f64acda4e
files webapp/src/main/webapp/jquery/jquery.digilib.buttons.js webapp/src/main/webapp/jquery/jquery.digilib.css webapp/src/main/webapp/jquery/jquery.digilib.js
diffstat 3 files changed, 71 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery.digilib.buttons.js	Thu Jan 26 17:51:47 2012 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.buttons.js	Thu Jan 26 20:44:21 2012 +0100
@@ -244,13 +244,7 @@
                 var $calDiv = $('#calibration');
                 var $input = $('#calibration-input');
                 $calDiv.fadeIn();
-                $
-                // var cm = window.prompt("The length of the scale on your screen in centimeter:");
-/*                 if (cm) {
-                    var dpi = calRect.width / parseFloat(cm) * 2.54;
-                    this.params.set("ddpi", cropFloat(dpi));
-                    }
- */
+                $input.focus();
             },
 
             // shows ScaleModeSelector
@@ -337,21 +331,41 @@
             <div id="calibration" class="calibration">\
                 <div class="ruler">\
                     <div class="cm">Please enter the length of this scale on your screen</div>\
-                    <input id="calibration-input" /> cm\
+                    <div>\
+                        <input id="calibration-input" size="5"/> cm\
+                        <button class="calibration-button" id="calibrationOk">OK</button>\
+                        <button class="calibration-button" id="calibrationCancel">Cancel</button>\
+                    </div>\
+                    <div class="calibration-error">Please enter a numeric value like this: 12.3</div>\
                 </div>\
             </div>';
         var $calDiv = $(html);
-        //$rulerDiv.append($cmDiv);
-        //$rulerDiv.append($cmInput);
-        //$calDiv.append($rulerDiv);
         $elem.append($calDiv);
+        var $input = $calDiv.find("input");
+        var $ok = $calDiv.find("#calibrationOk");
+        var $cancel = $calDiv.find("#calibrationCancel");
+        data.calibrationDiv = $calDiv;
+        data.calibrationErrorDiv = $calDiv.find("div.calibration-error");
+        data.calibrationInput = $input;
         var calRect = geom.rectangle($calDiv);
         var screenRect = fn.getFullscreenRect(data);
-        console.debug('calRect:', calRect);
-        console.debug('screenRect:', screenRect);
         calRect.setCenter(screenRect.getCenter());
-        console.debug('calRect:', calRect);
         calRect.adjustDiv($calDiv);
+        var handler = function(event) {
+            var _data = data;
+            if (event.keyCode == 27 || event.target.id == 'calibrationCancel') {
+                $calDiv.fadeOut();
+                return false;
+                }
+            if (event.keyCode == 13 || event.target.id == 'calibrationOk') {
+                changeCalibration(_data);
+                return false;
+                }
+            _data.calibrationInput.removeClass('error');
+            };
+        $ok.on("click", handler);
+        $cancel.on("click", handler);
+        $input.on("keypress", handler);
     };
 
     /** creates HTML structure for the scale mode menu
@@ -393,6 +407,23 @@
         digilib.actions.setScaleMode(data, newMode);
     };
 
+    /** event handler
+     */
+    var changeCalibration = function (data) {
+        var $calDiv = data.calibrationDiv;
+        var $input = data.calibrationInput;
+        var cm = $input.val();
+        var w = $calDiv.width();
+  		var dpi = fn.cropFloat(w / parseFloat(cm) * 2.54);
+  		console.debug('width', w, 'cm', cm, 'input dpi:', dpi);
+  		if(!fn.isNumber(dpi)) {
+  		    $input.addClass('error');
+  		    return;
+  		    }
+  		digilib.actions.calibrate(data, dpi);
+        $calDiv.fadeOut();
+    };
+
     // creates HTML structure for a single button
     var createButton = function (data, $div, buttonName) {
         var $elem = data.$elem;
--- a/webapp/src/main/webapp/jquery/jquery.digilib.css	Thu Jan 26 17:51:47 2012 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.css	Thu Jan 26 20:44:21 2012 +0100
@@ -114,7 +114,6 @@
 	background: url('blue.png');
 	position: absolute;
 	border: 1px solid lightcyan;
-	top: 0px;
 	width: 400px;
 	display: none;
 	z-index: 9999;
@@ -133,7 +132,32 @@
 	}
 
 div.digilib div.cm {
+	padding: 5px;
+	}
+
+div.digilib div.calibration-error {
+	color: red;
 	padding: 10px;
+	display: none;
+	}
+
+div.digilib button.calibration-button {
+	margin: 0px 10px;
+	border: 1px solid lightcyan;
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	font-size: 12px;
+	font-weight: bold;
+	color: lightcyan;
+	background-color: transparent;
+	}
+
+div.digilib input.calibration-input {
+	margin: 0px 10px;
+	}
+
+div.digilib input.error {
+	color: red;
+	background-color: khaki;
 	}
 
 div.infobutton {
--- a/webapp/src/main/webapp/jquery/jquery.digilib.js	Thu Jan 26 17:51:47 2012 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.js	Thu Jan 26 20:44:21 2012 +0100
@@ -1765,6 +1765,7 @@
             setFitMode : setFitMode,
             canMove : canMove,
             isFullArea : isFullArea,
+            isNumber : isNumber,
             getFullscreenRect : getFullscreenRect,
             getBorderWidth : getBorderWidth,
             cropFloat : cropFloat,