Ticket #577: layerswitcherMem.2.patch
| File layerswitcherMem.2.patch, 5.8 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.baseLayer Inputs154 : this.dataLayer Inputs;175 var groupArray = (baseLayer) ? this.baseLayers 176 : this.dataLayers; 155 177 groupArray.push(inputElem); 156 178 157 179 … … 173 195 * 174 196 * @private 175 197 * 198 * @context 199 * {DOMElement} inputElem 200 * {OpenLayers.Control.LayerSwitcher} layerSwitcher 201 * {OpenLayers.Layer} layer 202 * 176 203 * @param {Event} e 177 204 */ 178 205 179 206 onInputClick: function(e) { 180 if (!this.disabled) { 181 if (this.type == "radio") { 182 this.checked = true; 207 208 if (!this.inputElem.disabled) { 209 if (this.inputElem.type == "radio") { 210 this.inputElem.checked = true; 183 211 this.layer.map.setBaseLayer(this.layer, true); 184 212 this.layer.map.events.triggerEvent("changebaselayer"); 185 213 } else { 186 this. checked = !this.checked;187 this. control.updateMap();214 this.inputElem.checked = !this.checked; 215 this.layerSwitcher.updateMap(); 188 216 } 189 217 } 190 218 OpenLayers.Event.stop(e); … … 211 239 updateMap: function() { 212 240 213 241 // 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);242 for(var i=0; i < this.baseLayers.length; i++) { 243 var layerEntry = this.baseLayers[i]; 244 if (layerEntry.input.checked) { 245 this.map.setBaseLayer(layerEntry.layer, false); 218 246 } 219 247 } 220 248 221 249 // 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);250 for(var i=0; i < this.dataLayers.length; i++) { 251 var layerEntry = this.dataLayers[i]; 252 layerEntry.layer.setVisibility(layerEntry.input.checked, true); 225 253 } 226 254 227 255 },
