OpenLayers OpenLayers

Ticket #1427: t1427.patch

File t1427.patch, 10.5 kB (added by tschaub, 5 months ago)

feature select and modify events

  • tests/Control/ModifyFeature.html

    old new  
    164164    }     
    165165 
    166166    function test_selectFeature(t) { 
    167         t.plan(15); 
    168         var layer = new OpenLayers.Layer.Vector(); 
     167        t.plan(12); 
     168        var map = new OpenLayers.Map('map'); 
     169        var layer = new OpenLayers.Layer.Vector("Vectors!", {isBaseLayer: true}); 
     170        map.addLayer(layer); 
     171        map.setCenter(new OpenLayers.LonLat(0, 0)); 
    169172        var control = new OpenLayers.Control.ModifyFeature(layer); 
    170173        control.vertices = []; 
    171174        control.virtualVertices = []; 
    172         layer.events.on({"beforefeaturemodified": function(event) { 
    173             t.eq(event.feature, fakeFeature, "beforefeaturemodified triggered"); 
    174         }}); 
     175        var callback = function(obj) { 
     176            t.ok(obj.feature == fakeFeature, "beforefeaturemodified triggered"); 
     177        }; 
     178        layer.events.on({"beforefeaturemodified": callback}); 
    175179        control.dragControl.activate = function() { t.ok(true, "drag Control activated"); } 
    176180        control.onModificationStart = function(feature)  { t.eq(feature.id, fakeFeature.id, "On Modification Start called with correct feature."); }  
    177181         
    178          
    179182        // Start of testing 
    180183         
    181184        control.collectVertices = function() { t.fail("Collect vertices called when geom is a point"); } 
    182         var fakeFeature = {'id':'myFakeFeature','geometry':{'CLASS_NAME':'OpenLayers.Geometry.Point'}}
     185        var fakeFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(0, 0))
    183186         
    184187        // Points don't call collectVertices 
    185188        control.selectFeature({feature: fakeFeature}); 
     
    195198        layer.addFeatures = function(features) {  
    196199            t.ok(features == 'a' || features == 'd', "features passed correctly");  
    197200        } 
    198         fakeFeature.geometry.CLASS_NAME='OpenLayers.Geometry.Polygon'; 
    199201         
     202        fakeFeature.geometry = new OpenLayers.Geometry.Polygon([ 
     203            new OpenLayers.Geometry.LinearRing([ 
     204                new OpenLayers.Geometry.Point(0, 0), 
     205                new OpenLayers.Geometry.Point(1, 1) 
     206            ]) 
     207        ]); 
     208         
    200209        // OnSelect calls collectVertices and passes features to layer  
    201210        control.selectFeature({feature: fakeFeature}); 
    202211         
     
    349358    } 
    350359 
    351360    function test_onModificationStart(t) { 
    352         t.plan(2); 
     361        t.plan(1); 
    353362        var map = new OpenLayers.Map("map"); 
    354363        var layer = new OpenLayers.Layer.Vector(); 
    355364        map.addLayer(layer); 
     
    357366        map.addControl(control); 
    358367        control.activate(); 
    359368         
    360         // test that beforefeaturemodified is triggered 
    361         layer.events.on({"beforefeaturemodified": function(event) { 
    362             t.eq(event.feature.id, testFeature.id, 
    363                  "beforefeaturemodified is triggered with correct feature"); 
    364         }}); 
    365          
    366369        // make sure onModificationStart is called on feature selection 
    367370        var testFeature = new OpenLayers.Feature.Vector( 
    368371            new OpenLayers.Geometry.Point(Math.random(), Math.random()) 
     
    445448         
    446449        map.destroy(); 
    447450    } 
     451     
     452    function test_events(t) { 
     453        t.plan(2); 
     454        var map = new OpenLayers.Map("map"); 
     455        var layer = new OpenLayers.Layer.Vector(); 
     456        map.addLayer(layer); 
     457        var control = new OpenLayers.Control.ModifyFeature(layer); 
     458        map.addControl(control); 
     459        control.activate(); 
     460         
     461        // make sure onModificationStart is called on feature selection 
     462        var testFeature = new OpenLayers.Feature.Vector( 
     463            new OpenLayers.Geometry.Point(Math.random(), Math.random()) 
     464        ); 
     465         
     466        // test that beforefeatureselected is triggered 
     467        function handle_beforefeatureselected(event) { 
     468            t.ok(event.feature == testFeature, "beforefeatureselected called with the correct feature"); 
     469        } 
     470        layer.events.on({ 
     471            "beforefeatureselected": handle_beforefeatureselected 
     472        }); 
     473        layer.events.triggerEvent("beforefeatureselected", { 
     474            feature: testFeature 
     475        }); 
     476        layer.events.un({ 
     477            "beforefeatureselected": handle_beforefeatureselected 
     478        }); 
     479         
     480        // test that beforefeatureselected is triggered 
     481        function handle_featureselected(event) { 
     482            t.ok(event.feature == testFeature, "featureselected called with the correct feature"); 
     483        } 
     484        layer.events.on({ 
     485            "featureselected": handle_featureselected 
     486        }); 
     487        layer.events.triggerEvent("featureselected", { 
     488            feature: testFeature 
     489        }); 
     490        layer.events.un({ 
     491            "featureselected": handle_featureselected 
     492        }); 
    448493 
     494        map.destroy(); 
     495    } 
    449496 
     497 
     498 
    450499    </script> 
    451500</head> 
    452501<body> 
  • lib/OpenLayers/Control/SelectFeature.js

    old new  
    308308     * feature - {<OpenLayers.Feature.Vector>}  
    309309     */ 
    310310    select: function(feature) { 
    311         this.layer.selectedFeatures.push(feature); 
    312  
    313         var selectStyle = this.selectStyle || this.renderIntent; 
    314          
    315         this.layer.drawFeature(feature, selectStyle); 
    316         this.layer.events.triggerEvent("featureselected", {feature: feature}); 
    317         this.onSelect(feature); 
     311        var cont = this.layer.events.triggerEvent("beforefeatureselected", { 
     312            feature: feature 
     313        }); 
     314        if(cont !== false) { 
     315            this.layer.selectedFeatures.push(feature); 
     316     
     317            var selectStyle = this.selectStyle || this.renderIntent; 
     318             
     319            this.layer.drawFeature(feature, selectStyle); 
     320            this.layer.events.triggerEvent("featureselected", {feature: feature}); 
     321            this.onSelect(feature); 
     322        } 
    318323    }, 
    319324 
    320325    /** 
     
    323328     * normal, and call the onUnselect function. 
    324329     * 
    325330     * Parameters: 
    326      * feature - {<OpenLayers.Feature.Vector>}  
     331     * feature - {<OpenLayers.Feature.Vector>} 
    327332     */ 
    328333    unselect: function(feature) { 
    329334        // Store feature style for restoration later 
  • lib/OpenLayers/Control/ModifyFeature.js

    old new  
    201201            layer, selectOptions 
    202202        ); 
    203203        this.layer.events.on({ 
     204            "beforefeatureselected": this.beforeSelectFeature, 
    204205            "featureselected": this.selectFeature, 
    205206            "featureunselected": this.unselectFeature, 
    206207            scope: this 
     
    239240     */ 
    240241    destroy: function() { 
    241242        this.layer.events.un({ 
     243            "beforefeatureselected": this.beforeSelectFeature, 
    242244            "featureselected": this.selectFeature, 
    243245            "featureunselected": this.unselectFeature, 
    244246            scope: this 
     
    287289        } 
    288290        return deactivated; 
    289291    }, 
     292     
     293    /** 
     294     * Method: beforeSelectFeature 
     295     * Called before a feature is selected. 
     296     * 
     297     * Parameters: 
     298     * object - {Object} Object with a feature property referencing the 
     299     *     selected feature. 
     300     */ 
     301    beforeSelectFeature: function(object) { 
     302        return this.layer.events.triggerEvent( 
     303            "beforefeaturemodified", {feature: object.feature} 
     304        ); 
     305    }, 
    290306 
    291307    /** 
    292308     * Method: selectFeature 
     
    301317        this.resetVertices(); 
    302318        this.dragControl.activate(); 
    303319        this.onModificationStart(this.feature); 
    304         this.layer.events.triggerEvent("beforefeaturemodified",  
    305                                        {feature: this.feature}); 
    306320    }, 
    307321 
    308322    /** 
  • lib/OpenLayers/Layer/Vector.js

    old new  
    7272     */ 
    7373    EVENT_TYPES: ["beforefeatureadded", "featureadded", "featuresadded", 
    7474                  "beforefeatureremoved", "featureremoved", "featuresremoved", 
    75                   "featureselected", "featureunselected",  
     75                  "beforefeatureselected", "featureselected", "featureunselected",  
    7676                  "beforefeaturemodified", "featuremodified", "afterfeaturemodified"], 
    7777 
    7878    /** 
  • examples/modify-feature.html

    old new  
    2929            map.addControl(new OpenLayers.Control.LayerSwitcher()); 
    3030            map.addControl(new OpenLayers.Control.MousePosition()); 
    3131             
    32             var modifyOptions = { 
    33                 onModificationStart: function(feature) { 
    34                     OpenLayers.Console.log("start modifying", feature.id); 
    35                 }, 
    36                 onModification: function(feature) { 
    37                     OpenLayers.Console.log("modified", feature.id); 
    38                 }, 
    39                 onModificationEnd: function(feature) { 
    40                     OpenLayers.Console.log("end modifying", feature.id); 
    41                 }, 
    42                 onDelete: function(feature) { 
    43                     OpenLayers.Console.log("delete", feature.id); 
    44                 } 
    45             }; 
     32            function report(event) { 
     33                OpenLayers.Console.log(event.type, event.feature.id); 
     34            } 
     35            vectors.events.on({ 
     36                "beforefeaturemodified": report, 
     37                "featuremodified": report, 
     38                "afterfeaturemodified": report 
     39            }); 
    4640            controls = { 
    4741                point: new OpenLayers.Control.DrawFeature(vectors, 
    4842                            OpenLayers.Handler.Point), 
     
    5347                regular: new OpenLayers.Control.DrawFeature(vectors, 
    5448                            OpenLayers.Handler.RegularPolygon, 
    5549                            {handlerOptions: {sides: 5}}), 
    56                 modify: new OpenLayers.Control.ModifyFeature(vectors, 
    57                                                              modifyOptions) 
     50                modify: new OpenLayers.Control.ModifyFeature(vectors) 
    5851            }; 
    5952             
    6053            for(var key in controls) {