Add map.getNumLayers(), map.getLayerIndex(), map.setLayerIndex(), map.raiseLayer() to support moving layers up and down in the map stack.
git-svn-id: http://svn.openlayers.org/trunk/openlayers@1604 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -255,14 +255,23 @@ OpenLayers.Map.prototype = {
|
|||||||
return foundLayer;
|
return foundLayer;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {OpenLayers.Layer} layer
|
||||||
|
* @param {int} zIdx
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
setLayerZIndex: function (layer, zIdx) {
|
||||||
|
layer.div.style.zIndex =
|
||||||
|
this.Z_INDEX_BASE[layer.isBaseLayer ? 'BaseLayer' : 'Overlay']
|
||||||
|
+ zIdx * 5;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {OpenLayers.Layer} layer
|
* @param {OpenLayers.Layer} layer
|
||||||
*/
|
*/
|
||||||
addLayer: function (layer) {
|
addLayer: function (layer) {
|
||||||
layer.div.style.overflow = "";
|
layer.div.style.overflow = "";
|
||||||
layer.div.style.zIndex =
|
this.setLayerZIndex(layer, this.layers.length);
|
||||||
this.Z_INDEX_BASE[layer.isBaseLayer ? 'BaseLayer' : 'Overlay']
|
|
||||||
+ this.layers.length * 5;
|
|
||||||
|
|
||||||
if (layer.isFixed) {
|
if (layer.isFixed) {
|
||||||
this.viewPortDiv.appendChild(layer.div);
|
this.viewPortDiv.appendChild(layer.div);
|
||||||
@@ -346,6 +355,62 @@ OpenLayers.Map.prototype = {
|
|||||||
}
|
}
|
||||||
this.events.triggerEvent("removelayer");
|
this.events.triggerEvent("removelayer");
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns The number of layers attached to the map.
|
||||||
|
* @type int
|
||||||
|
*/
|
||||||
|
getNumLayers: function () {
|
||||||
|
return this.layers.length;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns The current (zero-based) index of the given layer in the map's
|
||||||
|
* layer stack. Returns -1 if the layer isn't on the map.
|
||||||
|
*
|
||||||
|
* @param {OpenLayers.Layer} layer
|
||||||
|
* @type int
|
||||||
|
*/
|
||||||
|
getLayerIndex: function (layer) {
|
||||||
|
return OpenLayers.Util.indexOf(this.layers, layer);
|
||||||
|
},
|
||||||
|
|
||||||
|
/** Move the given layer to the specified (zero-based) index in the layer
|
||||||
|
* list, changing its z-index in the map display. Use
|
||||||
|
* map.getLayerIndex() to find out the current index of a layer. Note
|
||||||
|
* that this cannot (or at least should not) be effectively used to
|
||||||
|
* raise base layers above overlays.
|
||||||
|
*
|
||||||
|
* @param {OpenLayers.Layer} layer
|
||||||
|
* @param {int} idx
|
||||||
|
*/
|
||||||
|
setLayerIndex: function (layer, idx) {
|
||||||
|
var base = this.getLayerIndex(layer);
|
||||||
|
if (idx < 0)
|
||||||
|
idx = 0;
|
||||||
|
else if (idx > this.layers.length)
|
||||||
|
idx = this.layers.length;
|
||||||
|
if (base != idx) {
|
||||||
|
this.layers.splice(base, 1);
|
||||||
|
this.layers.splice(idx, 0, layer);
|
||||||
|
for (var i = 0; i < this.layers.length; i++)
|
||||||
|
this.setLayerZIndex(this.layers[i], i);
|
||||||
|
this.events.triggerEvent("changelayer");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/** Change the index of the given layer by delta. If delta is positive,
|
||||||
|
* the layer is moved up the map's layer stack; if delta is negative,
|
||||||
|
* the layer is moved down. Again, note that this cannot (or at least
|
||||||
|
* should not) be effectively used to raise base layers above overlays.
|
||||||
|
*
|
||||||
|
* @param {OpenLayers.Layer} layer
|
||||||
|
* @param {int} idx
|
||||||
|
*/
|
||||||
|
raiseLayer: function (layer, delta) {
|
||||||
|
var idx = this.getLayerIndex(layer) + delta;
|
||||||
|
this.setLayerIndex(layer, idx);
|
||||||
|
},
|
||||||
|
|
||||||
/** Allows user to specify one of the currently-loaded layers as the Map's
|
/** Allows user to specify one of the currently-loaded layers as the Map's
|
||||||
* new base layer.
|
* new base layer.
|
||||||
|
|||||||
@@ -248,8 +248,47 @@
|
|||||||
t.ok(map.baseLayer == wmslayer2, "setbaselayer correctly sets 'baseLayer' property");
|
t.ok(map.baseLayer == wmslayer2, "setbaselayer correctly sets 'baseLayer' property");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_12_Map_moveLayer (t) {
|
||||||
|
t.plan(10);
|
||||||
|
var ct = 0;
|
||||||
|
map = new OpenLayers.Map($('map'));
|
||||||
|
var wmslayer = new OpenLayers.Layer.WMS('Test Layer',
|
||||||
|
"http://octo.metacarta.com/cgi-bin/mapserv",
|
||||||
|
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'},
|
||||||
|
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } );
|
||||||
|
|
||||||
|
var wmslayer2 = new OpenLayers.Layer.WMS('Test Layer2',
|
||||||
|
"http://octo.metacarta.com/cgi-bin/mapserv",
|
||||||
|
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'},
|
||||||
|
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } );
|
||||||
|
|
||||||
|
var wmslayer3 = new OpenLayers.Layer.WMS('Test Layer2',
|
||||||
|
"http://octo.metacarta.com/cgi-bin/mapserv",
|
||||||
|
{map: '/mapdata/vmap_wms.map', layers: 'basic', format: 'image/jpeg'},
|
||||||
|
{maxExtent: new OpenLayers.Bounds(33861, 717605, 330846, 1019656), maxResolution: 296985/1024, projection:"EPSG:2805" } );
|
||||||
|
|
||||||
|
map.addLayers([wmslayer, wmslayer2, wmslayer3]);
|
||||||
|
map.events.register("changelayer", map, function (e) { ct++; });
|
||||||
|
t.eq( map.getNumLayers(), 3, "getNumLayers returns the number of layers" );
|
||||||
|
t.eq( map.getLayerIndex(wmslayer3), 2, "getLayerIndex returns the right index" );
|
||||||
|
map.raiseLayer(wmslayer3, 1);
|
||||||
|
t.eq( map.getLayerIndex(wmslayer3), 2, "can't moveLayer up past the top of the stack" );
|
||||||
|
map.raiseLayer(wmslayer, -1);
|
||||||
|
t.eq( map.getLayerIndex(wmslayer), 0, "can't moveLayer down past the bottom of the stack" );
|
||||||
|
map.raiseLayer(wmslayer3, -1);
|
||||||
|
t.eq( map.getLayerIndex(wmslayer3), 1, "can moveLayer down from the top" );
|
||||||
|
t.eq( parseInt(wmslayer3.div.style.zIndex), map.Z_INDEX_BASE['BaseLayer'] + 5,
|
||||||
|
"layer div has the right zIndex after moving down" );
|
||||||
|
map.raiseLayer(wmslayer, 2);
|
||||||
|
t.eq( map.getLayerIndex(wmslayer), 2, "can moveLayer up from the bottom" );
|
||||||
|
t.eq( parseInt(wmslayer.div.style.zIndex), map.Z_INDEX_BASE['BaseLayer'] + 2 * 5,
|
||||||
|
"layer div has the right zIndex after moving up" );
|
||||||
|
t.eq( map.getLayerIndex(wmslayer3), 0, "top layer is now on the bottom" );
|
||||||
|
t.eq( ct, 3, "raiseLayer triggered changelayer the right # of times" );
|
||||||
|
}
|
||||||
|
|
||||||
function test_088_Map_setCenter(t) {
|
function test_08_Map_setCenter(t) {
|
||||||
t.plan(1);
|
t.plan(1);
|
||||||
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",
|
||||||
|
|||||||
Reference in New Issue
Block a user