#655: add layer.eraseFeatures.patch() on the "public" side of the API - layer methods should be called instead of layer.renderer methods wherever possible

git-svn-id: http://svn.openlayers.org/trunk/openlayers@3065 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2007-04-11 15:48:41 +00:00
parent dbac2b1c83
commit b02522ea4c
4 changed files with 60 additions and 20 deletions

View File

@@ -279,6 +279,15 @@ OpenLayers.Layer.Vector.prototype =
this.renderer.drawFeature(feature, style); this.renderer.drawFeature(feature, style);
}, },
/**
* Erase features from the layer.
*
* @param {Array(OpenLayers.Feature.Vector)} features
*/
eraseFeatures: function(features) {
this.renderer.eraseFeatures(features);
},
/** /**
* Given an event, return a feature if the event occurred over one. * Given an event, return a feature if the event occurred over one.
* Otherwise, return null. * Otherwise, return null.

View File

@@ -109,13 +109,19 @@ OpenLayers.Renderer.prototype =
/** /**
* Draw the feature. The optional style argument can be used * Draw the feature. The optional style argument can be used
* to override the feature's own style. This method should only * to override the feature's own style. This method should only
* be called from layer.drawFeature(). Implemented by a renderer * be called from layer.drawFeature().
* subclass.
* *
* @param {OpenLayers.Feature.Vector} feature * @param {OpenLayers.Feature.Vector} feature
* @param {Object} style * @param {Object} style
* @private
*/ */
drawFeature: function(feature, style) {}, drawFeature: function(feature, style) {
if(style == null) {
style = feature.style;
}
this.drawGeometry(feature.geometry, style, feature.id);
},
/** /**
* virtual function * virtual function
@@ -125,15 +131,16 @@ OpenLayers.Renderer.prototype =
* *
* @param geometry {OpenLayers.Geometry} * @param geometry {OpenLayers.Geometry}
* @param style {Object} * @param style {Object}
* @param {String} featureId
* @private * @private
*/ */
drawGeometry: function(geometry, style) {}, drawGeometry: function(geometry, style, featureId) {},
/** /**
* virtual function * virtual function
* *
* Clear all vectors from the renderer * Clear all vectors from the renderer
* * @private
*/ */
clear: function() {}, clear: function() {},
@@ -152,12 +159,27 @@ OpenLayers.Renderer.prototype =
*/ */
getFeatureIdFromEvent: function(evt) {}, getFeatureIdFromEvent: function(evt) {},
/**
* This is called by the layer to erase features
* @param {Array(OpenLayers.Feature.Vector)} features
* @private
*/
eraseFeatures: function(features) {
if(!(features instanceof Array)) {
features = [features];
}
for(var i=0; i<features.length; ++i) {
this.eraseGeometry(features[i].geometry);
}
},
/** /**
* virtual function * virtual function
* *
* Remove a geometry from the renderer (by id) * Remove a geometry from the renderer (by id)
* *
* @param geometry {OpenLayers.Geometry} * @param geometry {OpenLayers.Geometry}
* @private
*/ */
eraseGeometry: function(geometry) {}, eraseGeometry: function(geometry) {},

View File

@@ -86,21 +86,6 @@ OpenLayers.Renderer.Elements.prototype =
*/ */
getNodeType: function(geometry) { }, getNodeType: function(geometry) { },
/**
* Draw the feature. The optional style argument can be used
* to override the feature's own style. This method should only
* be called from layer.drawFeature().
*
* @param {OpenLayers.Feature.Vector} feature
* @param {Object} style
*/
drawFeature: function(feature, style) {
if(style == null) {
style = feature.style;
}
this.drawGeometry(feature.geometry, style, feature.id);
},
/** /**
* Draw the geometry, creating new nodes, setting paths, setting style, * Draw the geometry, creating new nodes, setting paths, setting style,
* setting featureId on the node. This method should only be called * setting featureId on the node. This method should only be called
@@ -206,6 +191,7 @@ OpenLayers.Renderer.Elements.prototype =
* *
* @returns A geometry from an event that happened on a layer * @returns A geometry from an event that happened on a layer
* @type OpenLayers.Geometry * @type OpenLayers.Geometry
* @private
*/ */
getFeatureIdFromEvent: function(evt) { getFeatureIdFromEvent: function(evt) {
var node = evt.target || evt.srcElement; var node = evt.target || evt.srcElement;
@@ -218,6 +204,7 @@ OpenLayers.Renderer.Elements.prototype =
* the DOM. * the DOM.
* *
* @param {OpenLayers.Geometry} geometry * @param {OpenLayers.Geometry} geometry
* @private
*/ */
eraseGeometry: function(geometry) { eraseGeometry: function(geometry) {
if ((geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPoint") || if ((geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPoint") ||
@@ -252,6 +239,7 @@ OpenLayers.Renderer.Elements.prototype =
* *
* @returns A new node of the given type and id * @returns A new node of the given type and id
* @type DOMElement * @type DOMElement
* @private
*/ */
nodeFactory: function(id, type, geometry) { nodeFactory: function(id, type, geometry) {
var node = $(id); var node = $(id);

View File

@@ -100,6 +100,27 @@
} }
function test_Layer_Vector_eraseFeatures(t) {
t.plan(2);
var layer = new OpenLayers.Layer.Vector("Test Layer");
var map = new OpenLayers.Map('map');
map.addLayer(layer);
var geometry = new OpenLayers.Geometry.Point(10, 10);
var feature = new OpenLayers.Feature.Vector(geometry);
var f;
layer.renderer = {
eraseFeatures: function(features) {
f = features[0];
}
};
layer.eraseFeatures([feature]);
t.ok(f, "calls layer.renderer.eraseFeatures");
t.ok(geometry.equals(f.geometry),
"calls layer.renderer.eraseFeatures() given an array of features");
}
function test_Layer_Vector_destroyFeatures (t) { function test_Layer_Vector_destroyFeatures (t) {
t.plan(2); t.plan(2);
layer = new OpenLayers.Layer.Vector(name); layer = new OpenLayers.Layer.Vector(name);