[OpenLayers-Commits] r7314 - in sandbox/topp/almanac: . examples lib/OpenLayers/Control

commits at openlayers.org commits at openlayers.org
Thu Jun 5 21:19:12 EDT 2008


Author: sbenthall
Date: 2008-06-05 21:19:12 -0400 (Thu, 05 Jun 2008)
New Revision: 7314

Modified:
   sandbox/topp/almanac/StoryEditGeometry.js
   sandbox/topp/almanac/examples/edit-feature.html
   sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js
Log:
improving Radio control, StoryEditGeometry control (still not in the right place) and the example

Modified: sandbox/topp/almanac/StoryEditGeometry.js
===================================================================
--- sandbox/topp/almanac/StoryEditGeometry.js	2008-06-05 23:58:02 UTC (rev 7313)
+++ sandbox/topp/almanac/StoryEditGeometry.js	2008-06-06 01:19:12 UTC (rev 7314)
@@ -11,38 +11,38 @@
      */
     layer: null,
     
-    drawControls: null,
+    tools: null,
     
-    modifyControl: null,
-    
     selectControl: null,
     
     /**
      * Constructor: Almanac.Control.StoryModify
      * Create a new control to modify stories.
      */
-    initialize: function(layer) {
+    initialize: function(layer, options) {
+        OpenLayers.Control.prototype.initialize.apply(this, [options]);
+        
         this.layer = layer;
 
-        this.drawControls = {
+        this.tools = {
                 point: new OpenLayers.Control.DrawFeature(layer,
                             OpenLayers.Handler.Point),
                 line: new OpenLayers.Control.DrawFeature(layer,
                             OpenLayers.Handler.Path),
                 polygon: new OpenLayers.Control.DrawFeature(layer,
-                            OpenLayers.Handler.Polygon)
+                            OpenLayers.Handler.Polygon),
+                modify: new OpenLayers.Control.ModifyFeature(layer)
         };
 
-        this.modifyControl = new OpenLayers.Control.ModifyFeature(layer);
-
-        this.selectControl = this.modifyControl.selectControl;
         
+        this.selectControl = this.tools['modify'].selectControl;
+        
         this.layer.events.on({
             "featureadded": this.onFeatureAdded,
             scope: this
         });
         
-        this.modifyControl.events.on({
+        this.tools['modify'].events.on({
             "activate": this.selectFeature,
             scope: this
         })
@@ -50,8 +50,8 @@
     },
     
     activate: function(){
-        OpenLayers.Console.log("SEG activated")
-        this.toggleMode();
+        OpenLayers.Control.prototype.activate.apply(this, arguments);
+        this.toggleMode('modify');
     },
     
     destroy: function(){        
@@ -66,34 +66,28 @@
         })
         
         this.layer = null;
-        this.drawControls = null;
-        this.modifyControl = null;
+        this.tools = null;
         this.selectControl = null;
 
         OpenLayers.Control.prototype.destroy.apply(this, arguments);
     },
     
-    toggleMode: function(geom) {
-        OpenLayers.Console.log("toggleMode called")
-        
-        if(!geom){
-            this.modifyControl.activate();
-        } else {
-            this.modifyControl.deactivate();
+    toggleMode: function(name) {
+        if(!this.active){
+            return;
         }
         
-        for(key in this.drawControls) {
-            var control = this.drawControls[key];
-            if(geom == key) {
-                control.activate();
+        for(var key in this.tools) {
+            var tool = this.tools[key];
+            if(name == key) {
+                tool.activate();
             } else {
-                control.deactivate();
+                tool.deactivate();
             }
         }
     },
     
     selectFeature: function(){
-        OpenLayers.Console.log(this);
         //this control maintains a maximum of one feature on its layer
         var feature = this.layer.features[0];
         
@@ -103,8 +97,6 @@
     },
     
     onFeatureAdded: function(ev){
-        OpenLayers.Console.log(ev);
-        
         feature = ev.feature;
                                             
         for(var i = 0; i < this.layer.features.length ; i++){
@@ -113,7 +105,7 @@
             }      
         }
         
-        this.toggleMode();
+        this.toggleMode('modify');
     },
     
     /**
@@ -124,15 +116,21 @@
      * map - {<OpenLayers.Map>} The control's map.
      */
     setMap: function(map) {
-        for(key in this.drawControls){
-            this.drawControls[key].setMap(map);
+        for(var key in this.tools){
+            this.tools[key].setMap(map);
         }
+
+        //this.selectControl.setMap(map);
         
-        this.modifyControl.setMap(map);
-        this.selectControl.setMap(map);
-        
         OpenLayers.Control.prototype.setMap.apply(this, arguments);
     },
  
+    onToolActivateBehavior: function(tool, scope, behavior){
+        this.tools[tool].events.on({
+            "activate" : behavior,
+            scope : scope
+        })
+    },
+ 
     CLASS_NAME: "Almanac.Control.StoryEditGeometry"
 });

Modified: sandbox/topp/almanac/examples/edit-feature.html
===================================================================
--- sandbox/topp/almanac/examples/edit-feature.html	2008-06-05 23:58:02 UTC (rev 7313)
+++ sandbox/topp/almanac/examples/edit-feature.html	2008-06-06 01:19:12 UTC (rev 7314)
@@ -19,7 +19,7 @@
         <script src="../lib/OpenLayers.js"></script>
         <script src="../StoryEditGeometry.js"></script>
         <script type="text/javascript">
-             var map, vectors, controls;
+             var map, vectors, controls, panel;
         function init(){
             map = new OpenLayers.Map('map');
             var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
@@ -33,7 +33,7 @@
             var storyEditGeometryControl = new Almanac.Control.StoryEditGeometry(vectors);
             map.addControl(storyEditGeometryControl);
             
-            var panel = new OpenLayers.Control.Radio(
+            panel = new OpenLayers.Control.Radio(
                 [
                     {
                         id: "modifyFeatureTool",
@@ -51,49 +51,43 @@
                         id: "drawPolygonTool",
                         value: 'polygon'
                     }
-                ], {
-                    defaultBehavior: function(){
-                        storyEditGeometryControl.toggleMode();
-                    }
-                }
+                ]
             )
             
             var point = new OpenLayers.Geometry.Point(0, 0);
             var pointFeature = new OpenLayers.Feature.Vector(point,null);
             
             vectors.addFeatures([pointFeature]);
-            OpenLayers.Console.log(vectors);
-            
-            storyEditGeometryControl.activate();
               
             map.addControl(panel);
-            panel.activate();
-            panel.setOnclickBehavior('modify', function(){
-                           storyEditGeometryControl.toggleMode()
-                        }, storyEditGeometryControl);
-            panel.setOnclickBehavior('point', function(){
-                            storyEditGeometryControl.toggleMode('point')
-                        }, storyEditGeometryControl);
-            panel.setOnclickBehavior('line', function(){
+            
+            //oh, behave!
+            panel.setOnclickBehavior('modify', storyEditGeometryControl,
+                        function(){
+                           storyEditGeometryControl.toggleMode('modify');
+                        });
+            panel.setOnclickBehavior('point', storyEditGeometryControl,
+                        function(){
+                            storyEditGeometryControl.toggleMode('point');
+                        });
+            panel.setOnclickBehavior('line', storyEditGeometryControl, 
+                        function(){
                             storyEditGeometryControl.toggleMode('line')
-                        }, storyEditGeometryControl);
-            panel.setOnclickBehavior('polygon', function(){
+                        });
+            panel.setOnclickBehavior('polygon', storyEditGeometryControl, 
+                        function(){
                             storyEditGeometryControl.toggleMode('polygon')
-                        }, storyEditGeometryControl);
+                        });
+            storyEditGeometryControl.onToolActivateBehavior('modify', panel, function(){
+                this.select('modify');
+            })
             
+            panel.activate();
+            storyEditGeometryControl.activate();
+
+            
             map.setCenter(new OpenLayers.LonLat(0, 0), 3);
         }
-
-        function toggleControl(element) {
-            for(key in controls) {
-                var control = controls[key];
-                if(element.value == key && element.checked) {
-                    control.activate();
-                } else {
-                    control.deactivate();
-                }
-            }
-        }
         
         </script>
         

Modified: sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js
===================================================================
--- sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js	2008-06-05 23:58:02 UTC (rev 7313)
+++ sandbox/topp/almanac/lib/OpenLayers/Control/Radio.js	2008-06-06 01:19:12 UTC (rev 7314)
@@ -10,6 +10,8 @@
      */
     radios: null,
 
+    selected: null,
+
     /**
      * 
      * Parameters:
@@ -28,6 +30,7 @@
     destroy: function() {
         OpenLayers.Control.prototype.destroy.apply(this, arguments);
         this.radio = null;
+        this.selected = null;
     },
 
     /**
@@ -58,18 +61,19 @@
         var panel = this;
         
         return function(){
-            panel.events.triggerEvent("clicked",{value : radio.value})
-            panel.redraw(radio);
+            panel.selected = radio;
+            panel.events.triggerEvent("clicked",{value : radio.value});
+            panel.redraw();
         }
     },
     
-    redraw: function(radio){        
+    redraw: function(){        
         for(var i = 0; i < this.radios.length; i++){
-            var thisRadio = this.radios[i];
+            var radio = this.radios[i];
             
-            var domElt = document.getElementById(thisRadio.id);
+            var domElt = document.getElementById(radio.id);
             
-            if(radio == thisRadio){
+            if(radio == this.selected){
                 OpenLayers.Element.addClassName(domElt, this.selectedCSSClassName);
                 //toggle.behavior();
             } else {
@@ -78,24 +82,24 @@
         }
     },
     
-    defaultBehavior: function(){
-        
-    },
-    
-    setOnclickBehavior: function(value, behavior, scope){
-        var obj = {
+    setOnclickBehavior: function(value, scope, behavior){
+        this.events.on({
             "clicked" : function(evt){
                 if(evt.value == value){
                     behavior(evt); //maybe the argument here should just be the value?
-                }
+                }                
             },
+            scope: scope
+        });
+    },
+    
+    select: function(radio){
+        for(var i = 0; i < this.radios.length; i++){
+            if(this.radios[i] == radio || this.radios[i].value == radio){
+                this.selected = this.radios[i];
+                this.redraw();
+            }
         }
-        
-        if(scope){
-            obj.scope = scope;
-        }
-        
-        this.events.on(obj);
     },
     
     CLASS_NAME: "OpenLayers.Control.Radio"



More information about the Commits mailing list