Give the GetFeature control a beforefeaturesselected and featuresselected event. p=komacke, r=me (closes #2442)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10035 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -161,6 +161,14 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
* featureselected - Triggered when <click> is true and a feature is
|
* featureselected - Triggered when <click> is true and a feature is
|
||||||
* selected. The event object has a feature property with the
|
* selected. The event object has a feature property with the
|
||||||
* selected feature
|
* selected feature
|
||||||
|
* beforefeaturesselected - Triggered when <click> is true before a
|
||||||
|
* set of features is selected. The event object is an array of
|
||||||
|
* feature properties with the features about to be selected.
|
||||||
|
* Return false after receiving this event to discontinue processing
|
||||||
|
* of all featureselected events and the featuresselected event.
|
||||||
|
* featuresselected - Triggered when <click> is true and a set of
|
||||||
|
* features is selected. The event object is an array of feature
|
||||||
|
* properties of the selected features
|
||||||
* featureunselected - Triggered when <click> is true and a feature is
|
* featureunselected - Triggered when <click> is true and a feature is
|
||||||
* unselected. The event object has a feature property with the
|
* unselected. The event object has a feature property with the
|
||||||
* unselected feature
|
* unselected feature
|
||||||
@@ -171,8 +179,9 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
* outfeature - Triggered when <hover> is true and the mouse moves
|
* outfeature - Triggered when <hover> is true and the mouse moves
|
||||||
* moved away from a hover-selected feature
|
* moved away from a hover-selected feature
|
||||||
*/
|
*/
|
||||||
EVENT_TYPES: ["featureselected", "featureunselected", "clickout",
|
EVENT_TYPES: ["featureselected", "featuresselected", "featureunselected",
|
||||||
"beforefeatureselected", "hoverfeature", "outfeature"],
|
"clickout", "beforefeatureselected", "beforefeaturesselected",
|
||||||
|
"hoverfeature", "outfeature"],
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor: OpenLayers.Control.GetFeature
|
* Constructor: OpenLayers.Control.GetFeature
|
||||||
@@ -435,7 +444,7 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
/**
|
/**
|
||||||
* Method: select
|
* Method: select
|
||||||
* Add feature to the hash of selected features and trigger the
|
* Add feature to the hash of selected features and trigger the
|
||||||
* featureselected event.
|
* featureselected and featuresselected events.
|
||||||
*
|
*
|
||||||
* Parameters:
|
* Parameters:
|
||||||
* features - {<OpenLayers.Feature.Vector>} or an array of features
|
* features - {<OpenLayers.Feature.Vector>} or an array of features
|
||||||
@@ -448,24 +457,34 @@ OpenLayers.Control.GetFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
features = [features];
|
features = [features];
|
||||||
}
|
}
|
||||||
|
|
||||||
var feature;
|
cont = this.events.triggerEvent("beforefeaturesselected", {
|
||||||
for(var i=0, len=features.length; i<len; ++i) {
|
features: features
|
||||||
feature = features[i];
|
});
|
||||||
if(this.features[feature.fid || feature.id]) {
|
if(cont !== false) {
|
||||||
if(this.modifiers.toggle) {
|
var selectedFeatures = [];
|
||||||
this.unselect(this.features[feature.fid || feature.id]);
|
var feature;
|
||||||
}
|
for(var i=0, len=features.length; i<len; ++i) {
|
||||||
} else {
|
feature = features[i];
|
||||||
cont = this.events.triggerEvent("beforefeatureselected", {
|
if(this.features[feature.fid || feature.id]) {
|
||||||
feature: feature
|
if(this.modifiers.toggle) {
|
||||||
});
|
this.unselect(this.features[feature.fid || feature.id]);
|
||||||
if(cont !== false) {
|
}
|
||||||
this.features[feature.fid || feature.id] = feature;
|
} else {
|
||||||
|
cont = this.events.triggerEvent("beforefeatureselected", {
|
||||||
this.events.triggerEvent("featureselected",
|
feature: feature
|
||||||
{feature: feature});
|
});
|
||||||
|
if(cont !== false) {
|
||||||
|
this.features[feature.fid || feature.id] = feature;
|
||||||
|
selectedFeatures.push(feature);
|
||||||
|
|
||||||
|
this.events.triggerEvent("featureselected",
|
||||||
|
{feature: feature});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this.events.triggerEvent("featuresselected", {
|
||||||
|
features: selectedFeatures
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_Control_GetFeature_select(t) {
|
function test_Control_GetFeature_select(t) {
|
||||||
t.plan(3);
|
t.plan(5);
|
||||||
var map = new OpenLayers.Map("map");
|
var map = new OpenLayers.Map("map");
|
||||||
var layer = new OpenLayers.Layer.WMS("foo", "wms", {
|
var layer = new OpenLayers.Layer.WMS("foo", "wms", {
|
||||||
layers: "foo"
|
layers: "foo"
|
||||||
@@ -31,11 +31,12 @@
|
|||||||
map.setCenter(new OpenLayers.LonLat(1,2));
|
map.setCenter(new OpenLayers.LonLat(1,2));
|
||||||
var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
|
var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2));
|
||||||
var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3));
|
var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3));
|
||||||
|
var feature3 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(3,1));
|
||||||
var control = new OpenLayers.Control.GetFeature({
|
var control = new OpenLayers.Control.GetFeature({
|
||||||
protocol: new OpenLayers.Protocol({
|
protocol: new OpenLayers.Protocol({
|
||||||
read: function(obj) {
|
read: function(obj) {
|
||||||
obj.callback.call(obj.scope, {
|
obj.callback.call(obj.scope, {
|
||||||
features: [feature1, feature2],
|
features: [feature1, feature2, feature3],
|
||||||
success: function() {return true;}
|
success: function() {return true;}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -51,13 +52,30 @@
|
|||||||
control.selectSingle({xy: new OpenLayers.Pixel(200, 125)});
|
control.selectSingle({xy: new OpenLayers.Pixel(200, 125)});
|
||||||
control.events.unregister("featureselected", this, singleTest);
|
control.events.unregister("featureselected", this, singleTest);
|
||||||
|
|
||||||
var features = []
|
var count = 0;
|
||||||
|
var beforeFeatureSelected = function(evt) {
|
||||||
|
count++;
|
||||||
|
return count < 3;
|
||||||
|
}
|
||||||
|
var features = [];
|
||||||
var boxTest = function(evt) {
|
var boxTest = function(evt) {
|
||||||
features.push(evt.feature);
|
features.push(evt.feature);
|
||||||
}
|
}
|
||||||
|
var beforeFeaturesSelected = function(evt) {
|
||||||
|
t.eq(evt.features.length, 3, "3 features passed to the beforefeaturesselected handler");
|
||||||
|
}
|
||||||
|
var featuresSelected = function(evt) {
|
||||||
|
t.eq(evt.features.length, 2, "2 features passed to the featuresselected handler");
|
||||||
|
}
|
||||||
|
control.events.register("beforefeatureselected", this, beforeFeatureSelected);
|
||||||
control.events.register("featureselected", this, boxTest);
|
control.events.register("featureselected", this, boxTest);
|
||||||
|
control.events.register("beforefeaturesselected", this, beforeFeaturesSelected);
|
||||||
|
control.events.register("featuresselected", this, featuresSelected);
|
||||||
control.selectBox(new OpenLayers.Bounds(0,0,4,4));
|
control.selectBox(new OpenLayers.Bounds(0,0,4,4));
|
||||||
|
control.events.unregister("beforefeatureselected", this, beforeFeatureSelected);
|
||||||
control.events.unregister("featureselected", this, boxTest);
|
control.events.unregister("featureselected", this, boxTest);
|
||||||
|
control.events.unregister("beforefeaturesselected", this, beforeFeaturesSelected);
|
||||||
|
control.events.unregister("featuresselected", this, featuresSelected);
|
||||||
t.eq(features.length, 2, "2 features inside box selected");
|
t.eq(features.length, 2, "2 features inside box selected");
|
||||||
t.eq(features[1].id, feature2.id, "featureselected callback called with multiple features");
|
t.eq(features[1].id, feature2.id, "featureselected callback called with multiple features");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user