diff --git a/lib/OpenLayers/Control/TransformFeature.js b/lib/OpenLayers/Control/TransformFeature.js index b539bbba7c..42faff7fea 100644 --- a/lib/OpenLayers/Control/TransformFeature.js +++ b/lib/OpenLayers/Control/TransformFeature.js @@ -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; + } }, /** diff --git a/tests/Control/TransformFeature.html b/tests/Control/TransformFeature.html index 2f6b1c1f26..00fb0a90b4 100644 --- a/tests/Control/TransformFeature.html +++ b/tests/Control/TransformFeature.html @@ -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");