Give OpenLayers.Map a preremovelayer-event. Thanks to mosesonline for the patch. p=mosesonline, r=me (fixes #3306)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@12154 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
+14
-5
@@ -58,9 +58,14 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
* Supported map event types:
|
* Supported map event types:
|
||||||
* - *preaddlayer* triggered before a layer has been added. The event
|
* - *preaddlayer* triggered before a layer has been added. The event
|
||||||
* object will include a *layer* property that references the layer
|
* object will include a *layer* property that references the layer
|
||||||
* to be added.
|
* to be added. When a listener returns "false" the adding will be
|
||||||
|
* aborted.
|
||||||
* - *addlayer* triggered after a layer has been added. The event object
|
* - *addlayer* triggered after a layer has been added. The event object
|
||||||
* will include a *layer* property that references the added layer.
|
* will include a *layer* property that references the added layer.
|
||||||
|
* - *preremovelayer* triggered before a layer has been removed. The event
|
||||||
|
* object will include a *layer* property that references the layer
|
||||||
|
* to be removed. When a listener returns "false" the removal will be
|
||||||
|
* aborted.
|
||||||
* - *removelayer* triggered after a layer has been removed. The event
|
* - *removelayer* triggered after a layer has been removed. The event
|
||||||
* object will include a *layer* property that references the removed
|
* object will include a *layer* property that references the removed
|
||||||
* layer.
|
* layer.
|
||||||
@@ -81,7 +86,8 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
* - *changebaselayer* triggered after the base layer changes
|
* - *changebaselayer* triggered after the base layer changes
|
||||||
*/
|
*/
|
||||||
EVENT_TYPES: [
|
EVENT_TYPES: [
|
||||||
"preaddlayer", "addlayer", "removelayer", "changelayer", "movestart",
|
"preaddlayer", "addlayer","preremovelayer", "removelayer",
|
||||||
|
"changelayer", "movestart",
|
||||||
"move", "moveend", "zoomend", "popupopen", "popupclose",
|
"move", "moveend", "zoomend", "popupopen", "popupclose",
|
||||||
"addmarker", "removemarker", "clearmarkers", "mouseover",
|
"addmarker", "removemarker", "clearmarkers", "mouseover",
|
||||||
"mouseout", "mousemove", "dragstart", "drag", "dragend",
|
"mouseout", "mousemove", "dragstart", "drag", "dragend",
|
||||||
@@ -957,13 +963,13 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.events.triggerEvent("preaddlayer", {layer: layer}) === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if(this.allOverlays) {
|
if(this.allOverlays) {
|
||||||
layer.isBaseLayer = false;
|
layer.isBaseLayer = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.events.triggerEvent("preaddlayer", {layer: layer}) === false) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
layer.div.className = "olLayerDiv";
|
layer.div.className = "olLayerDiv";
|
||||||
layer.div.style.overflow = "";
|
layer.div.style.overflow = "";
|
||||||
@@ -1034,6 +1040,9 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
* setNewBaseLayer - {Boolean} Default is true
|
* setNewBaseLayer - {Boolean} Default is true
|
||||||
*/
|
*/
|
||||||
removeLayer: function(layer, setNewBaseLayer) {
|
removeLayer: function(layer, setNewBaseLayer) {
|
||||||
|
if (this.events.triggerEvent("preremovelayer", {layer: layer}) === false) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (setNewBaseLayer == null) {
|
if (setNewBaseLayer == null) {
|
||||||
setNewBaseLayer = true;
|
setNewBaseLayer = true;
|
||||||
}
|
}
|
||||||
|
|||||||
+34
-1
@@ -802,7 +802,40 @@
|
|||||||
|
|
||||||
map.destroy();
|
map.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Map_removeLayer_preremovelayer(t) {
|
||||||
|
t.plan(4);
|
||||||
|
map = new OpenLayers.Map('map');
|
||||||
|
|
||||||
|
map.addLayer(new OpenLayers.Layer());
|
||||||
|
map.removeLayer(map.layers[0]);
|
||||||
|
|
||||||
|
// one test: standard behaviour without listener
|
||||||
|
t.eq(map.layers.length, 0, "without registered preremovelayer-listener layers can be removed as usual");
|
||||||
|
|
||||||
|
var callCnt = 0;
|
||||||
|
|
||||||
|
map.events.register('preremovelayer', this, function(evt) {
|
||||||
|
callCnt++;
|
||||||
|
return !(evt.layer.name === 'donotremove');
|
||||||
|
});
|
||||||
|
var layer1 = new OpenLayers.Layer('donotremove');
|
||||||
|
var layer2 = new OpenLayers.Layer('doremove');
|
||||||
|
|
||||||
|
map.addLayers([layer1,layer2]);
|
||||||
|
|
||||||
|
// two tests: remove action can be canceled
|
||||||
|
map.removeLayer(layer1);
|
||||||
|
t.eq(map.layers.length, 2, "layer is not removed since preremovelayer returns false");
|
||||||
|
map.removeLayer(layer2);
|
||||||
|
t.eq(map.layers.length, 1, "layer is removed since preremovelayer returns true");
|
||||||
|
|
||||||
|
// one test: listener was called twice
|
||||||
|
t.eq(callCnt, 2, "preremovelayer-listener was called exactly twice");
|
||||||
|
|
||||||
|
map.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
function test_Map_setBaseLayer_after_pan (t) {
|
function test_Map_setBaseLayer_after_pan (t) {
|
||||||
t.plan(1);
|
t.plan(1);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user