patch for #452 - Adding events to Layer class to signal the start, end, and cancelling of a layer load. Thanks to Bart for the idea and followthrough with this patch.
git-svn-id: http://svn.openlayers.org/trunk/openlayers@2200 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -18,6 +18,15 @@ OpenLayers.Layer.prototype = {
|
|||||||
/** @type DOMElement */
|
/** @type DOMElement */
|
||||||
div: null,
|
div: null,
|
||||||
|
|
||||||
|
/** supported application event types
|
||||||
|
*
|
||||||
|
* @type Array */
|
||||||
|
EVENT_TYPES: [
|
||||||
|
"loadstart", "loadend", "loadcancel"],
|
||||||
|
|
||||||
|
/** @type OpenLayers.Events */
|
||||||
|
events: null,
|
||||||
|
|
||||||
/** This variable is set when the layer is added to the map, via the
|
/** This variable is set when the layer is added to the map, via the
|
||||||
* accessor function setMap()
|
* accessor function setMap()
|
||||||
*
|
*
|
||||||
@@ -121,6 +130,8 @@ OpenLayers.Layer.prototype = {
|
|||||||
this.div.style.height = "100%";
|
this.div.style.height = "100%";
|
||||||
this.div.id = this.id;
|
this.div.id = this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.events = new OpenLayers.Events(this, this.div, this.EVENT_TYPES);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -135,6 +146,7 @@ OpenLayers.Layer.prototype = {
|
|||||||
this.name = null;
|
this.name = null;
|
||||||
this.div = null;
|
this.div = null;
|
||||||
this.options = null;
|
this.options = null;
|
||||||
|
this.events = null;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ OpenLayers.Layer.WMS.Untiled.prototype =
|
|||||||
/** @type OpenLayers.Tile.Image */
|
/** @type OpenLayers.Tile.Image */
|
||||||
tile: null,
|
tile: null,
|
||||||
|
|
||||||
|
/** did the image finish loading before a new draw was initiated?
|
||||||
|
* @type Boolean */
|
||||||
|
doneLoading: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
@@ -108,6 +111,10 @@ OpenLayers.Layer.WMS.Untiled.prototype =
|
|||||||
* @param {Boolean} dragging
|
* @param {Boolean} dragging
|
||||||
*/
|
*/
|
||||||
moveTo:function(bounds, zoomChanged, dragging) {
|
moveTo:function(bounds, zoomChanged, dragging) {
|
||||||
|
if (!this.doneLoading) {
|
||||||
|
this.events.triggerEvent("loadcancel");
|
||||||
|
this.doneLoading = true;
|
||||||
|
}
|
||||||
OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply(this,arguments);
|
OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply(this,arguments);
|
||||||
|
|
||||||
if (bounds == null) {
|
if (bounds == null) {
|
||||||
@@ -155,10 +162,18 @@ OpenLayers.Layer.WMS.Untiled.prototype =
|
|||||||
this.tile = null;
|
this.tile = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.events.triggerEvent("loadstart");
|
||||||
|
this.doneLoading = false;
|
||||||
if (!this.tile) {
|
if (!this.tile) {
|
||||||
this.tile = new OpenLayers.Tile.Image(this, pos, tileBounds,
|
this.tile = new OpenLayers.Tile.Image(this, pos, tileBounds,
|
||||||
url, tileSize);
|
url, tileSize);
|
||||||
this.tile.draw();
|
this.tile.draw();
|
||||||
|
var onload = function() {
|
||||||
|
this.doneLoading = true;
|
||||||
|
this.events.triggerEvent("loadend");
|
||||||
|
}
|
||||||
|
OpenLayers.Event.observe(this.tile.imgDiv, 'load',
|
||||||
|
onload.bindAsEventListener(this));
|
||||||
} else {
|
} else {
|
||||||
this.tile.moveTo(tileBounds, pos);
|
this.tile.moveTo(tileBounds, pos);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user