+++ /dev/null
-/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full
- * text of the license. */
-// @require: OpenLayers/Control.js
-/**
-* @class
-*/
-OpenLayers.Control.LayerSwitcher = Class.create();
-
-/** color used in the UI to show a layer is active/displayed
-*
-* @final
-* @type String
-*/
-OpenLayers.Control.LayerSwitcher.ACTIVE_COLOR = "darkblue";
-
-/** color used in the UI to show a layer is deactivated/hidden
-*
-* @final
-* @type String
-*/
-OpenLayers.Control.LayerSwitcher.NONACTIVE_COLOR = "lightblue";
-
-
-OpenLayers.Control.LayerSwitcher.prototype =
- Object.extend( new OpenLayers.Control(), {
-
- /** @type String */
- activeColor: "",
-
- /** @type String */
- nonActiveColor: "",
-
- /** @type String */
- mode: "checkbox",
-
- /**
- * @constructor
- */
- initialize: function(options) {
- this.activeColor = OpenLayers.Control.LayerSwitcher.ACTIVE_COLOR;
- this.nonActiveColor = OpenLayers.Control.LayerSwitcher.NONACTIVE_COLOR;
- this.backdrops = [];
- OpenLayers.Control.prototype.initialize.apply(this, arguments);
- },
-
- /**
- * @returns A reference to the DIV DOMElement containing the switcher tabs
- * @type DOMElement
- */
- draw: function() {
- // initialize our internal div
- OpenLayers.Control.prototype.draw.apply(this);
-
- 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.color = "white";
- 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.width = "10em";
-
- this.map.events.register("addlayer", this, this.redraw);
- this.map.events.register("removelayer", this, this.redraw);
- return this.redraw();
- },
-
- /**
- * @returns A reference to the DIV DOMElement containing the switcher tabs
- * @type DOMElement
- */
- redraw: function() {
-
- //clear out previous incarnation of LayerSwitcher tabs
- this.div.innerHTML = "";
- var visible = false;
- for( var i = 0; i < this.map.layers.length; i++) {
- if (visible && this.mode == "radio") {
- this.map.layers[i].setVisibility(false);
- } else {
- visible = this.map.layers[i].getVisibility();
- }
- this.addTab(this.map.layers[i]);
- }
-
- return this.div;
- },
-
- /**
- * @param {event} evt
- */
- singleClick: function(evt) {
- var div = Event.element(evt);
-
- // See comment about OL #57 fix below.
- // If the click occurred on the corner spans we need
- // to make sure we act on the actual label tab instead.
- div = div.labelElement || div;
-
- var layer = div.layer;
- if (this.mode == "radio") {
- for(var i=0; i < this.backdrops.length; i++) {
- this.setTabActivation(this.backdrops[i], false);
- this.backdrops[i].layer.setVisibility(false);
- }
- this.setTabActivation(div, true);
- layer.setVisibility(true);
- } else {
- var visible = layer.getVisibility();
-
- this.setTabActivation(div, !visible);
- layer.setVisibility(!visible);
- }
- Event.stop(evt);
- },
-
- /**
- * @private
- *
- * @param {event} evt
- */
- ignoreEvent: function(evt) {
- Event.stop(evt);
- return false;
- },
-
- /**
- * @private
- *
- * @param {OpenLayers.Layer} layer
- */
- addTab: function(layer) {
-
- // Outer DIV - for Rico Corners
- //
- var backdropLabelOuter = document.createElement('div');
- backdropLabelOuter.id = "LayerSwitcher_" + layer.name + "_Tab";
- backdropLabelOuter.style.marginTop = "4px";
- backdropLabelOuter.style.marginBottom = "4px";
-
- this._setEventHandlers(backdropLabelOuter);
-
- // Inner Label - for Rico Corners
- //
- var backdropLabel = document.createElement('p');
- backdropLabel.innerHTML = layer.name;
- backdropLabel.style.marginTop = "0px";
- backdropLabel.style.marginBottom = "0px";
- backdropLabel.style.paddingLeft = "10px";
- backdropLabel.style.paddingRight = "10px";
-
- // add reference to layer onto the div for use in event handlers
- backdropLabel.layer = layer;
-
- // set event handlers
- this._setEventHandlers(backdropLabel);
-
- // add label to div
- backdropLabelOuter.appendChild(backdropLabel);
-
- this.backdrops.append(backdropLabel);
-
- // add div to main LayerSwitcher Div
- this.div.appendChild(backdropLabelOuter);
-
- Rico.Corner.round(backdropLabelOuter, {corners: "tl bl",
- bgColor: "transparent",
- color: "white",
- blend: false});
-
- // extend the event handlers to operate on the
- // rounded corners as well. (Fixes OL #57.)
- var spanElements=backdropLabel.parentNode.getElementsByTagName("span");
-
- for (var currIdx = 0; currIdx < spanElements.length; currIdx++) {
- this._setEventHandlers(spanElements[currIdx], backdropLabel);
- }
-
- this.setTabActivation(backdropLabel, layer.getVisibility());
- },
-
- /*
- @private
-
- @param {DOMElement} div
- @param {Boolean} activate
- */
- _setEventHandlers : function(element, labelDiv) {
-
- // We only want to respond to a mousedown event.
- element.onclick = this.singleClick.bindAsEventListener(this);
- element.ondblclick = this.singleClick.bindAsEventListener(this);
- element.onmouseup = this.ignoreEvent.bindAsEventListener(this);
- element.onmousedown = this.ignoreEvent.bindAsEventListener(this);
-
- // If we are operating on a corner span we need to store a
- // reference to the actual tab. (See comment about OL #57 fix above.)
- if (labelDiv) {
- element.labelElement = labelDiv;
- }
- },
-
- /**
- * @private
- *
- * @param {DOMElement} div
- * @param {Boolean} activate
- */
- setTabActivation:function(div, activate) {
- var color = (activate) ? this.activeColor : this.nonActiveColor;
- Rico.Corner.changeColor(div, color);
- },
-
-
-
- /** @final @type String */
- CLASS_NAME: "OpenLayers.Control.LayerSwitcher"
-});
-