modify feature control must use silent:true when removing/destroying vertices, p=me, r=crschmidt (closes #1562)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@7614 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -273,8 +273,8 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
var deactivated = false;
|
var deactivated = false;
|
||||||
// the return from the controls is unimportant in this case
|
// the return from the controls is unimportant in this case
|
||||||
if(OpenLayers.Control.prototype.deactivate.apply(this, arguments)) {
|
if(OpenLayers.Control.prototype.deactivate.apply(this, arguments)) {
|
||||||
this.layer.removeFeatures(this.vertices);
|
this.layer.removeFeatures(this.vertices, {silent: true});
|
||||||
this.layer.removeFeatures(this.virtualVertices);
|
this.layer.removeFeatures(this.virtualVertices, {silent: true});
|
||||||
this.vertices = [];
|
this.vertices = [];
|
||||||
this.dragControl.deactivate();
|
this.dragControl.deactivate();
|
||||||
if(this.feature && this.feature.geometry) {
|
if(this.feature && this.feature.geometry) {
|
||||||
@@ -314,16 +314,16 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
* unselected feature.
|
* unselected feature.
|
||||||
*/
|
*/
|
||||||
unselectFeature: function(object) {
|
unselectFeature: function(object) {
|
||||||
this.layer.removeFeatures(this.vertices);
|
this.layer.removeFeatures(this.vertices, {silent: true});
|
||||||
this.vertices = [];
|
this.vertices = [];
|
||||||
this.layer.destroyFeatures(this.virtualVertices);
|
this.layer.destroyFeatures(this.virtualVertices, {silent: true});
|
||||||
this.virtualVertices = [];
|
this.virtualVertices = [];
|
||||||
if(this.dragHandle) {
|
if(this.dragHandle) {
|
||||||
this.layer.destroyFeatures([this.dragHandle]);
|
this.layer.destroyFeatures([this.dragHandle], {silent: true});
|
||||||
delete this.dragHandle;
|
delete this.dragHandle;
|
||||||
}
|
}
|
||||||
if(this.radiusHandle) {
|
if(this.radiusHandle) {
|
||||||
this.layer.destroyFeatures([this.radiusHandle]);
|
this.layer.destroyFeatures([this.radiusHandle], {silent: true});
|
||||||
delete this.radiusHandle;
|
delete this.radiusHandle;
|
||||||
}
|
}
|
||||||
this.feature = null;
|
this.feature = null;
|
||||||
@@ -413,17 +413,17 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
this.vertices.push(vertex);
|
this.vertices.push(vertex);
|
||||||
} else if(vertex == this.dragHandle) {
|
} else if(vertex == this.dragHandle) {
|
||||||
// dragging a drag handle
|
// dragging a drag handle
|
||||||
this.layer.removeFeatures(this.vertices);
|
this.layer.removeFeatures(this.vertices, {silent: true});
|
||||||
this.vertices = [];
|
this.vertices = [];
|
||||||
if(this.radiusHandle) {
|
if(this.radiusHandle) {
|
||||||
this.layer.destroyFeatures([this.radiusHandle]);
|
this.layer.destroyFeatures([this.radiusHandle], {silent: true});
|
||||||
this.radiusHandle = null;
|
this.radiusHandle = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// dragging a radius handle - no special treatment
|
// dragging a radius handle - no special treatment
|
||||||
// dragging a real vertex - no special treatment
|
// dragging a real vertex - no special treatment
|
||||||
if(this.virtualVertices.length > 0) {
|
if(this.virtualVertices.length > 0) {
|
||||||
this.layer.destroyFeatures(this.virtualVertices);
|
this.layer.destroyFeatures(this.virtualVertices, {silent: true});
|
||||||
this.virtualVertices = [];
|
this.virtualVertices = [];
|
||||||
}
|
}
|
||||||
this.layer.drawFeature(this.feature, this.selectControl.renderIntent);
|
this.layer.drawFeature(this.feature, this.selectControl.renderIntent);
|
||||||
@@ -463,19 +463,19 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
this.dragControl.outFeature(this.dragControl.feature);
|
this.dragControl.outFeature(this.dragControl.feature);
|
||||||
}
|
}
|
||||||
if(this.vertices.length > 0) {
|
if(this.vertices.length > 0) {
|
||||||
this.layer.removeFeatures(this.vertices);
|
this.layer.removeFeatures(this.vertices, {silent: true});
|
||||||
this.vertices = [];
|
this.vertices = [];
|
||||||
}
|
}
|
||||||
if(this.virtualVertices.length > 0) {
|
if(this.virtualVertices.length > 0) {
|
||||||
this.layer.removeFeatures(this.virtualVertices);
|
this.layer.removeFeatures(this.virtualVertices, {silent: true});
|
||||||
this.virtualVertices = [];
|
this.virtualVertices = [];
|
||||||
}
|
}
|
||||||
if(this.dragHandle) {
|
if(this.dragHandle) {
|
||||||
this.layer.destroyFeatures([this.dragHandle]);
|
this.layer.destroyFeatures([this.dragHandle], {silent: true});
|
||||||
this.dragHandle = null;
|
this.dragHandle = null;
|
||||||
}
|
}
|
||||||
if(this.radiusHandle) {
|
if(this.radiusHandle) {
|
||||||
this.layer.destroyFeatures([this.radiusHandle]);
|
this.layer.destroyFeatures([this.radiusHandle], {silent: true});
|
||||||
this.radiusHandle = null;
|
this.radiusHandle = null;
|
||||||
}
|
}
|
||||||
if(this.feature &&
|
if(this.feature &&
|
||||||
|
|||||||
@@ -401,6 +401,8 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.features = OpenLayers.Util.removeItem(this.features, feature);
|
this.features = OpenLayers.Util.removeItem(this.features, feature);
|
||||||
|
// feature has no layer at this point
|
||||||
|
feature.layer = null;
|
||||||
|
|
||||||
if (feature.geometry) {
|
if (feature.geometry) {
|
||||||
this.renderer.eraseGeometry(feature.geometry);
|
this.renderer.eraseGeometry(feature.geometry);
|
||||||
@@ -432,21 +434,17 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
|
|||||||
* features - {Array(<OpenLayers.Feature.Vector>)} An optional array of
|
* features - {Array(<OpenLayers.Feature.Vector>)} An optional array of
|
||||||
* features to destroy. If not supplied, all features on the layer
|
* features to destroy. If not supplied, all features on the layer
|
||||||
* will be destroyed.
|
* will be destroyed.
|
||||||
|
* options - {Object}
|
||||||
*/
|
*/
|
||||||
destroyFeatures: function(features) {
|
destroyFeatures: function(features, options) {
|
||||||
var all = (features == undefined);
|
var all = (features == undefined); // evaluates to true if
|
||||||
|
// features is null
|
||||||
if(all) {
|
if(all) {
|
||||||
features = this.features;
|
features = this.features;
|
||||||
this.selectedFeatures = [];
|
|
||||||
}
|
}
|
||||||
this.eraseFeatures(features);
|
this.removeFeatures(features, options);
|
||||||
var feature;
|
for (var i = 0; i < features.length; i++) {
|
||||||
for(var i=features.length-1; i>=0; i--) {
|
features[i].destroy();
|
||||||
feature = features[i];
|
|
||||||
if(!all) {
|
|
||||||
OpenLayers.Util.removeItem(this.selectedFeatures, feature);
|
|
||||||
}
|
|
||||||
feature.destroy();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -213,6 +213,11 @@
|
|||||||
control.selectFeature({feature: fakeFeature});
|
control.selectFeature({feature: fakeFeature});
|
||||||
|
|
||||||
control.destroy();
|
control.destroy();
|
||||||
|
|
||||||
|
// layer.destroy() will call removeFeatures with an empty array, make
|
||||||
|
// removeFeatures reference an empty function to prevent the above
|
||||||
|
// test to fail
|
||||||
|
layer.removeFeatures = function(features) {};
|
||||||
layer.destroy();
|
layer.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,6 +328,11 @@
|
|||||||
control.dragComplete();
|
control.dragComplete();
|
||||||
|
|
||||||
control.destroy();
|
control.destroy();
|
||||||
|
|
||||||
|
// layer.destroy() will call removeFeatures with an empty array, make
|
||||||
|
// removeFeatures reference an empty function to prevent the above
|
||||||
|
// test to fail
|
||||||
|
layer.removeFeatures = function(verts) {};
|
||||||
layer.destroy();
|
layer.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user