Merge pull request #708 from mpriour/displayEvent
Fire the 'changelayer:visibility' event from layer's display method
This commit is contained in:
@@ -736,12 +736,6 @@ OpenLayers.Layer = OpenLayers.Class({
|
|||||||
this.visibility = visibility;
|
this.visibility = visibility;
|
||||||
this.display(visibility);
|
this.display(visibility);
|
||||||
this.redraw();
|
this.redraw();
|
||||||
if (this.map != null) {
|
|
||||||
this.map.events.triggerEvent("changelayer", {
|
|
||||||
layer: this,
|
|
||||||
property: "visibility"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.events.triggerEvent("visibilitychanged");
|
this.events.triggerEvent("visibilitychanged");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -758,6 +752,11 @@ OpenLayers.Layer = OpenLayers.Class({
|
|||||||
display: function(display) {
|
display: function(display) {
|
||||||
if (display != (this.div.style.display != "none")) {
|
if (display != (this.div.style.display != "none")) {
|
||||||
this.div.style.display = (display && this.calculateInRange()) ? "block" : "none";
|
this.div.style.display = (display && this.calculateInRange()) ? "block" : "none";
|
||||||
|
if(this.map){
|
||||||
|
this.map.events.triggerEvent("changelayer", {
|
||||||
|
layer: this, property: "visibility"
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -1976,9 +1976,7 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
if (!inRange) {
|
if (!inRange) {
|
||||||
layer.display(false);
|
layer.display(false);
|
||||||
}
|
}
|
||||||
this.events.triggerEvent("changelayer", {
|
|
||||||
layer: layer, property: "visibility"
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
if (inRange && layer.visibility) {
|
if (inRange && layer.visibility) {
|
||||||
layer.moveTo(bounds, zoomChanged, options.dragging);
|
layer.moveTo(bounds, zoomChanged, options.dragging);
|
||||||
|
|||||||
@@ -858,6 +858,44 @@
|
|||||||
"setOpacity() does not trigger changelayer if the opacity value is the same");
|
"setOpacity() does not trigger changelayer if the opacity value is the same");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_display(t) {
|
||||||
|
t.plan(9);
|
||||||
|
|
||||||
|
var map, layer, log;
|
||||||
|
|
||||||
|
map = new OpenLayers.Map("map");
|
||||||
|
layer = new OpenLayers.Layer("", {
|
||||||
|
alwaysInRange: true,
|
||||||
|
visibility: true
|
||||||
|
});
|
||||||
|
map.addLayer(layer);
|
||||||
|
|
||||||
|
log = [];
|
||||||
|
map.events.register('changelayer', t, function(event) {
|
||||||
|
log.push({
|
||||||
|
layer: event.layer,
|
||||||
|
property: event.property
|
||||||
|
});
|
||||||
|
});
|
||||||
|
layer.display(false);
|
||||||
|
t.eq(layer.div.style.display, "none", "display() set layer's display style to correct value");
|
||||||
|
t.eq(layer.getVisibility(), true, "display() does not affect layer's visibility state");
|
||||||
|
t.eq(log.length, 1, "display() triggers changelayer once");
|
||||||
|
t.ok(log[0].layer == layer, "changelayer listener called with expected layer");
|
||||||
|
t.eq(log[0].property, "visibility", "changelayer listener called with expected property");
|
||||||
|
layer.visibility = false;
|
||||||
|
layer.display(true);
|
||||||
|
t.eq(layer.div.style.display, "block", "display() set layer's display style to correct value");
|
||||||
|
t.eq(layer.getVisibility(), false, "display() does not affect layer's visibility state");
|
||||||
|
layer.setVisibility(true);
|
||||||
|
|
||||||
|
// This call must not trig the event because the opacity value is the same.
|
||||||
|
log = [];
|
||||||
|
layer.display(true);
|
||||||
|
t.eq(log.length, 0, "display() does not trigger changelayer if the display value is the same");
|
||||||
|
layer.setVisibility(false);
|
||||||
|
t.eq(log.length, 1, "changelayer event called only once. setVisibility doesn't fire any extra changelayer events");
|
||||||
|
}
|
||||||
|
|
||||||
/******
|
/******
|
||||||
*
|
*
|
||||||
|
|||||||
+19
-1
@@ -977,13 +977,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_Map_moveTo(t) {
|
function test_Map_moveTo(t) {
|
||||||
t.plan(2);
|
t.plan(8);
|
||||||
|
|
||||||
map = new OpenLayers.Map('map');
|
map = new OpenLayers.Map('map');
|
||||||
var baseLayer = new OpenLayers.Layer.WMS("Test Layer",
|
var baseLayer = new OpenLayers.Layer.WMS("Test Layer",
|
||||||
"http://octo.metacarta.com/cgi-bin/mapserv?",
|
"http://octo.metacarta.com/cgi-bin/mapserv?",
|
||||||
{map: "/mapdata/vmap_wms.map", layers: "basic"},
|
{map: "/mapdata/vmap_wms.map", layers: "basic"},
|
||||||
{maxResolution: 'auto', maxExtent: new OpenLayers.Bounds(-10,-10,10,10)});
|
{maxResolution: 'auto', maxExtent: new OpenLayers.Bounds(-10,-10,10,10)});
|
||||||
|
var testLayer = new OpenLayers.Layer("",{maxResolution: 0.1, minResolution: 0.03, isBaseLayer: false, visibility: true});
|
||||||
|
var log = [];
|
||||||
|
map.events.register('changelayer', t, function(event) {
|
||||||
|
log.push({
|
||||||
|
layer: event.layer,
|
||||||
|
property: event.property
|
||||||
|
});
|
||||||
|
});
|
||||||
baseLayer.events.on({
|
baseLayer.events.on({
|
||||||
move: function() {
|
move: function() {
|
||||||
t.ok(true, "move listener called");
|
t.ok(true, "move listener called");
|
||||||
@@ -993,10 +1001,20 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
map.addLayer(baseLayer);
|
map.addLayer(baseLayer);
|
||||||
|
map.addLayer(testLayer);
|
||||||
|
log = [];
|
||||||
var ll = new OpenLayers.LonLat(-100,-150);
|
var ll = new OpenLayers.LonLat(-100,-150);
|
||||||
map.moveTo(ll, 2);
|
map.moveTo(ll, 2);
|
||||||
|
|
||||||
t.ok(map.getCenter().equals(new OpenLayers.LonLat(0,0)), "safely sets out-of-bounds lonlat");
|
t.ok(map.getCenter().equals(new OpenLayers.LonLat(0,0)), "safely sets out-of-bounds lonlat");
|
||||||
|
t.eq(testLayer.div.style.display, "none", "moveTo out of resolution range set layer's display style to correct value");
|
||||||
|
t.eq(log.length, 1, "Map.moveTo out of resolution range triggers changelayer once");
|
||||||
|
t.ok(log[0].layer == testLayer, "changelayer listener called with expected layer");
|
||||||
|
t.eq(log[0].property, "visibility", "changelayer listener called with expected property");
|
||||||
|
|
||||||
|
map.moveTo(new OpenLayers.LonLat(0,0), 0);
|
||||||
|
t.eq(testLayer.div.style.display, "block", "moveTo in to resolution range set layer's display style to correct value");
|
||||||
|
|
||||||
map.destroy();
|
map.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user