Ticket #628: no-more-feature-r3034.patch
| File no-more-feature-r3034.patch, 53.2 kB (added by crschmidt, 2 years ago) |
|---|
-
tests/test_Geometry.html
old new 178 178 } 179 179 180 180 function test_99_Geometry_destroy(t) { 181 t.plan( 3);181 t.plan( 2 ); 182 182 183 183 var g = new OpenLayers.Geometry(); 184 184 g.bounds = new OpenLayers.Bounds(); 185 g.feature = new Object();186 185 187 186 g_style_destroy = null; 188 187 g.destroy(); … … 190 189 t.eq(g.id, null, "id nullified"); 191 190 192 191 t.eq(g.bounds, null, "bounds nullified"); 193 t.eq(g.feature, null, "feature reference nullified");194 192 195 193 } 196 194 -
tests/Feature/test_Vector.html
old new 2 2 <head> 3 3 <script src="../../lib/OpenLayers.js"></script> 4 4 <script type="text/javascript"><!-- 5 var isMozilla = (navigator.userAgent.indexOf("compatible") == -1);6 5 var map; 7 6 var feature; 8 7 -
tests/Layer/test_Vector.html
old new 21 21 var layer = new OpenLayers.Layer.Vector(name); 22 22 23 23 var point = new OpenLayers.Geometry.Point(-111.04, 45.68); 24 var pointFeature = new OpenLayers.Feature.Vector(layer, point); 25 24 var pointFeature = new OpenLayers.Feature.Vector(point); 26 25 layer.addFeatures([pointFeature]); 27 26 28 27 t.eq(layer.features.length, 1, "OpenLayers.Layer.Vector.addFeatures adds something to the array"); … … 60 59 layer.addFeatures(f); 61 60 t.ok( f.style != null, "Feature style is set by layer."); 62 61 } 62 63 function test_Layer_Vector_drawFeature(t) { 64 t.plan(4); 65 var layer = new OpenLayers.Layer.Vector("Test Layer"); 66 var map = new OpenLayers.Map('map'); 67 map.addLayer(layer); 68 var geometry = new OpenLayers.Geometry.Point(10, 10); 69 var feature = new OpenLayers.Feature.Vector(geometry); 70 71 var f, s; 72 layer.renderer = { 73 drawFeature: function(feature, style) { 74 f = feature; 75 s = style; 76 } 77 }; 63 78 79 layer.drawFeature(feature); 80 t.ok(geometry.equals(f.geometry), 81 "calls layer.renderer.drawFeature() with feature.geometry"); 82 83 feature.style = 'exists'; 84 layer.drawFeature(feature); 85 t.eq(feature.style, s, 86 "calls layer.renderer.drawFeature() with feature.style"); 87 88 feature.style = null; 89 layer.style = 'exists'; 90 layer.drawFeature(feature); 91 t.eq(layer.style, s, 92 "given null feature style, uses layer style"); 93 94 feature.style = 'exists'; 95 layer.style = 'exists'; 96 var customStyle = 'custom'; 97 layer.drawFeature(feature, customStyle); 98 t.eq(customStyle, s, 99 "given a custom style, renders with that"); 100 101 } 102 64 103 function test_Layer_Vector_destroyFeatures (t) { 65 104 t.plan(2); 66 105 layer = new OpenLayers.Layer.Vector(name); -
lib/OpenLayers/Control/SelectFeature.js
old new 27 27 28 28 /** 29 29 * @type {Function} Optional function to be called when a feature is selected. 30 * The function should expect to be called with a geometry.30 * The function should expect to be called with a feature. 31 31 */ 32 32 onSelect: function() {}, 33 33 34 34 /** 35 35 * @type {Function} Optional function to be called when a feature is unselected. 36 * The function should expect to be called with a geometry.36 * The function should expect to be called with a feature. 37 37 */ 38 38 onUnselect: function() {}, 39 39 … … 76 76 77 77 /** 78 78 * Called when the feature handler detects a mouse-down on a feature 79 * @param {OpenLayers. Geometry}79 * @param {OpenLayers.Vector.Feature} 80 80 */ 81 downFeature: function( geometry) {81 downFeature: function(feature) { 82 82 if(this.hover) { 83 83 return; 84 84 } 85 if(geometry.parent) {86 geometry = geometry.parent;87 }88 85 if (this.multiple) { 89 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {90 this.unselect( geometry);86 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) { 87 this.unselect(feature); 91 88 } else { 92 this.select( geometry);89 this.select(feature); 93 90 } 94 91 } else { 95 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1) {96 this.unselect( geometry);92 if(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1) { 93 this.unselect(feature); 97 94 } else { 98 95 if (this.layer.selectedFeatures) { 99 96 for (var i = 0; i < this.layer.selectedFeatures.length; i++) { 100 this.unselect(this.layer.selectedFeatures[i] .geometry);97 this.unselect(this.layer.selectedFeatures[i]); 101 98 } 102 99 } 103 this.select( geometry);100 this.select(feature); 104 101 } 105 102 } 106 103 }, … … 108 105 /** 109 106 * Called when the feature handler detects a mouse-over on a feature. 110 107 * Only responds if this.hover is true. 111 * @param {OpenLayers. Geometry}108 * @param {OpenLayers.Feature.Vector} 112 109 */ 113 overFeature: function( geometry) {110 overFeature: function(feature) { 114 111 if(!this.hover) { 115 112 return; 116 113 } 117 if( geometry.parent) {118 geometry = geometry.parent;114 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, feature) > -1)) { 115 this.select(feature); 119 116 } 120 if(!(OpenLayers.Util.indexOf(this.layer.selectedFeatures, geometry.feature) > -1)) {121 this.select(geometry);122 }123 117 }, 124 118 125 119 /** 126 120 * Called when the feature handler detects a mouse-out on a feature. 127 121 * Only responds if this.hover is true. 128 * @param {OpenLayers. Geometry}122 * @param {OpenLayers.Feature.Vector} 129 123 */ 130 outFeature: function( geometry) {124 outFeature: function(feature) { 131 125 if(!this.hover) { 132 126 return; 133 127 } 134 if(geometry.parent) { 135 geometry = geometry.parent; 136 } 137 this.unselect(geometry); 128 this.unselect(feature); 138 129 }, 139 130 140 131 /** 141 132 * Add feature to the layer's selectedFeature array, render the feature as 142 133 * selected, and call the onSelect function. 143 * @param {OpenLayers. Geometry} geometry134 * @param {OpenLayers.Feature.Vector} feature 144 135 */ 145 select: function( geometry) {136 select: function(feature) { 146 137 // Store feature style for restoration later 147 if( geometry.feature.originalStyle == null) {148 geometry.feature.originalStyle = geometry.feature.style;138 if(feature.originalStyle == null) { 139 feature.originalStyle = feature.style; 149 140 } 150 this.layer.selectedFeatures.push( geometry.feature);151 this.layer. renderer.drawGeometry(geometry, this.selectStyle);152 this.onSelect( geometry);141 this.layer.selectedFeatures.push(feature); 142 this.layer.drawFeature(feature, this.selectStyle); 143 this.onSelect(feature); 153 144 }, 154 145 155 146 /** 156 147 * Remove feature from the layer's selectedFeature array, render the feature as 157 148 * normal, and call the onUnselect function. 158 * @param {OpenLayers. Geometry} geometry149 * @param {OpenLayers.Feature.Vector} feature 159 150 */ 160 unselect: function( geometry) {151 unselect: function(feature) { 161 152 // Store feature style for restoration later 162 if( geometry.feature.originalStyle == null) {163 geometry.feature.originalStyle = geometry.feature.style;153 if(feature.originalStyle == null) { 154 feature.originalStyle = feature.style; 164 155 } 165 this.layer. renderer.drawGeometry(geometry, geometry.feature.originalStyle);166 OpenLayers.Util.removeItem(this.layer.selectedFeatures, geometry.feature);167 this.onUnselect( geometry);156 this.layer.drawFeature(feature, feature.originalStyle); 157 OpenLayers.Util.removeItem(this.layer.selectedFeatures, feature); 158 this.onUnselect(feature); 168 159 }, 169 160 170 161 /** Set the map property for the control. -
lib/OpenLayers/Renderer.js
old new 107 107 }, 108 108 109 109 /** 110 * Draw the feature. The optional style argument can be used 111 * to override the feature's own style. This method should only 112 * be called from layer.drawFeature(). Implemented by a renderer 113 * subclass. 114 * 115 * @param {OpenLayers.Feature.Vector} feature 116 * @param {Object} style 117 */ 118 drawFeature: function(feature, style) {}, 119 120 /** 110 121 * virtual function 111 122 * 112 * Draw a geometry on the specified layer. 123 * Draw a geometry. This should only be called from the renderer itself. 124 * Use layer.drawFeature() from outside the renderer. 113 125 * 114 126 * @param geometry {OpenLayers.Geometry} 115 127 * @param style {Object} 128 * @private 116 129 */ 117 130 drawGeometry: function(geometry, style) {}, 118 131 … … 127 140 /** 128 141 * virtual function 129 142 * 130 * Returns a geometry from an event that happened on a layer. 131 * How this happens is specific to the renderer. 143 * Returns a feature id from an event on the renderer. 144 * How this happens is specific to the renderer. This should be 145 * called from layer.getFeatureFromEvent(). 132 146 * 133 147 * @param evt {OpenLayers.Event} 134 148 * 135 * @returns A geometry from an event that happened on a layer 136 * @type OpenLayers.Geometry 149 * @returns A feature id or null 150 * @type String 151 * @private 137 152 */ 138 get GeometryFromEvent: function(evt) {},153 getFeatureIdFromEvent: function(evt) {}, 139 154 140 155 /** 141 156 * virtual function -
lib/OpenLayers/Format/GML.js
old new 165 165 } 166 166 } 167 167 168 feature. setGeometry(geom, false);168 feature.geometry = geom; 169 169 if (this.extractAttributes) { 170 170 feature.attributes = this.parseAttributes(xmlNode); 171 171 } -
lib/OpenLayers/Format/KML.js
old new 80 80 } 81 81 } 82 82 83 feature. setGeometry(geom);83 feature.geometry = geom; 84 84 feature.attributes = this.parseAttributes(xmlNode); 85 85 86 86 return feature; -
lib/OpenLayers/Feature/Vector.js
old new 46 46 initialize: function(geometry, data, style) { 47 47 OpenLayers.Feature.prototype.initialize.apply(this, [null, null, data]); 48 48 this.lonlat = null; 49 this. setGeometry(geometry);49 this.geometry = geometry; 50 50 this.state = null; 51 51 if (data) { 52 52 OpenLayers.Util.extend(this.attributes, data); … … 126 126 }, 127 127 128 128 /** 129 * Set a feature id to the feature130 *131 * @param {String} feature id to set132 */133 setFid: function(fid) {134 this.fid = fid;135 },136 137 /**138 * Set a geometry to the feature139 *140 * @param {OpenLayers.Geometry} geometry to set141 * @param {Boolean} recurse Recursively set feature (for components)142 */143 setGeometry: function(geometry, recurse) {144 if(geometry) {145 this.geometry = geometry;146 this.geometry.feature = this;147 if (recurse != false) {148 this._setGeometryFeatureReference(this.geometry, this);149 }150 }151 },152 153 /**154 * Sets recursively the reference to the feature in the geometry155 *156 * @param {OpenLayers.Geometry}157 * @param {OpenLayers.Feature}158 */159 _setGeometryFeatureReference: function(geometry, feature) {160 geometry.feature = feature;161 if (geometry.components) {162 for (var i = 0; i < geometry.components.length; i++) {163 this._setGeometryFeatureReference(geometry.components[i], feature);164 }165 }166 },167 168 /**169 * Adds attributes an attributes object to the feature.170 * (should not be in geometry but in feature class)171 *172 * @param {Attributes} attributes173 */174 setAttributes: function(attributes) {175 this.attributes=attributes;176 },177 178 /**179 129 * @param {OpenLayers.LonLat} lonlat 180 130 * @param {float} toleranceLon Optional tolerance in Geometric Coords 181 131 * @param {float} toleranceLat Optional tolerance in Geographic Coords -
lib/OpenLayers/Renderer/Elements.js
old new 61 61 62 62 /** 63 63 * Remove all the elements from the root 64 * 64 * @private 65 65 */ 66 66 clear: function() { 67 67 if (this.root) { … … 71 71 } 72 72 }, 73 73 74 /**75 * Cycle through the rendered nodes and reproject them (this should be76 * called when the extent or size has changed);77 *78 * @param {OpenLayers.Bounds} extent79 */80 reproject: function(extent) {81 82 for (var i = 0; i < this.root.childNodes.length; i++) {83 var node = this.root.childNodes[i];84 //reproject node85 // for the moment, this only really happens so as to reset86 // the heaviness of the line relative to the resolution and87 // the size of the circle for the Point object88 this.reprojectNode(node);89 }90 },91 92 74 /** This function is in charge of asking the specific renderer which type 93 75 * of node to create for the given geometry. All geometries in an 94 76 * Elements-based renderer consist of one node and some attributes. We … … 100 82 * 101 83 * @returns The corresponding node type for the specified geometry 102 84 * @type String 85 * @private 103 86 */ 104 87 getNodeType: function(geometry) { }, 105 88 106 89 /** 107 * Draw the geometry on the specified layer, creating new nodes, 108 * setting paths, setting style. 90 * Draw the feature. The optional style argument can be used 91 * to override the feature's own style. This method should only 92 * be called from layer.drawFeature(). 109 93 * 94 * @param {OpenLayers.Feature.Vector} feature 95 * @param {Object} style 96 */ 97 drawFeature: function(feature, style) { 98 if(style == null) { 99 style = feature.style; 100 } 101 this.drawGeometry(feature.geometry, style, feature.id); 102 }, 103 104 /** 105 * Draw the geometry, creating new nodes, setting paths, setting style, 106 * setting featureId on the node. This method should only be called 107 * by the renderer itself. 108 * 110 109 * @param {OpenLayers.Geometry} geometry 111 * @param {Object} style 110 * @param {Object} style 111 * @param {String} featureId 112 * @private 112 113 */ 113 drawGeometry: function(geometry, style ) {114 drawGeometry: function(geometry, style, featureId) { 114 115 115 116 if ((geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPoint") || 116 117 (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiLineString") || 117 118 (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPolygon")) { 118 119 for (var i = 0; i < geometry.components.length; i++) { 119 this.drawGeometry(geometry.components[i], style );120 this.drawGeometry(geometry.components[i], style, featureId); 120 121 } 121 122 return; 122 123 }; … … 124 125 //first we create the basic node and add it to the root 125 126 var nodeType = this.getNodeType(geometry); 126 127 var node = this.nodeFactory(geometry.id, nodeType, geometry); 127 node.geometry = geometry; 128 node.olStyle = style; 128 node._featureId = featureId; 129 node._geometryClass = geometry.CLASS_NAME; 130 node._style = style; 129 131 this.root.appendChild(node); 130 132 131 133 //now actually draw the node, and style it 132 this.drawGeometryNode(node );134 this.drawGeometryNode(node, geometry); 133 135 }, 134 136 135 137 /** 136 138 * Given a node, draw a geometry on the specified layer. 139 * node and geometry are required arguments, style is optional. 140 * This method is only called by the render itself. 137 141 * 138 142 * @param {DOMElement} node 139 143 * @param {OpenLayers.Geometry} geometry 140 * @param {Object} style 144 * @param {Object} style 145 * @private 141 146 */ 142 147 drawGeometryNode: function(node, geometry, style) { 143 geometry = geometry || node.geometry; 144 style = style || node.olStyle; 148 style = style || node._style; 145 149 146 150 var options = { 147 151 'isFilled': true, … … 171 175 break; 172 176 } 173 177 174 node. olStyle = style;175 node. olOptions = options;178 node._style = style; 179 node._options = options; 176 180 177 181 //set style 178 this.setStyle(node); 182 //TBD simplify this 183 this.setStyle(node, style, options, geometry); 179 184 }, 180 185 181 186 /** 182 187 * virtual functions for drawing different Geometries. 183 188 * These should all be implemented by subclasses. 189 * These methods are only called by the render itself. 184 190 * 185 191 * @param {DOMElement} node 186 * @param {OpenLayers.Geometry} geometry 192 * @param {OpenLayers.Geometry} geometry 193 * @private 187 194 */ 188 195 drawPoint: function(node, geometry) {}, 189 196 drawLineString: function(node, geometry) {}, … … 200 207 * @returns A geometry from an event that happened on a layer 201 208 * @type OpenLayers.Geometry 202 209 */ 203 get GeometryFromEvent: function(evt) {210 getFeatureIdFromEvent: function(evt) { 204 211 var node = evt.target || evt.srcElement; 205 var geometry = node.geometry ? node.geometry : null 206 return geometry; 212 return node._featureId; 207 213 }, 208 214 209 215 /** Erase a geometry from the renderer. In the case of a multi-geometry, -
lib/OpenLayers/Renderer/VML.js
old new 89 89 * 90 90 * @returns The corresponding node type for the specified geometry 91 91 * @type String 92 * @private 92 93 */ 93 94 getNodeType: function(geometry) { 94 95 var nodeType = null; … … 113 114 }, 114 115 115 116 /** 116 * @param {DOMElement} node117 */118 reprojectNode: function(node) {119 //we have to reprojectNode the entire node since the coordinates120 // system has changed121 this.drawGeometryNode(node);122 },123 124 125 /**126 117 * Use to set all the style attributes to a VML node. 127 118 * 128 119 * @param {DOMElement} node 129 120 * @param {Object} style 130 121 * @param {Object} options 131 122 * @option isFilled {boolean} 132 * @option isStroked {boolean} 123 * @option isStroked {boolean} 124 * @param {OpenLayers.Geometry} geometry 125 * @private 133 126 */ 134 setStyle: function(node, style, options ) {135 style = style || node. olStyle;136 options = options || node. olOptions;127 setStyle: function(node, style, options, geometry) { 128 style = style || node._style; 129 options = options || node._options; 137 130 138 if (node. geometry.CLASS_NAME== "OpenLayers.Geometry.Point") {139 this.drawCircle(node, node.geometry, style.pointRadius);131 if (node._geometryClass == "OpenLayers.Geometry.Point") { 132 this.drawCircle(node, geometry, style.pointRadius); 140 133 } 141 134 142 135 //fill … … 186 179 * 187 180 * @param {DOMElement} node 188 181 * @param {OpenLayers.Geometry} geometry 182 * @private 189 183 */ 190 184 setNodeDimension: function(node, geometry) { 191 185 … … 257 251 /** 258 252 * @returns The specific render engine's root element 259 253 * @type DOMElement 254 * @private 260 255 */ 261 256 createRenderRoot: function() { 262 257 var id = this.container.id + "_vmlRoot"; … … 267 262 /** 268 263 * @returns The main root element to which we'll add vectors 269 264 * @type DOMElement 265 * @private 270 266 */ 271 267 createRoot: function() { 272 268 var id = this.container.id + "_root"; … … 282 278 283 279 /** 284 280 * @param {DOMElement} node 285 * @param {OpenLayers.Geometry} geometry 281 * @param {OpenLayers.Geometry} geometry 282 * @private 286 283 */ 287 284 drawPoint: function(node, geometry) { 288 this.drawCircle(node, node.geometry, 1);285 this.drawCircle(node, geometry, 1); 289 286 }, 290 287 291 288 /** Size and Center a circle given geometry (x,y center) and radius … … 293 290 * @param {DOMElement} node 294 291 * @param {OpenLayers.Geometry} geometry 295 292 * @param {float} radius 293 * @private 296 294 */ 297 295 drawCircle: function(node, geometry, radius) { 298 296 … … 311 309 /** 312 310 * @param {DOMElement} node 313 311 * @param {OpenLayers.Geometry} geometry 312 * @private 314 313 */ 315 314 drawLineString: function(node, geometry) { 316 315 this.drawLine(node, geometry, false); … … 319 318 /** 320 319 * @param {DOMElement} node 321 320 * @param {OpenLayers.Geometry} geometry 321 * @private 322 322 */ 323 323 drawLinearRing: function(node, geometry) { 324 324 this.drawLine(node, geometry, true); … … 328 328 * @param {DOMElement} node 329 329 * @param {OpenLayers.Geometry} geometry 330 330 * @param {Boolean} closeLine Close the line? (make it a ring?) 331 * @private 331 332 */ 332 333 drawLine: function(node, geometry, closeLine) { 333 334 … … 352 353 /** 353 354 * @parm {DOMElement} node 354 355 * @param {OpenLayers.Geometry} geometry 356 * @private 355 357 */ 356 358 drawPolygon: function(node, geometry) { 357 359 this.setNodeDimension(node, geometry); … … 380 382 /** 381 383 * @parm {DOMElement} node 382 384 * @param {OpenLayers.Geometry} geometry 385 * @private 383 386 */ 384 387 drawRectangle: function(node, geometry) { 385 388 var resolution = this.getResolution(); … … 395 398 /** 396 399 * @parm {DOMElement} node 397 400 * @param {OpenLayers.Geometry} geometry 401 * @private 398 402 */ 399 403 drawCurve: function(node, geometry) { 400 404 this.setNodeDimension(node, geometry); … … 421 425 /** 422 426 * @parm {DOMElement} node 423 427 * @param {OpenLayers.Geometry} geometry 428 * @private 424 429 */ 425 430 drawSurface: function(node, geometry) { 426 431 -
lib/OpenLayers/Renderer/SVG.js
old new 46 46 47 47 /** 48 48 * @param {OpenLayers.Bounds} extent 49 * @private 49 50 */ 50 51 setExtent: function(extent) { 51 52 OpenLayers.Renderer.Elements.prototype.setExtent.apply(this, … … 64 65 * sets the size of the drawing surface 65 66 * 66 67 * @param size {OpenLayers.Size} the size of the drawing surface 68 * @private 67 69 */ 68 70 setSize: function(size) { 69 71 OpenLayers.Renderer.prototype.setSize.apply(this, arguments); … … 80 82 * 81 83 * @returns The corresponding node type for the specified geometry 82 84 * @type String 85 * @private 83 86 */ 84 87 getNodeType: function(geometry) { 85 88 var nodeType = null; … … 106 109 } 107 110 return nodeType; 108 111 }, 109 110 /** 111 * @param {DOMElement} node 112 */ 113 reprojectNode: function(node) { 114 this.drawGeometryNode(node); 115 }, 116 112 117 113 /** 118 114 * Use to set all the style attributes to a SVG node. 119 115 * … … 125 121 * @param {Object} options 126 122 * @option isFilled {boolean} 127 123 * @option isStroked {boolean} 124 * @private 128 125 */ 129 126 setStyle: function(node, style, options) { 130 style = style || node. olStyle;131 options = options || node. olOptions;127 style = style || node._style; 128 options = options || node._options; 132 129 133 134 if (node.geometry.CLASS_NAME == "OpenLayers.Geometry.Point") { 130 if (node._geometryClass == "OpenLayers.Geometry.Point") { 135 131 node.setAttributeNS(null, "r", style.pointRadius); 136 132 } 137 133 … … 192 188 /** 193 189 * @returns The specific render engine's root element 194 190 * @type DOMElement 191 * @private 195 192 */ 196 193 createRenderRoot: function() { 197 194 var id = this.container.id + "_svgRoot"; … … 202 199 /** 203 200 * @returns The main root element to which we'll add vectors 204 201 * @type DOMElement 202 * @private 205 203 */ 206 204 createRoot: function() { 207 205 var id = this.container.id + "_root"; … … 224 222 /** 225 223 * @param {DOMElement} node 226 224 * @param {OpenLayers.Geometry} geometry 225 * @private 227 226 */ 228 227 drawPoint: function(node, geometry) { 229 228 this.drawCircle(node, geometry, 1); … … 233 232 * @param {DOMElement} node 234 233 * @param {OpenLayers.Geometry} geometry 235 234 * @param {float} radius 235 * @private 236 236 */ 237 237 drawCircle: function(node, geometry, radius) { 238 238 var resolution = this.getResolution(); … … 244 244 /** 245 245 * @param {DOMElement} node 246 246 * @param {OpenLayers.Geometry} geometry 247 * @private 247 248 */ 248 249 drawLineString: function(node, geometry) { 249 250 node.setAttributeNS(null, "points", this.getComponentsString(geometry.components)); … … 252 253 /** 253 254 * @param {DOMElement} node 254 255 * @param {OpenLayers.Geometry} geometry 256 * @private 255 257 */ 256 258 drawLinearRing: function(node, geometry) { 257 259 node.setAttributeNS(null, "points", this.getComponentsString(geometry.components)); … … 260 262 /** 261 263 * @param {DOMElement} node 262 264 * @param {OpenLayers.Geometry} geometry 265 * @private 263 266 */ 264 267 drawPolygon: function(node, geometry) { 265 268 var d = ""; … … 279 282 /** 280 283 * @param {DOMElement} node 281 284 * @param {OpenLayers.Geometry} geometry 285 * @private 282 286 */ 283 287 drawRectangle: function(node, geometry) { 284 288 node.setAttributeNS(null, "x", geometry.x / resolution); … … 291 295 /** 292 296 * @param {DOMElement} node 293 297 * @param {OpenLayers.Geometry} geometry 298 * @private 294 299 */ 295 300 drawCurve: function(node, geometry) { 296 301 var d = null; … … 309 314 /** 310 315 * @param {DOMElement} node 311 316 * @param {OpenLayers.Geometry} geometry 317 * @private 312 318 */ 313 319 drawSurface: function(node, geometry) { 314 320 … … 329 335 330 336 /** 331 337 * @param {Array} components array of points 338 * @private 332 339 */ 333 340 getComponentsString: function(components) { 334 341 var strings = []; … … 341 348 342 349 /** 343 350 * @param {OpenLayers.Geometry.Point} point 351 * @private 344 352 */ 345 353 getShortString: function(point) { 346 354 var resolution = this.getResolution(); -
lib/OpenLayers/Geometry.js
old new 19 19 20 20 /** @type OpenLayers.Bounds */ 21 21 bounds: null, 22 23 /**24 * Cross reference back to the feature that owns this geometry so25 * that that the feature can be identified after the geometry has been26 * selected by a mouse click.27 *28 * @type OpenLayers.Feature */29 feature: null,30 22 31 23 /** 32 24 * @constructor … … 42 34 this.id = null; 43 35 44 36 this.bounds = null; 45 this.feature = null;46 37 47 38 }, 48 39 -
lib/OpenLayers/Layer/Vector.js
old new 21 21 /** @type Boolean */ 22 22 isVector: true, 23 23 24 /** @type {Array(OpenLayer.Feature.Vector)}*/24 /** @type Array(OpenLayer.Feature.Vector) */ 25 25 features: null, 26 26 27 /** @type {Array(OpenLayers.Feature.Vector)}*/27 /** @type Array(OpenLayers.Feature.Vector) */ 28 28 selectedFeatures: [], 29 29 30 30 /** @type {Boolean} */ 31 editing: false,32 33 /** @type {Boolean} */34 editable: false,35 36 /** @type {Boolean} */37 31 reportError: true, 38 32 39 33 /** @type {Object} */ … … 75 69 * Options renderer {Object}: Typically SVGRenderer or VMLRenderer. 76 70 */ 77 71 initialize: function(name, options) { 72 this.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 78 73 OpenLayers.Layer.prototype.initialize.apply(this, arguments); 79 74 80 75 // allow user-set renderer, otherwise assign one … … 102 97 // calling feature[i].destroy() here. 103 98 this.features = null; 104 99 this.selectedFeatures = null; 105 this.editing = null;106 this.editable = null;107 100 if (this.renderer) { 108 101 this.renderer.destroy(); 109 102 } … … 172 165 /** Reset the vector layer's div so that it once again is lined up with 173 166 * the map. Notify the renderer of the change of extent, and in the 174 167 * case of a change of zoom level (resolution), have the 175 * renderer re project.168 * renderer redraw features. 176 169 * 177 170 * If the layer has not yet been drawn, cycle through the layer's 178 171 * features and draw each one. … … 191 184 this.renderer.setExtent(extent); 192 185 } 193 186 194 if (zoomChanged) { 195 this.renderer.reproject(); 196 } 197 198 if (!this.drawn) { 187 if (!this.drawn || zoomChanged) { 199 188 this.drawn = true; 200 189 for(var i = 0; i < this.features.length; i++) { 201 190 var feature = this.features[i]; 202 this. renderer.drawGeometry(feature.geometry, feature.style);191 this.drawFeature(feature); 203 192 } 204 193 } 205 194 }, … … 228 217 feature.layer = this; 229 218 230 219 if (!feature.style) { 231 if (this.style) { 232 feature.style = OpenLayers.Util.extend({}, this.style); 233 } else { 234 feature.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 235 } 220 feature.style = OpenLayers.Util.extend({}, this.style); 236 221 } 237 222 238 223 this.preFeatureInsert(feature); 239 224 240 225 if (this.drawn) { 241 this. renderer.drawGeometry(feature.geometry, feature.style);226 this.drawFeature(feature); 242 227 } 243 228 244 229 this.onFeatureInsert(feature); … … 271 256 }, 272 257 273 258 /** 274 * @param {String} fid 259 * Draw (or redraw) a feature on the layer. If the optional style argument 260 * is included, this style will be used. If no style is included, the 261 * feature's style will be used. If the feature doesn't have a style, 262 * the layer's style will be used. 263 * 264 * @param {OpenLayers.Feature.Vector} feature 275 265 * @param {Object} style 276 266 */ 277 redrawFeature: function(fid, style) { 278 for (var i = 0; i < this.features.length; i++) { 279 var feature = this.features[i]; 280 if (feature.fid == fid) { 281 this.renderer.drawGeometry(feature.geometry, style); 267 drawFeature: function(feature, style) { 268 if(style == null) { 269 if(feature.style) { 270 style = feature.style; 271 } else { 272 style = this.style; 282 273 } 283 274 } 275 this.renderer.drawFeature(feature, style); 284 276 }, 285 277 286 278 /** 287 * Start editing the layer 288 * 289 * @returns Whether or not the layer is editable 290 * @type Boolean 279 * Given an event, return a feature if the event occurred over one. 280 * Otherwise, return null. 281 * 282 * @param {Event} 283 * @type OpenLayers.Feature.Vector 284 * @return A feature if one was under the event 291 285 */ 292 unlock: function() { 293 if(this.editable) { 294 this.editing = true; 295 } 296 return this.editable; 286 getFeatureFromEvent: function(evt) { 287 var featureId = this.renderer.getFeatureIdFromEvent(evt); 288 return this.getFeatureById(featureId); 297 289 }, 298 290 299 291 /** 300 * Stop editing the layer292 * Given a feature id, return the feature if it exists in the features array 301 293 * 302 * @ return Whether or not the layer *was* editing303 * HACK HACK This return value seems wierd to me.304 * @ type Boolean294 * @param String featureId 295 * @type OpenLayers.Feature.Vector 296 * @return A feature corresponding to the given featureId 305 297
