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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
var draw = new OpenLayers.Control.DrawFeature(
|
||||
wfs, OpenLayers.Handler.Point,
|
||||
{
|
||||
handlerOptions: {freehand: false},
|
||||
handlerOptions: {freehand: false, multi: true},
|
||||
displayClass: "olControlDrawFeaturePoint"
|
||||
}
|
||||
);
|
||||
@@ -63,14 +63,6 @@
|
||||
trigger: OpenLayers.Function.bind(wfs.commit, wfs),
|
||||
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(),
|
||||
|
||||
@@ -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});
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
|
||||
@@ -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});
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user