Layer.Vector fires featuresadded event with shapes vetoed by beforefeatureadded, p=timbonicus, r=me (closes #2549)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10362 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -539,7 +539,9 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
features = event.features;
|
features = event.features;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Track successfully added features for featuresadded event, since
|
||||||
|
// beforefeatureadded can veto single features.
|
||||||
|
var featuresAdded = [];
|
||||||
for (var i=0, len=features.length; i<len; i++) {
|
for (var i=0, len=features.length; i<len; i++) {
|
||||||
if (i != (features.length - 1)) {
|
if (i != (features.length - 1)) {
|
||||||
this.renderer.locked = true;
|
this.renderer.locked = true;
|
||||||
@@ -555,8 +557,6 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
throw throwStr;
|
throw throwStr;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.features.push(feature);
|
|
||||||
|
|
||||||
//give feature reference to its layer
|
//give feature reference to its layer
|
||||||
feature.layer = this;
|
feature.layer = this;
|
||||||
|
|
||||||
@@ -572,6 +572,8 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
this.preFeatureInsert(feature);
|
this.preFeatureInsert(feature);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
featuresAdded.push(feature);
|
||||||
|
this.features.push(feature);
|
||||||
this.drawFeature(feature);
|
this.drawFeature(feature);
|
||||||
|
|
||||||
if (notify) {
|
if (notify) {
|
||||||
@@ -583,7 +585,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(notify) {
|
if(notify) {
|
||||||
this.events.triggerEvent("featuresadded", {features: features});
|
this.events.triggerEvent("featuresadded", {features: featuresAdded});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -643,6 +643,52 @@
|
|||||||
map.destroy();
|
map.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_vectorBeforeFeatureAddedVeto(t) {
|
||||||
|
t.plan( 4 );
|
||||||
|
|
||||||
|
var map = new OpenLayers.Map('map');
|
||||||
|
layer = new OpenLayers.Layer.Vector("");
|
||||||
|
map.addLayer(layer);
|
||||||
|
var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry(1.0, 1.0));
|
||||||
|
layer.addFeatures([feature]);
|
||||||
|
|
||||||
|
var addedFeatures = [];
|
||||||
|
var beforefeatureadded_veto = function(evt) { return false; };
|
||||||
|
layer.events.register("beforefeatureadded", layer, beforefeatureadded_veto);
|
||||||
|
layer.events.register("featuresadded", layer, function(evt) {
|
||||||
|
if (evt.features) {
|
||||||
|
for (var i = 0; i < evt.features.length; i++) {
|
||||||
|
addedFeatures.push(evt.features[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var blankFeatures = [
|
||||||
|
new OpenLayers.Feature.Vector(new OpenLayers.Geometry(1.0, 1.0)),
|
||||||
|
new OpenLayers.Feature.Vector(new OpenLayers.Geometry(1.0, 1.0))];
|
||||||
|
layer.addFeatures(blankFeatures);
|
||||||
|
|
||||||
|
t.eq(layer.features.length, 1,
|
||||||
|
"features not added to layer after beforefeatureadded veto");
|
||||||
|
t.eq(addedFeatures.length, 0,
|
||||||
|
"no features sent to featuresadded on feature veto");
|
||||||
|
|
||||||
|
addedFeatures = [];
|
||||||
|
|
||||||
|
layer.events.unregister("beforefeatureadded", layer, beforefeatureadded_veto);
|
||||||
|
beforefeatureadded_veto = function(evt) { return true; };
|
||||||
|
layer.events.register("beforefeatureadded", layer, beforefeatureadded_veto);
|
||||||
|
|
||||||
|
layer.addFeatures(blankFeatures);
|
||||||
|
|
||||||
|
t.eq(layer.features.length, 3,
|
||||||
|
"features added to layer as expected");
|
||||||
|
t.eq(addedFeatures.length, 2,
|
||||||
|
"featuresadded event received expected number of features");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
Reference in New Issue
Block a user