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:
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user