refactor range checking into map and store a state variable in layer so that we dont fire changelayer every time user zooms
git-svn-id: http://svn.openlayers.org/trunk/openlayers@1606 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -130,7 +130,7 @@ OpenLayers.Control.LayerSwitcher.prototype =
|
|||||||
inputElem.layer = layer;
|
inputElem.layer = layer;
|
||||||
inputElem.control = this;
|
inputElem.control = this;
|
||||||
|
|
||||||
if (!baseLayer && !layer.inRange()) {
|
if (!baseLayer && !layer.inRange) {
|
||||||
inputElem.disabled = true;
|
inputElem.disabled = true;
|
||||||
}
|
}
|
||||||
OpenLayers.Event.observe(inputElem, "mouseup",
|
OpenLayers.Event.observe(inputElem, "mouseup",
|
||||||
@@ -138,7 +138,7 @@ OpenLayers.Control.LayerSwitcher.prototype =
|
|||||||
|
|
||||||
// create span
|
// create span
|
||||||
var labelSpan = document.createElement("span");
|
var labelSpan = document.createElement("span");
|
||||||
if (!baseLayer && !layer.inRange()) {
|
if (!baseLayer && !layer.inRange) {
|
||||||
labelSpan.style.color = "grey";
|
labelSpan.style.color = "grey";
|
||||||
}
|
}
|
||||||
labelSpan.innerHTML = layer.name;
|
labelSpan.innerHTML = layer.name;
|
||||||
|
|||||||
+10
-5
@@ -47,6 +47,14 @@ OpenLayers.Layer.prototype = {
|
|||||||
*/
|
*/
|
||||||
visibility: true,
|
visibility: true,
|
||||||
|
|
||||||
|
/** Whether or not the map's current resolution is within this layer's
|
||||||
|
* min/max range -- this is set in map's setCenter() whenever zoom
|
||||||
|
* changes
|
||||||
|
*
|
||||||
|
* @type Boolean
|
||||||
|
*/
|
||||||
|
inRange: false,
|
||||||
|
|
||||||
// OPTIONS
|
// OPTIONS
|
||||||
|
|
||||||
/** @type Array */
|
/** @type Array */
|
||||||
@@ -186,10 +194,7 @@ OpenLayers.Layer.prototype = {
|
|||||||
* @param {Boolean} dragging
|
* @param {Boolean} dragging
|
||||||
*/
|
*/
|
||||||
moveTo:function(bounds, zoomChanged, dragging) {
|
moveTo:function(bounds, zoomChanged, dragging) {
|
||||||
if (zoomChanged) {
|
this.display(this.visibility && this.inRange);
|
||||||
this.display(this.visibility && this.inRange());
|
|
||||||
this.map.events.triggerEvent("changelayer");
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/** Set the map property for the layer. This is done through an accessor
|
/** Set the map property for the layer. This is done through an accessor
|
||||||
@@ -266,7 +271,7 @@ OpenLayers.Layer.prototype = {
|
|||||||
* current resolution
|
* current resolution
|
||||||
* @type Boolean
|
* @type Boolean
|
||||||
*/
|
*/
|
||||||
inRange: function() {
|
calculateInRange: function() {
|
||||||
var inRange = false;
|
var inRange = false;
|
||||||
if (this.map) {
|
if (this.map) {
|
||||||
var resolution = this.map.getResolution();
|
var resolution = this.map.getResolution();
|
||||||
|
|||||||
@@ -691,7 +691,14 @@ OpenLayers.Map.prototype = {
|
|||||||
var bounds = this.getExtent();
|
var bounds = this.getExtent();
|
||||||
for (var i = 0; i < this.layers.length; i++) {
|
for (var i = 0; i < this.layers.length; i++) {
|
||||||
var layer = this.layers[i];
|
var layer = this.layers[i];
|
||||||
if (zoomChanged || (layer.display && layer.inRange())) {
|
|
||||||
|
var inRange = layer.calculateInRange();
|
||||||
|
if (layer.inRange != inRange) {
|
||||||
|
layer.inRange = inRange;
|
||||||
|
this.events.triggerEvent("changelayer");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zoomChanged || (layer.display && layer.inRange)) {
|
||||||
layer.moveTo(bounds, zoomChanged, dragging);
|
layer.moveTo(bounds, zoomChanged, dragging);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user