Ticket #577: layerswitcherMem.3.patch
| File layerswitcherMem.3.patch, 6.1 kB (added by euzuro, 2 years ago) |
|---|
-
lib/OpenLayers/Control/LayerSwitcher.js
old new 25 25 baseLayersDiv: null, 26 26 27 27 /** @type Array */ 28 baseLayer Inputs: null,28 baseLayers: null, 29 29 30 30 31 31 /** @type DOMElement */ … … 35 35 dataLayersDiv: null, 36 36 37 37 /** @type Array */ 38 dataLayer Inputs: null,38 dataLayers: null, 39 39 40 40 41 41 /** @type DOMElement */ … … 85 85 return this.div; 86 86 }, 87 87 88 /** user specifies either "base" or "data". we then clear all the 89 * corresponding listeners, the div, and reinitialize a new array. 90 * 91 * @private 92 * 93 * @param {String} layersType Ei 94 */ 95 clearLayersArray: function(layersType) { 96 var layers = this[layersType + "Layers"]; 97 if (layers) { 98 for(var i=0; i < layers.length; i++) { 99 var layer = layers[i]; 100 OpenLayers.Event.stopObservingElement(layer.inputElem); 101 OpenLayers.Event.stopObservingElement(layer.labelSpan); 102 } 103 } 104 this[layersType + "LayersDiv"].innerHTML = ""; 105 this[layersType + "Layers"] = new Array(); 106 }, 107 108 88 109 /** Goes through and takes the current state of the Map and rebuilds the 89 110 * control to display that state. Groups base layers into a radio-button 90 111 * group and lists each data layer with a checkbox. … … 95 116 redraw: function() { 96 117 97 118 //clear out previous layers 98 this. baseLayersDiv.innerHTML = "";99 this. baseLayerInputs = new Array();119 this.clearLayersArray("base"); 120 this.clearLayersArray("data"); 100 121 101 this.dataLayersDiv.innerHTML = "";102 this.dataLayerInputs = new Array();103 104 122 var containsOverlays = false; 105 123 106 124 var layers = this.map.layers.slice(); … … 128 146 inputElem.value = layer.name; 129 147 inputElem.checked = checked; 130 148 inputElem.defaultChecked = checked; 131 inputElem.layer = layer;132 inputElem.control = this;133 149 134 150 if (!baseLayer && !layer.inRange) { 135 151 inputElem.disabled = true; 136 152 } 153 var context = { 154 'inputElem': inputElem, 155 'layer': layer, 156 'layerSwitcher': this 157 } 137 158 OpenLayers.Event.observe(inputElem, "mouseup", 138 this.onInputClick.bindAsEventListener( inputElem));159 this.onInputClick.bindAsEventListener(context)); 139 160 140 161 // create span 141 162 var labelSpan = document.createElement("span"); … … 143 164 labelSpan.style.color = "gray"; 144 165 } 145 166 labelSpan.innerHTML = layer.name; 146 labelSpan.style.verticalAlign = (baseLayer) ? "bottom" : "baseline"; 167 labelSpan.style.verticalAlign = (baseLayer) ? "bottom" 168 : "baseline"; 147 169 OpenLayers.Event.observe(labelSpan, "click", 148 this.onInputClick.bindAsEventListener( inputElem));170 this.onInputClick.bindAsEventListener(context)); 149 171 // create line break 150 172 var br = document.createElement("br"); 151 173 152 174 153 var groupArray = (baseLayer) ? this.baseLayerInputs 154 : this.dataLayerInputs; 155 groupArray.push(inputElem); 175 var groupArray = (baseLayer) ? this.baseLayers 176 : this.dataLayers; 177 groupArray.push({ 178 'layer': layer, 179 'inputElem': inputElem, 180 'labelSpan': labelSpan 181 }); 156 182 157 183 158 184 var groupDiv = (baseLayer) ? this.baseLayersDiv … … 173 199 * 174 200 * @private 175 201 * 202 * @context 203 * {DOMElement} inputElem 204 * {OpenLayers.Control.LayerSwitcher} layerSwitcher 205 * {OpenLayers.Layer} layer 206 * 176 207 * @param {Event} e 177 208 */ 178 209 179 210 onInputClick: function(e) { 180 if (!this.disabled) { 181 if (this.type == "radio") { 182 this.checked = true; 211 212 if (!this.inputElem.disabled) { 213 if (this.inputElem.type == "radio") { 214 this.inputElem.checked = true; 183 215 this.layer.map.setBaseLayer(this.layer, true); 184 216 this.layer.map.events.triggerEvent("changebaselayer"); 185 217 } else { 186 this. checked = !this.checked;187 this. control.updateMap();218 this.inputElem.checked = !this.inputElem.checked; 219 this.layerSwitcher.updateMap(); 188 220 } 189 221 } 190 222 OpenLayers.Event.stop(e); … … 211 243 updateMap: function() { 212 244 213 245 // set the newly selected base layer 214 for(var i=0; i < this.baseLayer Inputs.length; i++) {215 var input = this.baseLayerInputs[i];216 if ( input.checked) {217 this.map.setBaseLayer( input.layer, false);246 for(var i=0; i < this.baseLayers.length; i++) { 247 var layerEntry = this.baseLayers[i]; 248 if (layerEntry.inputElem.checked) { 249 this.map.setBaseLayer(layerEntry.layer, false); 218 250 } 219 251 } 220 252 221 253 // set the correct visibilities for the overlays 222 for(var i=0; i < this.dataLayer Inputs.length; i++) {223 var input = this.dataLayerInputs[i];224 input.layer.setVisibility(input.checked, true);254 for(var i=0; i < this.dataLayers.length; i++) { 255 var layerEntry = this.dataLayers[i]; 256 layerEntry.layer.setVisibility(layerEntry.inputElem.checked, true); 225 257 } 226 258 227 259 },
