Changeset 4243
- Timestamp:
- 09/12/07 11:05:18 (1 year ago)
- Files:
-
- trunk/openlayers/lib/OpenLayers/Control/SelectFeature.js (modified) (3 diffs)
- trunk/openlayers/lib/OpenLayers/Handler/Feature.js (modified) (3 diffs)
- trunk/openlayers/tests/Handler/test_Feature.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/lib/OpenLayers/Control/SelectFeature.js
r4241 r4243 44 44 45 45 /** 46 * APIProperty: geometryTypes 47 * {Array(String)} To restrict selecting to a limited set of geometry types, 48 * send a list of strings corresponding to the geometry class names. 49 */ 50 geometryTypes: null, 51 52 /** 46 53 * Property: layer 47 54 * {<OpenLayers.Layer.Vector>} … … 76 83 initialize: function(layer, options) { 77 84 OpenLayers.Control.prototype.initialize.apply(this, [options]); 85 this.layer = layer; 78 86 this.callbacks = OpenLayers.Util.extend({ 79 87 click: this.clickFeature, … … 81 89 out: this.outFeature 82 90 }, this.callbacks); 83 this.layer = layer; 84 this.handler = new OpenLayers.Handler.Feature(this, layer, this.callbacks); 91 var handlerOptions = {geometryTypes: this.geometryTypes}; 92 this.handler = new OpenLayers.Handler.Feature(this, layer, 93 this.callbacks, 94 handlerOptions); 85 95 }, 86 96 trunk/openlayers/lib/OpenLayers/Handler/Feature.js
r4241 r4243 13 13 */ 14 14 OpenLayers.Handler.Feature = OpenLayers.Class(OpenLayers.Handler, { 15 16 /** 17 * To restrict dragging to a limited set of geometry types, send a list 18 * of strings corresponding to the geometry class names. 19 * 20 * @type Array(String) 21 */ 22 geometryTypes: null, 15 23 16 24 /** … … 116 124 * {Boolean} A feature was selected 117 125 */ 118 select: function(type, evt) { 126 select: function(type, evt) { 119 127 var feature = this.layer.getFeatureFromEvent(evt); 128 var selected = false; 120 129 if(feature) { 121 // three cases: 122 // over a new, out of the last and over a new, or still on the last 123 if(!this.feature) { 124 // over a new feature 125 this.callback('over', [feature]); 126 } else if(this.feature != feature) { 127 // out of the last and over a new 128 this.callback('out', [this.feature]); 129 this.callback('over', [feature]); 130 if(this.geometryTypes == null || 131 (OpenLayers.Util.indexOf(this.geometryTypes, 132 feature.geometry.CLASS_NAME) > -1)) { 133 // three cases: 134 // over a new, out of the last and over a new, or still on the last 135 if(!this.feature) { 136 // over a new feature 137 this.callback('over', [feature]); 138 } else if(this.feature != feature) { 139 // out of the last and over a new 140 this.callback('out', [this.feature]); 141 this.callback('over', [feature]); 142 } 143 this.feature = feature; 144 this.callback(type, [feature]); 145 selected = true; 146 } else { 147 if(this.feature && (this.feature != feature)) { 148 // out of the last and over a new 149 this.callback('out', [this.feature]); 150 this.feature = null; 151 } 152 selected = false; 130 153 } 131 this.feature = feature;132 this.callback(type, [feature]);133 return true;134 154 } else { 135 155 if(this.feature) { … … 138 158 this.feature = null; 139 159 } 140 returnfalse;160 selected = false; 141 161 } 162 return selected; 142 163 }, 143 164 trunk/openlayers/tests/Handler/test_Feature.html
r4241 r4243 99 99 } 100 100 101 function test_Handler_feature_geometrytype_limit(t) { 102 t.plan(2); 103 var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0,0)); 104 var map = new OpenLayers.Map('map'); 105 var control = new OpenLayers.Control(); 106 map.addControl(control); 107 var layer = new OpenLayers.Layer(); 108 layer.getFeatureFromEvent = function(evt) { return feature }; 109 map.addLayer(layer); 110 var handler = new OpenLayers.Handler.Feature(control, layer, {}, {'geometryTypes':['OpenLayers.Geometry.Point']}); 111 handler.activate(); 112 handler.callback = function(type,featurelist) { 113 t.eq(featurelist[0].id, feature.id, "Correct feature called back on"); 114 } 115 handler.select("foo", {}); 116 handler.feature = null; 117 handler.callback = function(type,featurelist) { 118 t.fail("Shouldn't have called back on " + featurelist[0].geometry); 119 } 120 feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(0,0)); 121 handler.select("foo", {}); 122 } 101 123 function test_Handler_Feature_callbacks(t) { 102 124 t.plan(75);
