do not reuse event objects to avoid incorrect event types. r=bartvde (closes #3280)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@11958 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
ahocevar
2011-05-09 07:36:57 +00:00
parent 491a5c0f62
commit 5e7c501539
2 changed files with 34 additions and 5 deletions

View File

@@ -232,6 +232,9 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
this.dragControl.deactivate();
deactivated = true;
}
if (deactivated) {
this.unsetFeature();
}
return deactivated;
},
@@ -265,13 +268,15 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
scale: 1,
ratio: 1
});
var evt = {feature: feature};
var oldRotation = this.rotation;
var oldCenter = this.center;
OpenLayers.Util.extend(this, initialParams);
if(this.events.triggerEvent("beforesetfeature", evt) === false) {
var cont = this.events.triggerEvent("beforesetfeature",
{feature: feature}
);
if (cont === false) {
return;
}
@@ -303,7 +308,23 @@ OpenLayers.Control.TransformFeature = OpenLayers.Class(OpenLayers.Control, {
delete this._setfeature;
this.events.triggerEvent("setfeature", evt);
this.events.triggerEvent("setfeature", {feature: feature});
},
/**
* APIMethod: unsetFeature
* Remove the transformation box off any feature.
* If the control is active, it will be deactivated first.
*/
unsetFeature: function() {
if (this.active) {
this.deactivate();
} else {
this.feature = null;
this.rotation = 0;
this.scale = 1;
this.ratio = 1;
}
},
/**

View File

@@ -54,7 +54,7 @@
}
function test_setFeature(t) {
t.plan(4);
t.plan(6);
var map = new OpenLayers.Map("map", {allOverlays: true});
var layer = new OpenLayers.Layer.Vector();
var feature = new OpenLayers.Feature.Vector(
@@ -64,8 +64,16 @@
map.setCenter(new OpenLayers.LonLat(0, 0), 18);
var control = new OpenLayers.Control.TransformFeature(layer);
map.addControl(control);
var log = [];
control.events.on({
"beforesetfeature": function(e) { log.push(e); },
"setfeature": function(e) { log.push(e); }
});
control.setFeature(feature);
t.eq(log[0].type, "beforesetfeature", "beforesetfeature event fired with correct event type");
t.eq(log[1].type, "setfeature", "setfeature event fired with correct event type");
t.ok(control.active, "control activated on setFeature");
t.ok(feature.geometry.getBounds().equals(control.box.geometry.getBounds()), "box positioned correctly");
t.geom_eq(control.handles[0].geometry, control.box.geometry.components[0], "handle positioned with box");