new layerswitcher, improved google layer, boxes layer, grid fix

git-svn-id: http://svn.openlayers.org/trunk/openlayers@1096 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
euzuro
2006-08-08 18:20:24 +00:00
parent 138d22af3f
commit f3a072b151
38 changed files with 1474 additions and 353 deletions
+69 -19
View File
@@ -23,7 +23,7 @@ OpenLayers.Map.prototype = {
* @type Array */
EVENT_TYPES: [
"addlayer", "removelayer", "changelayer", "movestart", "move",
"moveend", "zoomend", "layerchanged", "popupopen", "popupclose",
"moveend", "zoomend", "popupopen", "popupclose",
"addmarker", "removemarker", "clearmarkers", "mouseover",
"mouseout", "mousemove", "dragstart", "drag", "dragend",
"changebaselayer"],
@@ -258,7 +258,6 @@ OpenLayers.Map.prototype = {
* @param {OpenLayers.Layer} layer
*/
addLayer: function (layer) {
layer.setMap(this);
layer.div.style.overflow = "";
layer.div.style.zIndex = this.Z_INDEX_BASE['Layer'] + this.layers.length;
@@ -268,6 +267,7 @@ OpenLayers.Map.prototype = {
this.layerContainerDiv.appendChild(layer.div);
}
this.layers.push(layer);
layer.setMap(this);
this.events.triggerEvent("addlayer");
@@ -277,15 +277,14 @@ OpenLayers.Map.prototype = {
layer.moveTo(bounds, true);
}
// hack hack hack - until we add a more robust layer switcher,
// which is able to determine which layers are base layers and
// which are not (and put baselayers in a radiobutton group and
// other layers in checkboxes) this seems to be the most straight-
// forward way of dealing with this.
//
if ( (this.baseLayer == null) && (layer.isBaseLayer()) ) {
this.baseLayer = layer;
this.events.triggerEvent("changebaselayer");
if (layer.isBaseLayer) {
// set the first baselaye we add as the baselayer
if (this.baseLayer == null) {
this.setBaseLayer(layer);
this.events.triggerEvent("changebaselayer");
} else {
layer.setVisibility(false);
}
}
},
@@ -329,19 +328,60 @@ OpenLayers.Map.prototype = {
} else {
this.layerContainerDiv.removeChild(layer.div);
}
layer.map = null;
this.layers.remove(layer);
// if we removed the base layer, need to set a new one
if (this.baseLayer == layer) {
this.baseLayer = null;
for(i=0; i < this.layers.length; i++) {
if ( (this.baseLayer == null) && (this.layers[i].isBaseLayer()) ) {
this.baseLayer = this.layers[i];
continue;
var iLayer = this.layers[i];
if (iLayer.isBaseLayer) {
this.setBaseLayer(iLayer);
break;
}
}
}
layer.map = null;
this.events.triggerEvent("removelayer");
},
/** Allows user to specify one of the currently-loaded layers as the Map's
* new base layer.
*
* @param {OpenLayers.Layer} newBaseLayer
* @param {Boolean} noEvent
*/
setBaseLayer: function(newBaseLayer, noEvent) {
if (newBaseLayer != this.baseLayer) {
// is newBaseLayer an already loaded layer?
var foundLayer = (this.layers.indexOf(newBaseLayer) != -1);
if (foundLayer) {
// make the old base layer invisible
if (this.baseLayer != null) {
this.baseLayer.setVisibility(false, noEvent);
}
// set new baselayer
this.baseLayer = newBaseLayer;
// make the new one visible
this.baseLayer.setVisibility(true, noEvent);
// now go back and reproject
for(var i=0; i < this.layers.length; i++) {
this.layers[i].reproject();
}
if ((noEvent == null) || (noEvent == false)) {
this.events.triggerEvent("changebaselayer");
}
}
}
},
/**
* @param {OpenLayers.Control} control
@@ -912,8 +952,13 @@ OpenLayers.Map.prototype = {
* @type OpenLayers.Pixel
*/
getViewPortPxFromLayerPx:function(layerPx) {
return layerPx.add(parseInt(this.layerContainerDiv.style.left),
parseInt(this.layerContainerDiv.style.top) );
var viewPortPx = null;
if (layerPx != null) {
var dX = parseInt(this.layerContainerDiv.style.left);
var dY = parseInt(this.layerContainerDiv.style.top);
viewPortPx = layerPx.add(dX, dY);
}
return viewPortPx;
},
/**
@@ -925,8 +970,13 @@ OpenLayers.Map.prototype = {
* @type OpenLayers.Pixel
*/
getLayerPxFromViewPortPx:function(viewPortPx) {
return viewPortPx.add(-parseInt(this.layerContainerDiv.style.left),
-parseInt(this.layerContainerDiv.style.top));
var layerPx = null;
if (viewPortPx != null) {
var dX = -parseInt(this.layerContainerDiv.style.left);
var dY = -parseInt(this.layerContainerDiv.style.top);
layerPx = viewPortPx.add(dX, dY);
}
return layerPx;
},
//