#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);
},
/**
* 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.
* Otherwise, return null.

View File

@@ -109,13 +109,19 @@ OpenLayers.Renderer.prototype =
/**
* 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(). Implemented by a renderer
* subclass.
* be called from layer.drawFeature().
*
* @param {OpenLayers.Feature.Vector} feature
* @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
@@ -125,15 +131,16 @@ OpenLayers.Renderer.prototype =
*
* @param geometry {OpenLayers.Geometry}
* @param style {Object}
* @param {String} featureId
* @private
*/
drawGeometry: function(geometry, style) {},
drawGeometry: function(geometry, style, featureId) {},
/**
* virtual function
*
* Clear all vectors from the renderer
*
* @private
*/
clear: function() {},
@@ -152,12 +159,27 @@ OpenLayers.Renderer.prototype =
*/
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
*
* Remove a geometry from the renderer (by id)
*
* @param geometry {OpenLayers.Geometry}
* @private
*/
eraseGeometry: function(geometry) {},

View File

@@ -86,21 +86,6 @@ OpenLayers.Renderer.Elements.prototype =
*/
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,
* 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
* @type OpenLayers.Geometry
* @private
*/
getFeatureIdFromEvent: function(evt) {
var node = evt.target || evt.srcElement;
@@ -218,6 +204,7 @@ OpenLayers.Renderer.Elements.prototype =
* the DOM.
*
* @param {OpenLayers.Geometry} geometry
* @private
*/
eraseGeometry: function(geometry) {
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
* @type DOMElement
* @private
*/
nodeFactory: function(id, type, geometry) {
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) {
t.plan(2);
layer = new OpenLayers.Layer.Vector(name);