Draw and modify controls now set feature state. No longer do we need to check feature state in app code in cases where features are created or modified with these controls. r=elemoine,ahocevar (closes #1833)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@8382 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2008-11-16 18:26:39 +00:00
parent 1566fc252e
commit d5950d4b29
7 changed files with 22 additions and 20 deletions

View File

@@ -42,11 +42,6 @@
strategies : [new OpenLayers.Strategy.Fixed()],
eventListeners: {
featuremodified: function(obj) {
if (obj.feature.state != OpenLayers.State.INSERT &&
obj.feature.state != OpenLayers.State.DELETE) {
obj.feature.state = OpenLayers.State.UPDATE;
}
displayStatus();
}
}

View File

@@ -54,7 +54,7 @@
var draw = new OpenLayers.Control.DrawFeature(
wfs, OpenLayers.Handler.Point,
{
handlerOptions: {freehand: false},
handlerOptions: {freehand: false, multi: true},
displayClass: "olControlDrawFeaturePoint"
}
);
@@ -64,14 +64,6 @@
displayClass: "olControlSaveFeatures"
});
draw.featureAdded = function(feature) {
var oldgeom = feature.geometry;
feature.layer.renderer.eraseGeometry(oldgeom);
feature.geometry = new OpenLayers.Geometry.MultiPoint(oldgeom);
feature.state = OpenLayers.State.INSERT;
feature.layer.drawFeature(feature);
}
panel.addControls([
new OpenLayers.Control.Navigation(),
save, draw

View File

@@ -77,6 +77,7 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
*/
drawFeature: function(geometry) {
var feature = new OpenLayers.Feature.Vector(geometry);
feature.state = OpenLayers.State.INSERT;
this.layer.addFeatures([feature]);
this.featureAdded(feature);
this.events.triggerEvent("featureadded",{feature : feature});

View File

@@ -39,9 +39,6 @@ OpenLayers.Control.EditingToolbar = OpenLayers.Class(
new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'}),
new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'})
];
for (var i=0, len=controls.length; i<len; i++) {
controls[i].featureAdded = function(feature) { feature.state = OpenLayers.State.INSERT; };
}
this.addControls(controls);
},

View File

@@ -446,11 +446,24 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
*/
dragComplete: function(vertex) {
this.resetVertices();
this.setFeatureState();
this.onModification(this.feature);
this.layer.events.triggerEvent("featuremodified",
{feature: this.feature});
},
/**
* Method: setFeatureState
* Called when the feature is modified. If the current state is not
* INSERT or DELETE, the state is set to UPDATE.
*/
setFeatureState: function() {
if(this.feature.state != OpenLayers.State.INSERT &&
this.feature.state != OpenLayers.State.DELETE) {
this.feature.state = OpenLayers.State.UPDATE;
}
},
/**
* Method: resetVertices
*/
@@ -522,6 +535,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
this.layer.drawFeature(this.feature,
this.selectControl.renderIntent);
this.resetVertices();
this.setFeatureState();
this.onModification(this.feature);
this.layer.events.triggerEvent("featuremodified",
{feature: this.feature});

View File

@@ -13,13 +13,14 @@
}
function test_drawFeature(t) {
t.plan(2);
t.plan(3);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.DrawFeature(layer, function() {});
var geom = {};
layer.addFeatures = function(features) {
t.ok(features[0].geometry == geom, "layer.addFeatures called");
t.eq(features[0].state, OpenLayers.State.INSERT, "layer state set");
};
function handlefeatureadded(event) {
t.ok(event.feature.geometry == geom, "featureadded triggered");

View File

@@ -74,7 +74,7 @@
}
function test_handleKeypress(t) {
t.plan(10);
t.plan(11);
/**
* There are two things that we want to test here
@@ -125,6 +125,7 @@
// run the above four tests twice
control.handleKeypress({keyCode:delKey});
control.handleKeypress({keyCode:dKey});
t.eq(control.feature.state, OpenLayers.State.UPDATE, "feature state set to update");
// now make sure nothing happens if the vertex is mid-drag
control.dragControl.handlers.drag.dragging = true;
@@ -344,7 +345,7 @@
}
function test_dragComplete(t) {
t.plan(7);
t.plan(8);
var layer = new OpenLayers.Layer.Vector();
var control = new OpenLayers.Control.ModifyFeature(layer);
@@ -375,6 +376,7 @@
control.vertices = 'previous normal';
control.virtualVertices = 'previous virtual';
control.dragComplete();
t.eq(fakeFeature.state, OpenLayers.State.UPDATE, "feature state set to UPDATE");
control.destroy();