changeset 1250:f9b3620a203e

draw shapes now functional
author hertzhaft
date Thu, 16 Jan 2014 19:38:36 +0100
parents 20fe79f8f432
children 0bcc1cd62fc6
files webapp/src/main/webapp/jquery/jquery-test-measure.html webapp/src/main/webapp/jquery/jquery.digilib.measure.js
diffstat 2 files changed, 107 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/webapp/src/main/webapp/jquery/jquery-test-measure.html	Thu Jan 16 19:34:17 2014 +0100
+++ b/webapp/src/main/webapp/jquery/jquery-test-measure.html	Thu Jan 16 19:38:36 2014 +0100
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:xlink="http://www.w3.org/1999/xlink" >
     <head>
-        <title>jquery.digilib.svg.js test</title>
+        <title>Digilib measure test</title>
 
         <script type="text/javascript" src="jquery.js"></script>
         <script type="text/javascript" src="jquery.cookie.js"></script>
@@ -43,8 +43,6 @@
             <img src="http://digilib.berlios.de/images/digilib-logo-big.png" />
         </div>
 
-        <a href="javascript: DIGILIB('test')">test</a>
-
     </body>
 </html>
 
--- a/webapp/src/main/webapp/jquery/jquery.digilib.measure.js	Thu Jan 16 19:34:17 2014 +0100
+++ b/webapp/src/main/webapp/jquery/jquery.digilib.measure.js	Thu Jan 16 19:38:36 2014 +0100
@@ -1,8 +1,8 @@
 /*
  * #%L
- * digilib SVG plugin
+ * digilib measure plugin
  * %%
- * Copyright (C) 2012 - 2013 Bibliotheca Hertziana, MPIWG Berlin
+ * Copyright (C) 2012 - 2014 Bibliotheca Hertziana, MPIWG Berlin
  * %%
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as 
@@ -21,7 +21,7 @@
  * Authors: Martin Raspe, Robert Casties, 2012-2014
  */
 /**
- * digilib SVG plugin (display a SVG on top if scaler image and zoom/rotate/mirror etc.)
+ * digilib measure plugin (measure distances on the digilib image in historic units etc.)
 **/ 
 
 /* jslint browser: true, debug: true, forin: true
@@ -677,29 +677,42 @@
           }]
         };
     var buttons = {
-        toolbar : {
-            onclick : "toolbar",
+        showtoolbar : {
+            onclick : "showtoolbar",
             tooltip : "show toolbar",
             icon : "showregions.png"
+            },
+        drawshape : {
+            onclick : "drawshape",
+            tooltip : "draw a shape",
             }
         };
 
     var defaults = {
         // buttonset of this plugin
-        measureButtonSet : ['toolbar'],
+        measureButtonSet : ['showtoolbar'],
         // unit data
         units : UNITS,
         // choice of colors offered by toolbar
         lineColors : ['white', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'violet', 'black'],
         // default color
-        lineColor : 'white',
+        lineColor : 'red',
         // color while the line is drawn
         drawColor : 'green',
         // color of selected objects
         selectColor : 'red',
         // drawing shapes
-        shapes : ['line', 'polyline', 'rectangle', 'square', 'circle', 'arch',
-            'ratio', 'intercolumnium', 'line grid'],
+        shapetypes : [
+            { 'name': 'line', 'type' : 'Line' },
+            { 'name': 'polyline', 'type' : 'Polygon' },
+            { 'name': 'rectangle', 'type' : 'Rectangle' },
+            { 'name': 'square', 'type' : 'Square' },
+            { 'name': 'circle', 'type' : 'Circle' },
+            { 'name': 'arch', 'type' : 'Arch' },
+            { 'name': 'ratio', 'type' : 'Ratio' },
+            { 'name': 'intercolumnium', 'type' : 'InterCol' },
+            { 'name': 'line grid', 'type' : 'Grid' }
+            ],
         // default shape
         shape : 'line',
         // measuring unit (index into unit list)
@@ -747,26 +760,60 @@
         };
 
     var actions = {
-        toolbar : function(data) {
+        showtoolbar : function(data) {
             var $toolbar = data.$toolbar;
             if (!$toolbar) {
                 $toolbar = setupToolbar(data);
 				};
 			$toolbar.toggle();
-            setBottom(data, $toolbar);
+            setScreenPosition(data, $toolbar);
 			return;
             },
-        line : function(data) {
-            //
-            }
+        drawshape : function(data) {
+            var shape = currentShape(data);
+            digilib.actions.addShape(data, shape, onCompleteShape);
+            console.debug('action: drawshape', shape);
+            }
+        };
+
+    var onCompleteShape = function(data, shape) {
+            console.debug('onCompleteShape', shape);
         };
 
+    var currentShape = function(data) {
+        var shape = getSelectedShapeType(data);
+        var stroke = getSelectedStroke(data);
+        var item = {
+            'geometry' : {
+                'type' : shape.type
+                },
+            'properties' : {
+                'stroke' : stroke
+                }
+            };
+        return item;
+        };
+
+    // return shape type selected by user (on the toolbar)
+    var getSelectedShapeType = function(data) {
+        var $t = data.$toolbar;
+        var $select = $t.find('#measure-shapes');
+        var val = $select.val();
+        return data.settings.shapetypes[val];
+    };
+
+    // return line color chosen by user
+    var getSelectedStroke = function(data) {
+        // TODO: colorpicker
+        return data.settings.linecolor;
+    };
+
     // load shapes into select element
-    var loadShapes = function(data) {
+    var loadShapeTypes = function(data) {
         var $t = data.$toolbar;
         var $shape = $t.find('#measure-shapes');
-        $.each(data.settings.shapes, function(index, name) {
-            var $opt = $('<option value="'+index+'">'+name+'</option>');
+        $.each(data.settings.shapetypes, function(index, item) {
+            var $opt = $('<option value="'+ index + '">' + item.name + '</option>');
             $shape.append($opt);
             });
     };
@@ -790,15 +837,16 @@
             });
     };
 
-    var setBottom = function(data, $div) {
+    var setScreenPosition = function(data, $div) {
         if ($div == null) return;
         var h = geom.rectangle($div).height;
         var s = fn.getFullscreenRect(data);
         geom.position(0, s.height - h).adjustDiv($div);
     };
 
-    // setup a div for accessing the main SVG functionality
+    // setup a div for accessing the measure functionality
     var setupToolbar = function(data) {
+        console.debug('measure: setupToolbar');
         var html = '\
             <div id="measure-toolbar">\
                 <button id="measure-draw">M</button>\
@@ -816,28 +864,48 @@
 				<span id="measure-angle" class="dl-measure-number">0.0</span>\
             </div>';
         var $toolbar = $(html);
+        console.debug('measure', data.$elem, $toolbar);
         data.$elem.append($toolbar);
         data.$toolbar = $toolbar;
-        loadShapes(data);
+        loadShapeTypes(data);
         loadSections(data);
+        setupToolbarButton(data);
         return $toolbar;
         };
 
-    var drawInitial = function ($svg) {
-        console.debug('Measure is ready');
+    // wire the draw button
+    var setupToolbarButton = function (data) {
+        console.debug('measure: setupToolbarButton');
+        var $t = data.$toolbar;
+        var $b = $t.find('#measure-draw');
+        var buttonConfig = buttons['drawshape']; // not in data.settings.buttons
+        // button properties
+        var action = buttonConfig.onclick;
+        var tooltip = buttonConfig.tooltip;
+        $b.attr('title', tooltip);
+        $elem = data.$elem;
+        $b.on('click.digilib', function(evt) {
+            // the handler function calls digilib with action
+            console.debug('click action=', action, ' evt=', evt);
+            $elem.digilib(action);
+            return false;
+            });
         };
 
+    // event handler
     var handleSetup = function (evt) {
         console.debug("measure: handleSetup");
+        var data = this;
+        setupToolbar(data);
+        // var settings = data.settings;
+        };
+
+    // event handler
+    var handleUpdate = function (evt) {
+        console.debug("measure: handleUpdate");
         // var data = this;
         // var settings = data.settings;
-    };
-
-    var handleUpdate = function (evt) {
-        console.debug("svg: handleUpdate");
-        // var data = this;
-        // var settings = data.settings;
-    };
+        };
 
     // additional buttons
     var installButtons = function (data) {
@@ -849,11 +917,15 @@
             buttonSettings.measureButtonSet = buttonSet;
             buttonSettings.buttonSets.push('measureButtonSet');
             }
-    };
+        };
 
     // plugin installation called by digilib on plugin object.
     var install = function (plugin) {
         digilib = plugin;
+        if (digilib.plugins.vector == null) {
+            console.debug('measure plugin: vector plugin is missing, aborting installation.');
+            return;
+            }
         console.debug('installing measure plugin. digilib:', digilib);
         fn = digilib.fn;
         // import geometry classes
@@ -864,11 +936,11 @@
         $.extend(true, digilib.buttons, buttons);
         // export functions
         // fn.test = test;
-    };
+        };
 
     // plugin initialization
     var init = function (data) {
-        console.debug('initialising svg plugin. data:', data);
+        console.debug('initialising measure plugin. data:', data);
         var settings = data.settings;
         CSS = settings.cssPrefix;
         FULL_AREA  = geom.rectangle(0, 0, 1, 1);
@@ -880,7 +952,7 @@
         if (digilib.plugins.buttons != null) {
             installButtons(data);
         }
-    };
+        };
 
     // plugin object with name and init
     // shared objects filled by digilib on registration
@@ -892,7 +964,7 @@
             actions : {},
             fn : {},
             plugins : {}
-    };
+        };
 
     if ($.fn.digilib == null) {
         $.error("jquery.digilib.measure must be loaded after jquery.digilib!");