+++ /dev/null
-var SimpleLayerSwitcher = OpenLayers.Class(OpenLayers.Control, {
- layerStates: null,
- layersDiv: null,
- ascending: true,
-
- initialize: function(options) {
- OpenLayers.Control.prototype.initialize.apply(this, arguments);
- this.layerStates = [];
- },
-
- destroy: function() {
- OpenLayers.Event.stopObservingElement(this.div);
-
- //clear out layers info and unregister their events
- this.map.events.un({
- "addlayer": this.redraw,
- "changelayer": this.redraw,
- "removelayer": this.redraw,
- "changebaselayer": this.redraw,
- scope: this
- });
- OpenLayers.Control.prototype.destroy.apply(this, arguments);
- },
-
- setMap: function(map) {
- OpenLayers.Control.prototype.setMap.apply(this, arguments);
-
- this.map.events.on({
- "addlayer": this.redraw,
- "changelayer": this.redraw,
- "removelayer": this.redraw,
- "changebaselayer": this.redraw,
- scope: this
- });
- },
-
- draw: function() {
- OpenLayers.Control.prototype.draw.apply(this);
- this.loadContents();
- this.redraw();
- return this.div;
- },
-
- checkRedraw: function() {
- var redraw = false;
- if ( !this.layerStates.length ||
- (this.map.layers.length != this.layerStates.length) ) {
- redraw = true;
- } else {
- for (var i=0, len=this.layerStates.length; i<len; i++) {
- var layerState = this.layerStates[i];
- var layer = this.map.layers[i];
- if ( (layerState.name != layer.name) ||
- (layerState.inRange != layer.inRange) ||
- (layerState.id != layer.id) ||
- (layerState.visibility != layer.visibility) ) {
- redraw = true;
- break;
- }
- }
- }
- return redraw;
- },
-
- redraw: function() {
- if (!this.checkRedraw()) {
- return this.div;
- }
-
- this.div.innerHTML = '';
- var len = this.map.layers.length;
- this.layerStates = [];
- for (var i = 0; i < this.map.layers.length; i++) {
- var layer = this.map.layers[i];
- this.layerStates[i] = {
- 'name': layer.name,
- 'visibility': layer.visibility,
- 'inRange': layer.inRange,
- 'id': layer.id
- };
- }
-
- var layers = this.map.layers.slice();
- if (!this.ascending) { layers.reverse(); }
- for (var i = 0; i < layers.length; i++) {
- var layer = layers[i];
- var baseLayer = layer.isBaseLayer;
-
- if (layer.displayInLayerSwitcher && baseLayer) {
- var on = (baseLayer) ? (layer == this.map.baseLayer)
- : layer.getVisibility();
- var layerElem = document.createElement('a');
- layerElem.id = this.id + '_input_' + layer.name;
- layerElem.innerHTML = layer.name;
- layerElem.href = '#';
-
- OpenLayers.Element.addClass(layerElem, 'basey');
- OpenLayers.Element.addClass(layerElem,
- 'basey-' + (on ? 'on' : 'off'));
-
- if (!baseLayer && !layer.inRange) {
- layerElem.disabled = true;
- }
- var context = {
- 'layer': layer
- };
- OpenLayers.Event.observe(layerElem, 'mouseup',
- OpenLayers.Function.bindAsEventListener(
- this.onInputClick,
- context)
- );
-
- this.div.appendChild(layerElem);
- }
- }
-
- return this.div;
- },
-
- onInputClick: function(e) {
- if (this.layer.isBaseLayer) {
- this.layer.map.setBaseLayer(this.layer);
- } else {
- this.layer.setVisibility(!this.layer.getVisibility());
- }
- OpenLayers.Event.stop(e);
- },
-
- updateMap: function() {
-
- // set the newly selected base layer
- for(var i=0, len=this.baseLayers.length; i<len; i++) {
- var layerEntry = this.baseLayers[i];
- if (layerEntry.inputElem.checked) {
- this.map.setBaseLayer(layerEntry.layer, false);
- }
- }
-
- // set the correct visibilities for the overlays
- for(var i=0, len=this.dataLayers.length; i<len; i++) {
- var layerEntry = this.dataLayers[i];
- layerEntry.layer.setVisibility(layerEntry.inputElem.checked);
- }
-
- },
-
- loadContents: function() {
- //configure main div
- OpenLayers.Event.observe(this.div, 'mouseup',
- OpenLayers.Function.bindAsEventListener(this.mouseUp, this));
- OpenLayers.Event.observe(this.div, 'click',
- this.ignoreEvent);
- OpenLayers.Event.observe(this.div, 'mousedown',
- OpenLayers.Function.bindAsEventListener(this.mouseDown, this));
- OpenLayers.Event.observe(this.div, 'dblclick', this.ignoreEvent);
- },
-
- ignoreEvent: function(evt) {
- OpenLayers.Event.stop(evt);
- },
-
- mouseDown: function(evt) {
- this.isMouseDown = true;
- this.ignoreEvent(evt);
- },
-
- mouseUp: function(evt) {
- if (this.isMouseDown) {
- this.isMouseDown = false;
- this.ignoreEvent(evt);
- }
- },
-
- CLASS_NAME: "SimpleLayerSwitcher"
-});