OpenLayers OpenLayers

Changeset 7614

Show
Ignore:
Timestamp:
07/30/08 16:26:13 (4 months ago)
Author:
elemoine
Message:

modify feature control must use silent:true when removing/destroying vertices, p=me, r=crschmidt (closes #1562)

Files:

Legend:

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

    r7213 r7614  
    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(); 
     
    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        } 
     
    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                } 
     
    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            } 
     
    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        } 
  • trunk/openlayers/lib/OpenLayers/Layer/Vector.js

    r7578 r7614  
    402402 
    403403            this.features = OpenLayers.Util.removeItem(this.features, feature); 
     404            // feature has no layer at this point 
     405            feature.layer = null; 
    404406 
    405407            if (feature.geometry) { 
     
    433435     *     features to destroy.  If not supplied, all features on the layer 
    434436     *     will be destroyed. 
    435      */ 
    436     destroyFeatures: function(features) { 
    437         var all = (features == undefined); 
     437     * options - {Object} 
     438     */ 
     439    destroyFeatures: function(features, options) { 
     440        var all = (features == undefined); // evaluates to true if 
     441                                           // features is null 
    438442        if(all) { 
    439443            features = this.features; 
    440             this.selectedFeatures = []; 
    441         } 
    442         this.eraseFeatures(features); 
    443         var feature; 
    444         for(var i=features.length-1; i>=0; i--) { 
    445             feature = features[i]; 
    446             if(!all) { 
    447                 OpenLayers.Util.removeItem(this.selectedFeatures, feature); 
    448             } 
    449             feature.destroy(); 
     444        } 
     445        this.removeFeatures(features, options); 
     446        for (var i = 0; i < features.length; i++) { 
     447            features[i].destroy(); 
    450448        } 
    451449    }, 
  • trunk/openlayers/tests/Control/ModifyFeature.html

    r7162 r7614  
    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    }   
     
    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    }