Changeset 2843
- Timestamp:
- 03/21/07 19:30:20 (2 years ago)
- Files:
-
- trunk/openlayers/examples/select-feature.html (modified) (2 diffs)
- trunk/openlayers/lib/OpenLayers.js (modified) (1 diff)
- trunk/openlayers/lib/OpenLayers/Control/SelectFeature.js (modified) (6 diffs)
- trunk/openlayers/lib/OpenLayers/Handler/Feature.js (added)
- trunk/openlayers/lib/OpenLayers/Handler/Select.js (deleted)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/examples/select-feature.html
r2803 r2843 20 20 "http://labs.metacarta.com/wms/vmap0?", {layers: 'basic'}); 21 21 22 var pointLayer = new OpenLayers.Layer.Vector("Point Layer");23 var lineLayer = new OpenLayers.Layer.Vector("Line Layer");24 22 var polygonLayer = new OpenLayers.Layer.Vector("Polygon Layer"); 25 23 26 map.addLayers([wmsLayer, po intLayer, lineLayer, polygonLayer]);24 map.addLayers([wmsLayer, polygonLayer]); 27 25 map.addControl(new OpenLayers.Control.LayerSwitcher()); 28 26 map.addControl(new OpenLayers.Control.MousePosition()); 29 27 30 28 drawControls = { 31 point: new OpenLayers.Control.DrawFeature(pointLayer,32 OpenLayers.Handler.Point),33 line: new OpenLayers.Control.DrawFeature(lineLayer,34 OpenLayers.Handler.Path),35 29 polygon: new OpenLayers.Control.DrawFeature(polygonLayer, 36 30 OpenLayers.Handler.Polygon), 37 select: new OpenLayers.Control.SelectFeature(polygonLayer) 31 select: new OpenLayers.Control.SelectFeature(polygonLayer), 32 hover: new OpenLayers.Control.SelectFeature(polygonLayer, 33 {hover: true}) 38 34 }; 39 35 … … 68 64 </li> 69 65 <li> 70 <input type="radio" name="type" value="point" id="pointToggle" onclick="toggleControl(this);" /> 71 <label for="pointToggle">draw point</label> 72 </li> 73 <li> 74 <input type="radio" name="type" value="line" id="lineToggle" onclick="toggleControl(this);" /> 75 <label for="lineToggle">draw line</label> 76 </li> 77 <li> 78 <input type="radio" name="type" value="polygon" id="polygonToggle" onclick="toggleControl(this);" /> 66 <input type="radio" name="type" value="polygon" id="polygonToggle" 67 onclick="toggleControl(this);" /> 79 68 <label for="polygonToggle">draw polygon</label> 80 69 </li> 81 70 <li> 82 <input type="radio" name="type" value="select" id="selectToggle" onclick="toggleControl(this);" /> 83 <label for="selectToggle">select polygon</label> 71 <input type="radio" name="type" value="select" id="selectToggle" 72 onclick="toggleControl(this);" /> 73 <label for="selectToggle">select polygon on click</label> 74 </li> 75 <li> 76 <input type="radio" name="type" value="hover" id="hoverToggle" 77 onclick="toggleControl(this);" /> 78 <label for="hoverToggle">select polygon on hover</label> 84 79 </li> 85 80 </ul> trunk/openlayers/lib/OpenLayers.js
r2803 r2843 97 97 "OpenLayers/Handler/Path.js", 98 98 "OpenLayers/Handler/Polygon.js", 99 "OpenLayers/Handler/ Select.js",99 "OpenLayers/Handler/Feature.js", 100 100 "OpenLayers/Handler/Drag.js", 101 101 "OpenLayers/Handler/Box.js", trunk/openlayers/lib/OpenLayers/Control/SelectFeature.js
r2803 r2843 16 16 17 17 /** 18 * @type {Boolean} Allow selection of multiple geometries 19 */ 20 multiple: false, 21 22 /** 23 * @type {Boolean} Select on mouse over and deselect on mouse out. If 24 * true, this ignores clicks and only listens to mouse moves. 25 */ 26 hover: false, 27 28 /** 18 29 * @type {OpenLayers.Layer.Vector} 19 30 */ 20 31 layer: null, 21 22 /**23 * @type {OpenLayers.Handler.Select}24 */25 handler: null,26 32 27 33 /** … … 36 42 37 43 /** 38 * @type {O bject} Hash of styles44 * @type {OpenLayers.Handler.Feature} 39 45 * @private 40 46 */ 41 originalStyle: null, 42 43 /** 44 * @type {Boolean} Allow selection of multiple geometries 45 */ 46 multiple: false, 47 handler: null, 47 48 48 49 /** … … 53 54 initialize: function(layer, options) { 54 55 OpenLayers.Control.prototype.initialize.apply(this, [options]); 55 this.callbacks = OpenLayers.Util.extend({down: this.downFeature}, 56 this.callbacks); 56 this.callbacks = OpenLayers.Util.extend({ 57 down: this.downFeature, 58 over: this.overFeature, 59 out: this.outFeature 60 }, this.callbacks); 57 61 this.layer = layer; 58 this.handler = new OpenLayers.Handler. Select(this, layer, this.callbacks);62 this.handler = new OpenLayers.Handler.Feature(this, layer, this.callbacks); 59 63 }, 60 64 61 65 /** 62 * 66 * Called when the feature handler detects a mouse-down on a feature 67 * @param {OpenLayers.Geometry} 63 68 */ 64 69 downFeature: function(geometry) { 70 if(this.hover) { 71 return; 72 } 73 if(geometry.parent) { 74 geometry = geometry.parent; 75 } 65 76 // Store feature style for restoration later 66 77 if(geometry.feature.originalStyle == null) { … … 70 81 if (this.multiple) { 71 82 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) { 72 this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle); 73 OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature); 83 this.layer.renderer.drawGeometry(geometry, 84 geometry.feature.originalStyle); 85 OpenLayers.Util.removeItem(this.layer.selectedFeatures, 86 geometry.feature); 74 87 } else { 75 88 this.layer.selectedFeatures.push(geometry.feature); … … 78 91 } else { 79 92 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) { 80 this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle); 81 OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature); 93 this.layer.renderer.drawGeometry(geometry, 94 geometry.feature.originalStyle); 95 OpenLayers.Util.removeItem(this.layer.selectedFeatures, 96 geometry.feature); 82 97 } else { 83 98 if (this.layer.selectedFeatures) { 84 99 for (var i = 0; i < this.layer.selectedFeatures.length; i++) { 85 this.layer.renderer.drawGeometry(this.layer.selectedFeatures[i].geometry, this.layer.selectedFeatures[i].originalStyle); 100 this.layer.renderer.drawGeometry( 101 this.layer.selectedFeatures[i].geometry, 102 this.layer.selectedFeatures[i].originalStyle); 86 103 } 87 104 OpenLayers.Util.clearArray(this.layer.selectedFeatures); … … 91 108 } 92 109 } 110 }, 111 112 /** 113 * Called when the feature handler detects a mouse-over on a feature. 114 * Only responds if this.hover is true. 115 * @param {OpenLayers.Geometry} 116 */ 117 overFeature: function(geometry) { 118 if(!this.hover) { 119 return; 120 } 121 if(geometry.parent) { 122 geometry = geometry.parent; 123 } 124 // Store feature style for restoration later 125 if(geometry.feature.originalStyle == null) { 126 geometry.feature.originalStyle = geometry.feature.style; 127 } 128 129 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) { 130 this.layer.selectedFeatures.push(geometry.feature); 131 this.layer.renderer.drawGeometry(geometry, this.selectStyle); 132 } 133 }, 134 135 /** 136 * Called when the feature handler detects a mouse-out on a feature. 137 * Only responds if this.hover is true. 138 * @param {OpenLayers.Geometry} 139 */ 140 outFeature: function(geometry) { 141 if(!this.hover) { 142 return; 143 } 144 if(geometry.parent) { 145 geometry = geometry.parent; 146 } 147 this.layer.renderer.drawGeometry(geometry, geometry.feature.originalStyle); 148 OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature); 93 149 }, 94 150
