diff --git a/lib/OpenLayers/Control/SelectFeature.js b/lib/OpenLayers/Control/SelectFeature.js index e4d99f2faaa..fb7914e4b04 100644 --- a/lib/OpenLayers/Control/SelectFeature.js +++ b/lib/OpenLayers/Control/SelectFeature.js @@ -638,6 +638,33 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, { this.activate(); } }, + + /** + * APIMethod: addLayer + * Add a layer to the control, making the existing layers still selectable + * + * Parameters: + * layer - element + */ + addLayer: function( alayer ) { + var isActive = this.active; + this.deactivate(); + if (this.layers == null) { + if (this.layer != null) { + this.layers = [this.layer]; + this.layers.push(alayer); + } else { + this.layers = [alayer]; + } + } else { + this.layers.push(alayer); + } + this.initLayer(this.layers); + this.handlers.feature.layer = this.layer; + if (isActive) { + this.activate(); + } + }, CLASS_NAME: "OpenLayers.Control.SelectFeature" }); diff --git a/tests/Control/SelectFeature.html b/tests/Control/SelectFeature.html index 6e522e77f9f..e21f46098fc 100644 --- a/tests/Control/SelectFeature.html +++ b/tests/Control/SelectFeature.html @@ -623,6 +623,26 @@ t.eq(layer.selectedFeatures[0].id, 3, 'the remaining selected features is the one expected'); } + + function test_addLayer(t) { + t.plan(4); + + var layer = new OpenLayers.Layer.Vector(); + var layers = [new OpenLayers.Layer.Vector(), new OpenLayers.Layer.Vector()] + var layerToAdd = new OpenLayers.Layer.Vector(); + + var controlWithLayer = new OpenLayers.Control.SelectFeature(layer); + var controlWithLayers = new OpenLayers.Control.SelectFeature(layers); + + controlWithLayer.addLayer(layerToAdd); + controlWithLayers.addLayer(layerToAdd); + + t.eq(controlWithLayer.layers.length, 2, "the added layer is added and all layers are active"); + t.eq(controlWithLayers.layers.length, 3, "the added layer is added and all layers are active"); + + t.eq(controlWithLayer.layer.length, null, "layer is empty"); + t.eq(controlWithLayers.layer.length, null, "layer is empty"); + }