OpenLayers OpenLayers

Changeset 10035

Show
Ignore:
Timestamp:
02/09/10 12:30:02 (1 month ago)
Author:
ahocevar
Message:

Give the GetFeature control a beforefeaturesselected and featuresselected event. p=komacke, r=me (closes #2442)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openlayers/lib/OpenLayers/Control/GetFeature.js

    r9770 r10035  
    162162     *      selected. The event object has a feature property with the 
    163163     *      selected feature 
     164     * beforefeaturesselected - Triggered when <click> is true before a 
     165     *      set of features is selected. The event object is an array of 
     166     *      feature properties with the features about to be selected.   
     167     *      Return false after receiving this event to discontinue processing 
     168     *      of all featureselected events and the featuresselected event. 
     169     * featuresselected - Triggered when <click> is true and a set of 
     170     *      features is selected.  The event object is an array of feature 
     171     *      properties of the selected features 
    164172     * featureunselected - Triggered when <click> is true and a feature is 
    165173     *      unselected. The event object has a feature property with the 
     
    172180     *      moved away from a hover-selected feature 
    173181     */ 
    174     EVENT_TYPES: ["featureselected", "featureunselected", "clickout", 
    175         "beforefeatureselected", "hoverfeature", "outfeature"], 
     182    EVENT_TYPES: ["featureselected", "featuresselected", "featureunselected",  
     183        "clickout", "beforefeatureselected", "beforefeaturesselected",  
     184        "hoverfeature", "outfeature"], 
    176185 
    177186    /** 
     
    436445     * Method: select 
    437446     * Add feature to the hash of selected features and trigger the 
    438      * featureselected event
     447     * featureselected and featuresselected events
    439448     *  
    440449     * Parameters: 
     
    449458        } 
    450459         
    451         var feature; 
    452         for(var i=0, len=features.length; i<len; ++i) { 
    453             feature = features[i]; 
    454             if(this.features[feature.fid || feature.id]) { 
    455                 if(this.modifiers.toggle) { 
    456                     this.unselect(this.features[feature.fid || feature.id]); 
    457                 } 
    458             } else { 
    459                 cont = this.events.triggerEvent("beforefeatureselected", { 
    460                     feature: feature 
    461                 }); 
    462                 if(cont !== false) { 
    463                     this.features[feature.fid || feature.id] = feature; 
    464              
    465                     this.events.triggerEvent("featureselected", 
    466                         {feature: feature}); 
     460        cont = this.events.triggerEvent("beforefeaturesselected", { 
     461            features: features 
     462        }); 
     463        if(cont !== false) { 
     464            var selectedFeatures = []; 
     465            var feature; 
     466            for(var i=0, len=features.length; i<len; ++i) { 
     467                feature = features[i]; 
     468                if(this.features[feature.fid || feature.id]) { 
     469                    if(this.modifiers.toggle) { 
     470                        this.unselect(this.features[feature.fid || feature.id]); 
     471                    } 
     472                } else { 
     473                    cont = this.events.triggerEvent("beforefeatureselected", { 
     474                        feature: feature 
     475                    }); 
     476                    if(cont !== false) { 
     477                        this.features[feature.fid || feature.id] = feature; 
     478                        selectedFeatures.push(feature); 
     479                 
     480                        this.events.triggerEvent("featureselected", 
     481                            {feature: feature}); 
     482                    } 
    467483                } 
    468484            } 
     485            this.events.triggerEvent("featuresselected", { 
     486                features: selectedFeatures 
     487            }); 
    469488        } 
    470489    }, 
  • trunk/openlayers/tests/Control/GetFeature.html

    r9770 r10035  
    2323     
    2424    function test_Control_GetFeature_select(t) { 
    25         t.plan(3); 
     25        t.plan(5); 
    2626        var map = new OpenLayers.Map("map"); 
    2727        var layer = new OpenLayers.Layer.WMS("foo", "wms", { 
     
    3232        var feature1 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(1,2)); 
    3333        var feature2 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(2,3)); 
     34        var feature3 = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(3,1)); 
    3435        var control = new OpenLayers.Control.GetFeature({ 
    3536            protocol: new OpenLayers.Protocol({ 
    3637                read: function(obj) { 
    3738                    obj.callback.call(obj.scope, { 
    38                         features: [feature1, feature2], 
     39                        features: [feature1, feature2, feature3], 
    3940                        success: function() {return true;} 
    4041                    }); 
     
    5253        control.events.unregister("featureselected", this, singleTest); 
    5354         
    54         var features = [] 
     55        var count = 0; 
     56        var beforeFeatureSelected = function(evt) { 
     57             count++; 
     58             return count < 3; 
     59        } 
     60        var features = []; 
    5561        var boxTest = function(evt) { 
    5662            features.push(evt.feature); 
    5763        } 
     64        var beforeFeaturesSelected = function(evt) { 
     65            t.eq(evt.features.length, 3, "3 features passed to the beforefeaturesselected handler"); 
     66        } 
     67        var featuresSelected = function(evt) { 
     68            t.eq(evt.features.length, 2, "2 features passed to the featuresselected handler"); 
     69        } 
     70        control.events.register("beforefeatureselected", this, beforeFeatureSelected); 
    5871        control.events.register("featureselected", this, boxTest); 
     72        control.events.register("beforefeaturesselected", this, beforeFeaturesSelected); 
     73        control.events.register("featuresselected", this, featuresSelected); 
    5974        control.selectBox(new OpenLayers.Bounds(0,0,4,4)); 
     75        control.events.unregister("beforefeatureselected", this, beforeFeatureSelected); 
    6076        control.events.unregister("featureselected", this, boxTest); 
     77        control.events.unregister("beforefeaturesselected", this, beforeFeaturesSelected); 
     78        control.events.unregister("featuresselected", this, featuresSelected); 
    6179        t.eq(features.length, 2, "2 features inside box selected"); 
    6280        t.eq(features[1].id, feature2.id, "featureselected callback called with multiple features");