Adding boxselectionstart and boxselectionend events.

Whitespace fixed from patch, and removed docs for beforefeatureselected and featureselected events because they are fired on the layer, not the control.
p=mosesonline, r=me (closes http://trac.osgeo.org/openlayers/ticket/3538)
This commit is contained in:
ahocevar
2012-01-23 14:30:36 +01:00
parent d579f42539
commit ae55f1a70c
2 changed files with 46 additions and 1 deletions

View File

@@ -26,6 +26,8 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
* - *beforefeaturehighlighted* Triggered before a feature is highlighted
* - *featurehighlighted* Triggered when a feature is highlighted
* - *featureunhighlighted* Triggered when a feature is unhighlighted
* - *boxselectionstart* Triggered before box selection starts
* - *boxselectionend* Triggered after box selection ends
*/
/**
@@ -556,6 +558,7 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
var prevMultiple = this.multiple;
this.multiple = true;
var layers = this.layers || [this.layer];
this.events.triggerEvent("boxselectionstart", {layers: layers});
var layer;
for(var l=0; l<layers.length; ++l) {
layer = layers[l];
@@ -577,6 +580,7 @@ OpenLayers.Control.SelectFeature = OpenLayers.Class(OpenLayers.Control, {
}
}
this.multiple = prevMultiple;
this.events.triggerEvent("boxselectionend", {layers: layers});
}
},

View File

@@ -173,6 +173,47 @@
}
function test_selectBox_events(t){
t.plan(8);
var map = new OpenLayers.Map("map");
var layer1 = new OpenLayers.Layer.Vector();
map.addLayer(layer1);
map.setBaseLayer(layer1);
var layer2 = new OpenLayers.Layer.Vector();
map.addLayer(layer2);
map.setCenter(new OpenLayers.LonLat(1,1));
var feature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,1));
layer1.addFeatures([feature]);
var control = new OpenLayers.Control.SelectFeature(layer1);
control.setMap(map);
map.getLonLatFromPixel = function(arg) {
return new OpenLayers.LonLat(arg.x, arg.y);
}
control.activate();
var firesBoxselectionstart = false;
var beforeSelectingNumberOfFeatures = -1;
var firesBoxselectionend = false;
var afterSelectingNumberOfFeatures = -1;
control.events.register("boxselectionstart",null, function(e){
firesBoxselectionstart=true;
t.eq(e.layers.length,1,"right number of layers in event boxselectionstart");
t.eq(layer1.id, e.layers[0].id,"correct layer in event boxselectionstart");
beforeSelectingNumberOfFeatures = e.layers[0].selectedFeatures.length;
});
control.events.register("boxselectionend",null, function(e){
firesBoxselectionend=true;
t.eq(e.layers.length,1,"right number of layers in event boxselectionend");
t.eq(layer1.id, e.layers[0].id,"correct layer in event boxselectionend");
afterSelectingNumberOfFeatures = e.layers[0].selectedFeatures.length;
});
var bounds = new OpenLayers.Bounds(-1, -1, 2, 2);
control.selectBox(bounds);
t.ok(firesBoxselectionstart,"selectBox fires boxselectionstart event");
t.eq(beforeSelectingNumberOfFeatures,0,"boxselectionstart fires before selection of feature");
t.ok(firesBoxselectionend,"selectBox fires boxselectionend event");
t.eq(afterSelectingNumberOfFeatures,1,"boxselectionend fires after feature selected");
}
function test_Control_SelectFeature_activate(t) {
t.plan(4);
var map = new OpenLayers.Map("map");