From dc2cc625f3e7086729bfaa38d98c7abef48055d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 17 Dec 2007 14:36:39 +0000 Subject: [PATCH] Do not call preFeatureInsert() and onFeatureInsert() callbacks when the modify feature control and the regular polygon handler internally adds point geometries to the layer. This is accomplished by adding an 'options' argument to the addFeatures() method in Layer.Vector. If that options argument has the silent property set to true, then the preFeatureInsert() and onFeatureInsert() callbacks aren't called. Thanks tschaub and fredj for your input. Thanks crschmidt for the final review. (closes #1148) git-svn-id: http://svn.openlayers.org/trunk/openlayers@5470 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Control/ModifyFeature.js | 8 ++++---- lib/OpenLayers/Handler/RegularPolygon.js | 2 +- lib/OpenLayers/Layer/Vector.js | 13 ++++++++++--- tests/Layer/test_Vector.html | 19 ++++++++++++++++++- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/lib/OpenLayers/Control/ModifyFeature.js b/lib/OpenLayers/Control/ModifyFeature.js index 5cd7448285..003876a116 100644 --- a/lib/OpenLayers/Control/ModifyFeature.js +++ b/lib/OpenLayers/Control/ModifyFeature.js @@ -514,8 +514,8 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { } } collectComponentVertices.call(this, this.feature.geometry); - this.layer.addFeatures(this.vertices); - this.layer.addFeatures(this.virtualVertices); + this.layer.addFeatures(this.vertices, {silent: true}); + this.layer.addFeatures(this.virtualVertices, {silent: true}); }, /** @@ -534,7 +534,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { geometry.move(x, y); } this.dragHandle = origin; - this.layer.addFeatures([this.dragHandle]); + this.layer.addFeatures([this.dragHandle], {silent: true}); }, /** @@ -574,7 +574,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { } } this.radiusHandle = radius; - this.layer.addFeatures([this.radiusHandle]); + this.layer.addFeatures([this.radiusHandle], {silent: true}); }, /** diff --git a/lib/OpenLayers/Handler/RegularPolygon.js b/lib/OpenLayers/Handler/RegularPolygon.js index f90b214ae5..dde661fa50 100644 --- a/lib/OpenLayers/Handler/RegularPolygon.js +++ b/lib/OpenLayers/Handler/RegularPolygon.js @@ -216,7 +216,7 @@ OpenLayers.Handler.RegularPolygon = OpenLayers.Class(OpenLayers.Handler.Drag, { } this.feature = new OpenLayers.Feature.Vector(); this.createGeometry(); - this.layer.addFeatures([this.feature]); + this.layer.addFeatures([this.feature], {silent: true}); this.layer.drawFeature(this.feature, this.style); }, diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js index 2af80dad28..5197f02d32 100644 --- a/lib/OpenLayers/Layer/Vector.js +++ b/lib/OpenLayers/Layer/Vector.js @@ -242,11 +242,14 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, { * * Parameters: * features - {Array()} + * options - {Object} */ - addFeatures: function(features) { + addFeatures: function(features, options) { if (!(features instanceof Array)) { features = [features]; } + + var notify = !options || !options.silent; for (var i = 0; i < features.length; i++) { var feature = features[i]; @@ -267,13 +270,17 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, { feature.style = OpenLayers.Util.extend({}, this.style); } - this.preFeatureInsert(feature); + if (notify) { + this.preFeatureInsert(feature); + } if (this.drawn) { this.drawFeature(feature); } - this.onFeatureInsert(feature); + if (notify) { + this.onFeatureInsert(feature); + } } }, diff --git a/tests/Layer/test_Vector.html b/tests/Layer/test_Vector.html index 58427a5b1f..0bf96d92f2 100644 --- a/tests/Layer/test_Vector.html +++ b/tests/Layer/test_Vector.html @@ -16,16 +16,33 @@ } function test_02_Layer_Vector_addFeatures(t) { - t.plan(2); + t.plan(4); var layer = new OpenLayers.Layer.Vector(name); var point = new OpenLayers.Geometry.Point(-111.04, 45.68); var pointFeature = new OpenLayers.Feature.Vector(point); + + layer.preFeatureInsert = function(feature) { + t.ok(feature == pointFeature, "OpenLayers.Layer.Vector.addFeatures calls preFeatureInsert with the right arg"); + } + layer.onFeatureInsert = function(feature) { + t.ok(feature == pointFeature, "OpenLayers.Layer.Vector.addFeatures calls onFeatureInsert with the right arg"); + } + layer.addFeatures([pointFeature]); t.eq(layer.features.length, 1, "OpenLayers.Layer.Vector.addFeatures adds something to the array"); t.ok(layer.features[0] == pointFeature, "OpenLayers.Layer.Vector.addFeatures returns an array of features"); + + layer.preFeatureInsert = function(feature) { + t.fail("OpenLayers.Layer.Vector.addFeatures calls preFeatureInsert while it must not"); + } + layer.onFeatureInsert = function(feature) { + t.fail("OpenLayers.Layer.Vector.addFeatures calls onFeatureInsert while it must not"); + } + + layer.addFeatures([pointFeature], {silent: true}); } function test_03_Layer_Vector_removeFeatures(t) {