Fire measurepartial synchronously if in freehand mode. Cancel delayed messages when measure completes, when control is deactivated, or when measure is canceled. p=jorix,me r=me (closes #2820)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@10799 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2010-09-28 21:57:00 +00:00
parent 059b83a52f
commit 1d1911e28d
2 changed files with 179 additions and 45 deletions

View File

@@ -93,7 +93,7 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
* {Number} Timeout id of trigger for measurepartial.
*/
delayedTrigger: null,
/**
* APIProperty: persist
* {Boolean} Keep the temporary measurement sketch drawn after the
@@ -130,12 +130,21 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
this.handler = new handler(this, this.callbacks, this.handlerOptions);
},
/**
* APIMethod: deactivate
*/
deactivate: function() {
this.cancelDelay();
return OpenLayers.Control.prototype.deactivate.apply(this, arguments);
},
/**
* APIMethod: cancel
* Stop the control from measuring. If <persist> is true, the temporary
* sketch will be erased.
*/
cancel: function() {
this.cancelDelay();
this.handler.cancel();
},
@@ -165,9 +174,7 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
* geometry - {<OpenLayers.Geometry>}
*/
measureComplete: function(geometry) {
if(this.delayedTrigger) {
window.clearTimeout(this.delayedTrigger);
}
this.cancelDelay();
this.measure(geometry, "measure");
},
@@ -180,10 +187,17 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
* geometry - {<OpenLayers.Geometry>} The sketch geometry.
*/
measurePartial: function(point, geometry) {
if (geometry.getLength() > 0) {
geometry = geometry.clone();
this.cancelDelay();
geometry = geometry.clone();
// when we're wating for a dblclick, we have to trigger measurepartial
// after some delay to deal with reflow issues in IE
if (this.handler.freehandMode(this.handler.evt)) {
// no dblclick in freehand mode
this.measure(geometry, "measurepartial");
} else {
this.delayedTrigger = window.setTimeout(
OpenLayers.Function.bind(function() {
this.delayedTrigger = null;
this.measure(geometry, "measurepartial");
}, this),
this.partialDelay
@@ -191,6 +205,17 @@ OpenLayers.Control.Measure = OpenLayers.Class(OpenLayers.Control, {
}
},
/**
* Method: cancelDelay
* Cancels the delay measurement that measurePartial began.
*/
cancelDelay: function() {
if (this.delayedTrigger !== null) {
window.clearTimeout(this.delayedTrigger);
this.delayedTrigger = null;
}
},
/**
* Method: measure
*