From 73d2825c4e75b36dc20a2fe4d62d2708514c4b40 Mon Sep 17 00:00:00 2001 From: crschmidt Date: Sat, 4 Aug 2007 12:14:32 +0000 Subject: [PATCH] Commiting fix for #716, "Make LayerSwitcher support displayInLayerSwitcher for Base Layers", reviewed by Erik, tested by tschaub. git-svn-id: http://svn.openlayers.org/trunk/openlayers@3853 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- examples/layerswitcher.html | 9 +++++++-- lib/OpenLayers/Control/LayerSwitcher.js | 26 +++++++++++++++---------- tests/Control/test_LayerSwitcher.html | 25 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 12 deletions(-) diff --git a/examples/layerswitcher.html b/examples/layerswitcher.html index 909e05dcfb..3cf070a261 100644 --- a/examples/layerswitcher.html +++ b/examples/layerswitcher.html @@ -17,11 +17,11 @@ var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", - {layers: 'basic'} ); + {layers: 'basic'}, {'displayInLayerSwitcher':false} ); var jpl_wms = new OpenLayers.Layer.WMS( "NASA Global Mosaic", "http://wms.jpl.nasa.gov/wms.cgi", - {layers: "modis,global_mosaic"}); + {layers: "modis,global_mosaic"}, {'isBaseLayer': false}); var dm_wms = new OpenLayers.Layer.WMS( "DM Solutions Demo", "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap", @@ -42,5 +42,10 @@

OpenLayers Example

+
+

This demonstrates use of the LayerSwitcher outside the map div. It also shows use + of the displayInLayerSwitcher option on the Layer to cause it to not display in the + LayerSwitcher.

+
diff --git a/lib/OpenLayers/Control/LayerSwitcher.js b/lib/OpenLayers/Control/LayerSwitcher.js index 8e03aa59ed..c46572a9c4 100644 --- a/lib/OpenLayers/Control/LayerSwitcher.js +++ b/lib/OpenLayers/Control/LayerSwitcher.js @@ -185,6 +185,7 @@ OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { this.clearLayersArray("data"); var containsOverlays = false; + var containsBaseLayers = false; var layers = this.map.layers.slice(); if (!this.ascending) { layers.reverse(); } @@ -192,11 +193,13 @@ OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { var layer = layers[i]; var baseLayer = layer.isBaseLayer; - if (baseLayer || layer.displayInLayerSwitcher) { + if (layer.displayInLayerSwitcher) { - if (!baseLayer) { + if (baseLayer) { + containsBaseLayers = true; + } else { containsOverlays = true; - } + } // only check a baselayer if it is *the* baselayer, check data // layers if they are visible @@ -256,6 +259,9 @@ OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { // if no overlays, dont display the overlay label this.dataLbl.style.display = (containsOverlays) ? "" : "none"; + + // if no baselayers, dont display the baselayer label + this.baseLbl.style.display = (containsBaseLayers) ? "" : "none"; return this.div; }, @@ -426,11 +432,11 @@ OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { this.layersDiv.style.height = "100%"; - var baseLbl = document.createElement("div"); - baseLbl.innerHTML = "Base Layer"; - baseLbl.style.marginTop = "3px"; - baseLbl.style.marginLeft = "3px"; - baseLbl.style.marginBottom = "3px"; + this.baseLbl = document.createElement("div"); + this.baseLbl.innerHTML = "Base Layer"; + this.baseLbl.style.marginTop = "3px"; + this.baseLbl.style.marginLeft = "3px"; + this.baseLbl.style.marginBottom = "3px"; this.baseLayersDiv = document.createElement("div"); this.baseLayersDiv.style.paddingLeft = "10px"; @@ -449,14 +455,14 @@ OpenLayers.Control.LayerSwitcher = OpenLayers.Class(OpenLayers.Control, { this.dataLayersDiv.style.paddingLeft = "10px"; if (this.ascending) { - this.layersDiv.appendChild(baseLbl); + this.layersDiv.appendChild(this.baseLbl); this.layersDiv.appendChild(this.baseLayersDiv); this.layersDiv.appendChild(this.dataLbl); this.layersDiv.appendChild(this.dataLayersDiv); } else { this.layersDiv.appendChild(this.dataLbl); this.layersDiv.appendChild(this.dataLayersDiv); - this.layersDiv.appendChild(baseLbl); + this.layersDiv.appendChild(this.baseLbl); this.layersDiv.appendChild(this.baseLayersDiv); } diff --git a/tests/Control/test_LayerSwitcher.html b/tests/Control/test_LayerSwitcher.html index cf8140880a..b45697333a 100644 --- a/tests/Control/test_LayerSwitcher.html +++ b/tests/Control/test_LayerSwitcher.html @@ -115,6 +115,31 @@ t.ok(control2.div.childNodes[1].childNodes[2].innerHTML.match("Base Layer"), "Base Layers last in LayerSwitcher with ascending false"); t.ok(control2.div.childNodes[1].childNodes[0].innerHTML.match("Overlays"), "Base Layers last in LayerSwitcher with ascending false"); } + + function test_Control_LayerSwitcher_displayInLayerSwitcher (t) { + + t.plan( 2 ); + + map = new OpenLayers.Map('map'); + var layer = new OpenLayers.Layer.WMS("WMS", + "http://octo.metacarta.com/cgi-bin/mapserv?", + {map: "/mapdata/vmap_wms.map", layers: "basic"}, {'displayInLayerSwitcher': false}); + map.addLayer(layer); + + control = new OpenLayers.Control.LayerSwitcher(); + map.addControl(control); + t.eq(control.div.childNodes[1].childNodes[0].style.display, "none" , "Base layer display off when no visble base layer"); + + map = new OpenLayers.Map('map'); + var layer = new OpenLayers.Layer.WMS("WMS", + "http://octo.metacarta.com/cgi-bin/mapserv?", + {map: "/mapdata/vmap_wms.map", layers: "basic"}); + map.addLayer(layer); + + control = new OpenLayers.Control.LayerSwitcher(); + map.addControl(control); + t.eq(control.div.childNodes[1].childNodes[0].style.display, "" , "Base layer display on when visble base layer"); + } // -->