[OpenLayers-Commits] r3114 - in sandbox/ominiverdi/openlayers: examples lib lib/OpenLayers/Control theme/default

commits at openlayers.org commits at openlayers.org
Thu May 3 05:48:52 EDT 2007


Author: ominiverdi
Date: 2007-05-03 05:48:51 -0400 (Thu, 03 May 2007)
New Revision: 3114

Added:
   sandbox/ominiverdi/openlayers/examples/wms_manager.html
   sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js
Modified:
   sandbox/ominiverdi/openlayers/lib/OpenLayers.js
   sandbox/ominiverdi/openlayers/theme/default/style.css
Log:
WMSManager (ticket #687): first upload

Added: sandbox/ominiverdi/openlayers/examples/wms_manager.html
===================================================================
--- sandbox/ominiverdi/openlayers/examples/wms_manager.html	                        (rev 0)
+++ sandbox/ominiverdi/openlayers/examples/wms_manager.html	2007-05-03 09:48:51 UTC (rev 3114)
@@ -0,0 +1,42 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <style type="text/css">
+        #map {
+            width: 800px;
+            height: 475px;
+            border: 1px solid black;
+        }
+    </style>
+	
+    <script src="../lib/OpenLayers.js"></script>
+    <script type="text/javascript">
+        <!--
+        
+        var map;
+
+        function init(){
+			//OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";//ominiverdi.org
+			OpenLayers.ProxyHost="/proxy/?url=";//openlayers.org
+           
+		    map = new OpenLayers.Map( $('map') );
+           
+			var aWMSServers=new Array(
+				['OpenLayers WMS','http://labs.metacarta.com/wms/vmap0'],
+				['NASA Blue Marble Next Generation','http://wms.jpl.nasa.gov/wms.cgi?']
+				
+				//['Localhost','http://localhost/cgi-bin/mapserv?map=mapfile/worldata.map']
+				//['OpenPlans WMS','http://sigma.openplans.org:3128/geoserver/wms']
+				
+			);
+
+            map.addControl( new OpenLayers.Control.WMSManager(aWMSServers) );
+			
+        }
+        
+        // -->
+    </script>
+  </head>
+  <body onload="init()">
+    <div id="map"></div>
+  </body>
+</html>

Added: sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js
===================================================================
--- sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js	                        (rev 0)
+++ sandbox/ominiverdi/openlayers/lib/OpenLayers/Control/WMSManager.js	2007-05-03 09:48:51 UTC (rev 3114)
@@ -0,0 +1,782 @@
+/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license.
+ * See http://svn.openlayers.org/trunk/openlayers/release-license.txt 
+ * for the full text of the license. */
+
+/** 
+ * @class
+ * 
+ * @author Lorenzo Becchi (ominiverdi.org)
+ * @projectDescription ticket #687
+ * 
+ * @requires OpenLayers/Control.js
+ */
+OpenLayers.Control.WMSManager = OpenLayers.Class.create();
+OpenLayers.Control.WMSManager.prototype = 
+  OpenLayers.Class.inherit( OpenLayers.Control, {
+
+    /** @type String */
+    activeColor: "darkblue",
+    
+
+  // DOM Elements
+  
+    /** @type DOMElement */
+    olLayerManager: null,
+    
+    /** @type DOMElement */
+    baseServerListDiv: null,
+	
+	/** @type DOMElement */
+	olServerList: null,
+	
+	/** @type DOMElement */
+	olLegend: null,
+	
+	/** @type DOMElement */
+	olLayerManagerHeader: null,
+	
+    /** @type DOMElement */
+    dataLbl: null,//to be deleted or changed
+    
+    /** @type DOMElement */
+    dataolLayerManager: null,//to be deleted or changed
+	
+	/** @type DOMElement */
+    minimizeDiv: null,
+
+    /** @type DOMElement */
+    maximizeDiv: null,
+	
+	//Arrays
+    /** @type Array */
+    aWMSServer: null,
+    
+	/** @type Array */
+    baseLayerInputs: null,//to be deleted maybe...
+    
+	/** @type Array */
+    baseLayerInputs: null,//to be deleted maybe...
+   
+    /** @type Array */
+    dataLayerInputs: null,//to be deleted maybe...
+
+    //others
+   
+    /** @type Boolean */
+    ascending: true,
+	
+ 	/** @type string */
+    activePanel: 'olLegend',
+  
+    /**
+    * @constructor
+    */
+    initialize: function(aWMSServer,options) {
+        OpenLayers.Control.prototype.initialize.apply(this, arguments);
+		this.aWMSServer= aWMSServer;
+    },
+
+	/** 
+     * @param {string} Title
+     * @param {string} WMS Server url
+     */
+	addWMSServer: function (title, url){
+	 this.aWMSServer.push([title,url]);
+	},
+	
+    /** 
+     * @param {OpenLayers.Map} map
+     */
+    setMap: function(map) {
+        OpenLayers.Control.prototype.setMap.apply(this, arguments);
+
+        this.map.events.register("addlayer", this, this.redraw);
+        this.map.events.register("changelayer", this, this.redraw);
+        this.map.events.register("removelayer", this, this.redraw);
+        this.map.events.register("changebaselayer", this, this.redraw);
+    },
+
+    /**
+    * @returns A reference to the DIV DOMElement containing the switcher tabs
+    * @type DOMElement
+    */  
+    draw: function() {
+        OpenLayers.Control.prototype.draw.apply(this);
+
+        // create layout divs
+        this.loadContents();
+
+        // set mode to minimize
+       	// this.minimizeControl();
+		 this.showControls();
+        
+        // populate div with current info
+        this.redraw();    
+		
+        return this.div;
+    },
+
+    /** Goes through and takes the current state of the Map and rebuilds the
+     *   control to display that state. Groups base layers into a radio-button
+     *   group and lists each data layer with a checkbox.
+     * 
+     * @returns A reference to the DIV DOMElement containing the control
+     * @type DOMElement
+     */  
+    redraw: function() {
+
+        //clear out previous layers 
+        this.baseLayersDiv.innerHTML = "";
+        this.baseLayerInputs = new Array();
+        
+        this.dataLayersDiv.innerHTML = "";
+        this.dataLayerInputs = new Array();
+        
+        var containsOverlays = false;
+        
+        var layers = this.map.layers.slice();
+		
+		//alert(layers.length);
+		if(layers.length == 0) 
+				this.baseLayersDiv.innerHTML = "<p>no layers added.<br> please add one using 'WMS Servers' selector</p>";
+				
+        if (!this.ascending) { layers.reverse(); }
+        for( var i = 0; i < layers.length; i++) {
+            var layer = layers[i];
+            var baseLayer = layer.isBaseLayer;
+
+            if (baseLayer || layer.displayInWMSManager) {
+
+                if (!baseLayer) {
+                    containsOverlays = true;
+                }
+
+                // only check a baselayer if it is *the* baselayer, check data
+                //  layers if they are visible
+                var checked = (baseLayer) ? (layer == this.map.baseLayer)
+                                          : layer.getVisibility();
+    
+                // create input element
+                var inputElem = document.createElement("input");
+                inputElem.id = "input_" + layer.name;
+                inputElem.name = (baseLayer) ? "baseLayers" : layer.name;
+                inputElem.type = (baseLayer) ? "radio" : "checkbox";
+                inputElem.value = layer.name;
+                inputElem.checked = checked;
+                inputElem.defaultChecked = checked;
+                inputElem.layer = layer;
+                inputElem.control = this;
+
+                if (!baseLayer && !layer.inRange) {
+                    inputElem.disabled = true;
+                }
+                OpenLayers.Event.observe(inputElem, "mouseup", 
+                              this.onInputClick.bindAsEventListener(inputElem));
+                
+                // create span
+                var labelSpan = document.createElement("span");
+                if (!baseLayer && !layer.inRange) {
+                    labelSpan.style.color = "gray";
+                }
+                labelSpan.innerHTML = layer.name;
+                labelSpan.style.verticalAlign = (baseLayer) ? "bottom" : "baseline";
+                OpenLayers.Event.observe(labelSpan, "click", 
+                              this.onInputClick.bindAsEventListener(inputElem));
+                // create line break
+                var br = document.createElement("br");
+    
+                
+                var groupArray = (baseLayer) ? this.baseLayerInputs
+                                             : this.dataLayerInputs;
+                groupArray.push(inputElem);
+                                                     
+    
+                var groupDiv = (baseLayer) ? this.baseLayersDiv
+                                           : this.dataLayersDiv;
+                groupDiv.appendChild(inputElem);
+                groupDiv.appendChild(labelSpan);
+                groupDiv.appendChild(br);
+            }
+			
+        }
+
+        // if no overlays, dont display the overlay label
+        this.dataLbl.style.display = (containsOverlays) ? "" : "none";        
+
+        return this.div;
+    },
+
+    /** A label has been clicked, check or uncheck its corresponding input
+     * 
+     * @private
+     * 
+     * @param {Event} e
+     */
+
+    onInputClick: function(e) {
+        if (!this.disabled) {
+            if (this.type == "radio") {
+                this.checked = true;
+                this.layer.map.setBaseLayer(this.layer, true);
+                this.layer.map.events.triggerEvent("changebaselayer");
+            } else {
+                this.checked = !this.checked;
+                this.control.updateMap();
+            }
+        }
+        OpenLayers.Event.stop(e);
+    },
+    
+    /** Need to update the map accordingly whenever user clicks in either of
+     *   the layers.
+     * 
+     * @private
+     * 
+     * @param {Event} e
+     */
+    onLayerClick: function(e) {
+        this.updateMap();
+    },
+
+
+    /** Cycles through the loaded data and base layer input arrays and makes
+     *   the necessary calls to the Map object such that that the map's 
+     *   visual state corresponds to what the user has selected in the control
+     * 
+     * @private
+     */
+    updateMap: function() {
+
+        // set the newly selected base layer        
+        for(var i=0; i < this.baseLayerInputs.length; i++) {
+            var input = this.baseLayerInputs[i];   
+            if (input.checked) {
+                this.map.setBaseLayer(input.layer, false);
+            }
+        }
+
+        // set the correct visibilities for the overlays
+        for(var i=0; i < this.dataLayerInputs.length; i++) {
+            var input = this.dataLayerInputs[i];   
+            input.layer.setVisibility(input.checked, true);
+        }
+
+    },
+
+    /** Set up the labels and divs for the control
+     * 
+     * @param {Event} e
+     */
+    maximizeControl: function(e) {
+
+        //HACK HACK HACK - find a way to auto-size this WMSManager
+        this.div.style.width = "20em";
+        this.div.style.height = "";
+
+        this.showControls(false);
+
+        if (e != null) {
+            OpenLayers.Event.stop(e);                                            
+        }
+    },
+    
+    /** Hide all the contents of the control, shrink the size, 
+     *   add the maximize icon
+     * 
+     * @param {Event} e
+     */
+    minimizeControl: function(e) {
+
+        this.div.style.width = "0px";
+        this.div.style.height = "0px";
+
+        this.showControls(true);
+
+        if (e != null) {
+            OpenLayers.Event.stop(e);                                            
+        }
+    },
+
+    /** Hide/Show all WMSManager controls depending on whether we are
+     *   minimized or not
+     * 
+     * @private
+     * 
+     * @param {Boolean} minimize
+     */
+    showControls: function(minimize) {
+
+        this.maximizeDiv.style.display = minimize ? "" : "none";
+        this.minimizeDiv.style.display = minimize ? "none" : "";
+
+        this.olLayerManager.style.display = minimize ? "none" : "";
+    },
+    
+    /** Set up the labels and divs for the control
+     * 
+     */
+    loadContents: function() {
+
+        //configure main div
+        this.div.style.position = "absolute";
+        this.div.style.top = "10px";
+        this.div.style.right = "0px";
+        this.div.style.left = "";
+        this.div.style.fontFamily = "sans-serif";
+        this.div.style.fontWeight = "bold";
+        this.div.style.marginTop = "3px";
+        this.div.style.marginLeft = "3px";
+        this.div.style.marginBottom = "3px";
+        this.div.style.fontSize = "smaller";   
+        this.div.style.color = "white";   
+        this.div.style.backgroundColor = "transparent";
+		//added by ominiverdi
+		this.div.style.width = "20em";
+    
+        OpenLayers.Event.observe(this.div, "mouseup", 
+                      this.mouseUp.bindAsEventListener(this));
+        OpenLayers.Event.observe(this.div, "click",
+                      this.ignoreEvent);
+        OpenLayers.Event.observe(this.div, "mousedown",
+                      this.mouseDown.bindAsEventListener(this));
+        OpenLayers.Event.observe(this.div, "dblclick", this.ignoreEvent);
+		
+		/*
+		 * OL Layers Manager Header
+		 */
+		
+		//create olLayerManagerHeader div
+		this.olLayerManagerHeader = document.createElement("div");
+		// this.olLayerManagerHeader.id = "olLayerManagerHeader";
+		this.olLayerManagerHeader.className = "olLayerManagerHeader";
+		
+		// add Legend button
+		this.buttonLayers = document.createElement("a");
+		this.buttonLayers.href="#";
+		this.buttonLayers.LayerManager =this;
+		this.buttonLayers.panel ='olLegend';
+		this.buttonLayers.onclick =this.switchPanel;
+		var spanL = document.createElement("span");
+		spanL.innerHTML = "Legend";
+		this.buttonLayers.appendChild(spanL);
+		
+		// add WMS Servers button
+		this.buttonServers = document.createElement("a");
+		this.buttonServers.href="#";
+		this.buttonServers.LayerManager =this;
+		this.buttonServers.panel = 'olServerList';
+		this.buttonServers.onclick =this.switchPanel;
+		var spanS = document.createElement("span");
+		spanS.innerHTML = "WMS Servers";
+		this.buttonServers.appendChild(spanS);
+		
+		this.olLayerManagerHeader.appendChild(this.buttonLayers);
+		this.olLayerManagerHeader.appendChild(this.buttonServers);
+		
+		
+		/*
+		 * OL Layers Manager 
+		 */
+        
+		
+        this.olLayerManager = document.createElement("div");
+        this.olLayerManager.className = "olLayerManager";
+        this.olLayerManager.style.backgroundColor = this.activeColor;
+        this.olLayerManager.style.padding = "3px";      
+
+        // had to set width/height to get transparency in IE to work.
+        // thanks -- http://jszen.blogspot.com/2005/04/ie6-opacity-filter-caveat.html
+        //
+        this.olLayerManager.style.width = "100%";
+        this.olLayerManager.style.height = "100%";
+
+
+        /*var baseLbl = document.createElement("div");
+        baseLbl.innerHTML = "<u>Legend</u>";
+        baseLbl.style.marginTop = "0px";
+        baseLbl.style.marginLeft = "3px";
+        baseLbl.style.marginBottom = "3px";*/
+        
+        
+                  
+		
+        this.dataLbl = document.createElement("div");
+        this.dataLbl.innerHTML = "<u>Overlays</u>";
+        this.dataLbl.style.marginTop = "3px";
+        this.dataLbl.style.marginLeft = "3px";
+        this.dataLbl.style.marginBottom = "3px";
+        
+        this.dataLayersDiv = document.createElement("div");
+        this.dataLayersDiv.style.paddingLeft = "10px"; 
+		this.dataLayersDiv.className = "dataLayersDiv";
+		// WMS form part
+		this.olServerList = document.createElement("div");
+		this.olServerList.className = "olServerList";
+		var p = document.createElement('p');
+		//p.innerHTML = 'Use the select box here below to choose a server. Wait for remote response.';
+		this.olServerList.appendChild(p);
+		var p = document.createElement('p');
+		p.id = 'wmsManagerOutput';
+		this.olServerList.appendChild(p);
+		
+		var form = document.createElement('form');
+		form.name='WMSServerConnector';
+		form.action='#';
+		//Make server select
+		this.serverSelect = document.createElement('select');
+		this.serverSelect.name = 'wmsServerList';
+		this.serverSelect.id = 'wmsServerList';
+		this.serverSelect.WMSManager = this;
+		this.serverSelect.style.width = "220px";
+		this.serverSelect.onchange = this.connect2server;
+		var j = 0;
+		var opt = new Option( 'select a server', '', true, true );
+		this.serverSelect[j++] = opt;
+		this.olServerList.appendChild(this.serverSelect);
+		for(i=0;i<this.aWMSServer.length;i++) {
+			this.serverSelect[j++] = new Option(this.aWMSServer[i][0],this.aWMSServer[i][1],false,false);
+		}
+
+
+
+		// creating the legend layer
+		this.baseLayersDiv = document.createElement("div");
+        this.baseLayersDiv.style.paddingLeft = "10px";
+		
+		this.olLegend = document.createElement("div");
+        this.olLegend.style.paddingLeft = "10px";
+		this.olLegend.className ="olLegend";
+		this.olLegend.appendChild(this.baseLayersDiv);
+		this.olLegend.appendChild(this.dataLbl);
+		this.olLegend.appendChild(this.dataLayersDiv); 
+		
+		
+		
+		/*
+		 * APPENDING THE STRUCTURE
+		 */
+		
+		//appending main elements
+		//this.olLayerManager.appendChild(baseLbl);
+		
+            this.olLayerManager.appendChild(this.olLayerManagerHeader);
+			this.olLayerManager.appendChild(this.olLegend);
+			// this.olLayerManager.appendChild(serverListTitle);
+			 this.olLayerManager.appendChild(this.olServerList);   
+
+        this.div.appendChild(this.olLayerManager);
+		
+		
+		/*
+		 * GRAPHICS STUFF
+		 */
+        OpenLayers.Rico.Corner.round(this.div, {corners: "tl bl",
+                                        bgColor: "transparent",
+                                        color: this.activeColor,
+                                        blend: false});
+
+        OpenLayers.Rico.Corner.changeOpacity(this.olLayerManager, 0.75);
+
+        var imgLocation = OpenLayers.Util.getImagesLocation();
+        var sz = new OpenLayers.Size(18,18);        
+
+        // maximize button div
+        var img = imgLocation + 'layer-switcher-maximize.png';
+        this.maximizeDiv = OpenLayers.Util.createAlphaImageDiv(
+                                    "OpenLayers_Control_MaximizeDiv", 
+                                    null, 
+                                    sz, 
+                                    img, 
+                                    "absolute");
+        this.maximizeDiv.style.top = "5px";
+        this.maximizeDiv.style.right = "0px";
+        this.maximizeDiv.style.left = "";
+        this.maximizeDiv.style.display = "none";
+        OpenLayers.Event.observe(this.maximizeDiv, 
+                      "click", 
+                      this.maximizeControl.bindAsEventListener(this));
+        
+        this.div.appendChild(this.maximizeDiv);
+
+        // minimize button div
+        var img = imgLocation + 'layer-switcher-minimize.png';
+        var sz = new OpenLayers.Size(18,18);        
+        this.minimizeDiv = OpenLayers.Util.createAlphaImageDiv(
+                                    "OpenLayers_Control_MinimizeDiv", 
+                                    null, 
+                                    sz, 
+                                    img, 
+                                    "absolute");
+        this.minimizeDiv.style.top = "5px";
+        this.minimizeDiv.style.right = "0px";
+        this.minimizeDiv.style.left = "";
+        this.minimizeDiv.style.display = "none";
+        OpenLayers.Event.observe(this.minimizeDiv, 
+                      "click", 
+                      this.minimizeControl.bindAsEventListener(this));
+
+        this.div.appendChild(this.minimizeDiv);
+		
+		/*
+		 * START UP PANELS
+		 * 
+		 */
+		this.switchPanel();
+    },
+    
+    /** 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    connect2server: function(evt) {
+        
+		 var select = this;
+		 if((select)) var url = select[select.selectedIndex].value;
+		 else url ="";
+		 
+		 if(url.length>0) {
+			 this.baseURL = url;
+		 } else {
+			 alert('no server selected. please select one.');
+			 return;
+		 } 
+	    if (this.baseURL.indexOf('?') == -1)
+	    {
+	        this.baseURL = this.baseURL + '?';
+	    }
+	    else
+	    {
+	        if (this.baseURL.charAt( this.baseURL.length - 1 ) == '&')
+	            this.baseURL = this.baseURL.slice( 0, -1 );
+	    }
+		
+	    this.baseURL = this.baseURL+ "&service=WMS";
+	    this.baseURL = this.baseURL +  "&version=1.1.1";
+	    this.baseURL = this.baseURL + "&request=GetCapabilities";
+	    
+		
+		$('wmsManagerOutput').innerHTML = "Loading Layers list... please wait...";
+        //$('wmsManagerOutput').innerHTML = this.baseURL;
+		//alert(this.baseURL);
+        OpenLayers.loadURL(this.baseURL, null, this, this.WMSManager.parseGetCapabilities);
+    },
+	
+	
+	/** 
+     * @private 
+     *
+     * @param {XMLHttpRequest} ajaxRequest
+     */
+    parseGetCapabilities: function(ajaxRequest) {
+		var text = ajaxRequest.responseText;
+		
+		var xml = ajaxRequest.responseXML;
+		
+		if(xml == null) return alert('incorrect content: check your WMS url');
+		if(typeof xml=='object'){
+		 //alert(xml);
+		 var aLayer = xml.getElementsByTagName('Layer');
+		 if(aLayer.length>0){
+			 this.WMSManager.drawLayersForm(xml);
+		 } else {
+				alert('no Layers available on this server');
+		 }
+	 } else {
+		alert('connection error: response is not an object');
+	 }
+		
+    },
+	
+	/** 
+     * @private 
+     *
+     * @param {XMLHttpRequest} ajaxRequest
+     */
+    drawLayersForm: function(xml) {
+		
+		var formObj = this.olServerList;
+		
+		//alert('1');
+		//get Extent (to implent BoundingBox alternative) 
+		var bbox = xml.getElementsByTagName('LatLonBoundingBox')[0];
+		this.extent = [bbox.getAttribute('minx'),bbox.getAttribute('miny'),bbox.getAttribute('maxx'),bbox.getAttribute('maxy')];
+		this.mapCenter = [((bbox.getAttribute('maxx') - bbox.getAttribute('minx'))/2),((bbox.getAttribute('maxy') - bbox.getAttribute('miny'))/2)]
+		
+		//alert('2');
+		//print extent (clean if already there)
+		var myextent = $('wmsExtent');
+		if( myextent)myextent.parentNode.removeChild(myextent);
+		var p = document.createElement('p');
+		//p.innerHTML = 'map extent: '+ this.extent;
+		p.id = 'wmsExtent';
+		formObj.appendChild(p);
+		
+		//alert('3');
+		//get map SRS (should be layer related)
+		this.srs = xml.getElementsByTagName('SRS')[0].textContent;
+		var mywmssrs = $('wmsSRS');
+		if( mywmssrs)mywmssrs.parentNode.removeChild(mywmssrs);
+		var p = document.createElement('p');
+		//p.innerHTML = 'SRS: '+ this.srs;
+		p.id = 'wmsSRS';
+		formObj.appendChild(p);
+		
+		//alert('4');
+		//get Layers
+		var aLayers = xml.getElementsByTagName('Layer');
+		/*var myp = getRawObject('wmsLayerP');
+		if( myp)myp.parentNode.removeChild(myp);
+		var p = document.createElement('p');
+		p.innerHTML = 'choose a Process';
+		p.id = 'wmsLayerP';
+		self.formObj.appendChild(p);*/
+		var myselect = $('wmsLayerList');
+		if( myselect)myselect.parentNode.removeChild(myselect);
+		var select = document.createElement('select');
+		select.name = 'wmsLayerList';
+		select.onchange = this.addWMSLayer;
+		select.id = 'wmsLayerList';
+		select.WMSManager = this;
+		select.style.width = "220px";
+		var j = 0;
+		var opt = new Option( 'select a Layer', '', true, true );
+		select[j++] = opt;
+		for(i=0;i<aLayers.length;i++){
+			var names = aLayers[i].getElementsByTagName('Name');
+			var titles = aLayers[i].getElementsByTagName('Title');
+			//alert(processes[0].textContent);//nodeValue,localName,tagName,textContent
+			var name = names[0].textContent;
+			var title = titles[0].textContent;
+			select[j++] = new Option(title,name,false,false);
+		}
+		formObj.appendChild(select);
+		
+		$('wmsManagerOutput').innerHTML = '';
+    },
+	
+	
+	/** 
+     * @private
+     *
+     */
+    addWMSLayer: function() {
+        var select1 = $('wmsServerList');
+		var select2 = $('wmsLayerList');
+		 
+		 if(select1) var url = select1[select1.selectedIndex].value;
+		 else url ="";
+		 if(select2) var layer = select2[select2.selectedIndex].value;
+		 else layer ="";
+		 if(select2) var title = select2[select2.selectedIndex].textContent;
+		 else title = layer;
+		 
+		 if(url.length<1) {
+			 alert('no server selected. please select one.');
+			 return;
+		 }
+		 if(layer.length<1) {
+			 alert('no layer selected. please select one.');
+			 return;
+		 }
+		  
+	    if (url.indexOf('?') == -1)
+	    {
+	        url = url + '?';
+	    }
+	    else
+	    {
+	        if (url.charAt( url.length - 1 ) == '&')
+	            url = url.slice( 0, -1 );
+	    }
+		
+	    /*  url = url+ "&service=WMS";
+	    url = url +  "&version=1.1.1";
+	    url = url + "&request=getMap";
+		url = url + "&layers=" + layer;
+		url = url + "&format=image/jpeg"; */
+		
+		//create layer add with OL
+		
+		var layer = new OpenLayers.Layer.WMS( title, 
+                    url, {layers: layer} );
+		map.addLayer(layer);
+		
+		
+		//var lon = 5;
+		var lon = this.WMSManager.mapCenter[1];
+
+        //var lat = 40;
+		var lat = this.WMSManager.mapCenter[0];
+        var zoom = 2;
+		map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
+    },
+	
+
+	
+	/** 
+     * @private
+     *
+     */
+    switchPanel: function() {
+        if(this.LayerManager)var LayerManager = this.LayerManager;
+		else var LayerManager = this;
+		
+		var header = LayerManager.olLayerManagerHeader;
+		if(this.panel)LayerManager.activePanel = this.panel;
+		var aHref = header.getElementsByTagName('a');
+		var activePanel = LayerManager.activePanel;
+		
+		for(var i=0;i<aHref.length;i++){
+			//alert(aHref[i].innerHTML);
+			if(aHref[i].panel == activePanel)
+					aHref[i].className = 'active';
+			else 
+					aHref[i].className = '';
+		}
+		
+		LayerManager.olServerList.style.display = (activePanel=='olServerList') ? "" : "none";
+        LayerManager.olLegend.style.display = (activePanel=='olLegend') ? "" : "none";
+		//alert(LayerManager.dataLayersDiv.innerHTML);
+    },
+	
+	/** 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    ignoreEvent: function(evt) {
+        OpenLayers.Event.stop(evt);
+    },
+	
+
+    /** Register a local 'mouseDown' flag so that we'll know whether or not
+     *   to ignore a mouseUp event
+     * 
+     * @private
+     *
+     * @param {Event} evt
+     */
+    mouseDown: function(evt) {
+        this.mouseDown = true;
+        this.ignoreEvent(evt);
+    },
+
+    /** If the 'mouseDown' flag has been set, that means that the drag was 
+     *   started from within the WMSManager control, and thus we can 
+     *   ignore the mouseup. Otherwise, let the Event continue.
+     *  
+     * @private
+     *
+     * @param {Event} evt
+     */
+    mouseUp: function(evt) {
+        if (this.mouseDown) {
+            this.mouseDown = false;
+            this.ignoreEvent(evt);
+        }
+    },
+
+    /** @final @type String */
+    CLASS_NAME: "OpenLayers.Control.WMSManager"
+});

Modified: sandbox/ominiverdi/openlayers/lib/OpenLayers.js
===================================================================
--- sandbox/ominiverdi/openlayers/lib/OpenLayers.js	2007-05-02 14:20:28 UTC (rev 3113)
+++ sandbox/ominiverdi/openlayers/lib/OpenLayers.js	2007-05-03 09:48:51 UTC (rev 3114)
@@ -120,6 +120,7 @@
         "OpenLayers/Control/DrawFeature.js",
         "OpenLayers/Control/Panel.js",
         "OpenLayers/Control/SelectFeature.js",
+        "OpenLayers/Control/WMSManager.js",
         "OpenLayers/Geometry.js",
         "OpenLayers/Geometry/Rectangle.js",
         "OpenLayers/Geometry/Collection.js",

Modified: sandbox/ominiverdi/openlayers/theme/default/style.css
===================================================================
--- sandbox/ominiverdi/openlayers/theme/default/style.css	2007-05-02 14:20:28 UTC (rev 3113)
+++ sandbox/ominiverdi/openlayers/theme/default/style.css	2007-05-03 09:48:51 UTC (rev 3114)
@@ -148,3 +148,33 @@
   background-image: url("img/draw_polygon_on.png");
   background-repeat: no-repeat;
 }
+
+
+
+
+.olLayerManagerHeader {
+		
+}
+.olLayerManagerHeader a {
+	text-decoration:none;		
+}
+
+.olLayerManagerHeader  span {
+		border:1px solid rgb(100,100,160);
+		margin:2px;
+		margin-bottom:0;
+		padding:3px;
+		background-color:rgb(100,100,200);
+}
+.olLayerManagerHeader  .active {
+		color:white;
+}
+.olLegend,.olServerList{
+		border:1px solid rgb(100,100,160);
+		margin:2px;
+		margin-bottom:0;
+		margin-right:6px;
+		padding:3px;
+		background-color:rgb(100,100,200);
+
+}



More information about the Commits mailing list