OpenLayers OpenLayers

Ticket #1562: patch-1562-r7288-A0.diff

File patch-1562-r7288-A0.diff, 6.2 kB (added by elemoine, 6 months ago)
  • tests/Control/ModifyFeature.html

    old new  
    213213        control.selectFeature({feature: fakeFeature}); 
    214214         
    215215        control.destroy(); 
     216 
     217        // layer.destroy() will call removeFeatures with an empty array, make 
     218        // removeFeatures reference an empty function to prevent the above 
     219        // test to fail 
     220        layer.removeFeatures = function(features) {}; 
    216221        layer.destroy(); 
    217222    }   
    218223 
     
    323328        control.dragComplete(); 
    324329         
    325330        control.destroy(); 
     331 
     332        // layer.destroy() will call removeFeatures with an empty array, make 
     333        // removeFeatures reference an empty function to prevent the above 
     334        // test to fail 
     335        layer.removeFeatures = function(verts) {}; 
    326336        layer.destroy(); 
    327337    } 
    328338     
  • lib/OpenLayers/Control/ModifyFeature.js

    old new  
    273273        var deactivated = false; 
    274274        // the return from the controls is unimportant in this case 
    275275        if(OpenLayers.Control.prototype.deactivate.apply(this, arguments)) { 
    276             this.layer.removeFeatures(this.vertices); 
    277             this.layer.removeFeatures(this.virtualVertices); 
     276            this.layer.removeFeatures(this.vertices, {silent: true}); 
     277            this.layer.removeFeatures(this.virtualVertices, {silent: true}); 
    278278            this.vertices = []; 
    279279            this.dragControl.deactivate(); 
    280280            if(this.feature && this.feature.geometry) { 
     
    314314     *     unselected feature. 
    315315     */ 
    316316    unselectFeature: function(object) { 
    317         this.layer.removeFeatures(this.vertices); 
     317        this.layer.removeFeatures(this.vertices, {silent: true}); 
    318318        this.vertices = []; 
    319         this.layer.destroyFeatures(this.virtualVertices); 
     319        this.layer.destroyFeatures(this.virtualVertices, {silent: true}); 
    320320        this.virtualVertices = []; 
    321321        if(this.dragHandle) { 
    322             this.layer.destroyFeatures([this.dragHandle]); 
     322            this.layer.destroyFeatures([this.dragHandle], {silent: true}); 
    323323            delete this.dragHandle; 
    324324        } 
    325325        if(this.radiusHandle) { 
    326             this.layer.destroyFeatures([this.radiusHandle]); 
     326            this.layer.destroyFeatures([this.radiusHandle], {silent: true}); 
    327327            delete this.radiusHandle; 
    328328        } 
    329329        this.feature = null; 
     
    413413                this.vertices.push(vertex); 
    414414            } else if(vertex == this.dragHandle) { 
    415415                // dragging a drag handle 
    416                 this.layer.removeFeatures(this.vertices); 
     416                this.layer.removeFeatures(this.vertices, {silent: true}); 
    417417                this.vertices = []; 
    418418                if(this.radiusHandle) { 
    419                     this.layer.destroyFeatures([this.radiusHandle]); 
     419                    this.layer.destroyFeatures([this.radiusHandle], {silent: true}); 
    420420                    this.radiusHandle = null; 
    421421                } 
    422422            } 
    423423            // dragging a radius handle - no special treatment 
    424424            // dragging a real vertex - no special treatment 
    425425            if(this.virtualVertices.length > 0) { 
    426                 this.layer.destroyFeatures(this.virtualVertices); 
     426                this.layer.destroyFeatures(this.virtualVertices, {silent: true}); 
    427427                this.virtualVertices = []; 
    428428            } 
    429429            this.layer.drawFeature(this.feature, this.selectControl.renderIntent); 
     
    463463            this.dragControl.outFeature(this.dragControl.feature); 
    464464        } 
    465465        if(this.vertices.length > 0) { 
    466             this.layer.removeFeatures(this.vertices); 
     466            this.layer.removeFeatures(this.vertices, {silent: true}); 
    467467            this.vertices = []; 
    468468        } 
    469469        if(this.virtualVertices.length > 0) { 
    470             this.layer.removeFeatures(this.virtualVertices); 
     470            this.layer.removeFeatures(this.virtualVertices, {silent: true}); 
    471471            this.virtualVertices = []; 
    472472        } 
    473473        if(this.dragHandle) { 
    474             this.layer.destroyFeatures([this.dragHandle]); 
     474            this.layer.destroyFeatures([this.dragHandle], {silent: true}); 
    475475            this.dragHandle = null; 
    476476        } 
    477477        if(this.radiusHandle) { 
    478             this.layer.destroyFeatures([this.radiusHandle]); 
     478            this.layer.destroyFeatures([this.radiusHandle], {silent: true}); 
    479479            this.radiusHandle = null; 
    480480        } 
    481481        if(this.feature && 
  • lib/OpenLayers/Layer/Vector.js

    old new  
    398398            } 
    399399 
    400400            this.features = OpenLayers.Util.removeItem(this.features, feature); 
     401            // feature has no layer at this point 
     402            feature.layer = null; 
    401403 
    402404            if (feature.geometry) { 
    403405                this.renderer.eraseGeometry(feature.geometry); 
     
    429431     * features - {Array(<OpenLayers.Feature.Vector>)} An optional array of 
    430432     *     features to destroy.  If not supplied, all features on the layer 
    431433     *     will be destroyed. 
     434     * options - {Object} 
    432435     */ 
    433     destroyFeatures: function(features) { 
    434         var all = (features == undefined); 
     436    destroyFeatures: function(features, options) { 
     437        var all = (features == undefined); // evaluates to true if 
     438                                           // features is null 
    435439        if(all) { 
    436440            features = this.features; 
    437             this.selectedFeatures = []; 
    438441        } 
    439         this.eraseFeatures(features); 
    440         var feature; 
    441         for(var i=features.length-1; i>=0; i--) { 
    442             feature = features[i]; 
    443             if(!all) { 
    444                 OpenLayers.Util.removeItem(this.selectedFeatures, feature); 
    445             } 
    446             feature.destroy(); 
     442        this.removeFeatures(features, options); 
     443        for (var i = 0; i < features.length; i++) { 
     444            features[i].destroy(); 
    447445        } 
    448446    }, 
    449447