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()],
|
strategies : [new OpenLayers.Strategy.Fixed()],
|
||||||
eventListeners: {
|
eventListeners: {
|
||||||
featuremodified: function(obj) {
|
featuremodified: function(obj) {
|
||||||
if (obj.feature.state != OpenLayers.State.INSERT &&
|
|
||||||
obj.feature.state != OpenLayers.State.DELETE) {
|
|
||||||
|
|
||||||
obj.feature.state = OpenLayers.State.UPDATE;
|
|
||||||
}
|
|
||||||
displayStatus();
|
displayStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-9
@@ -54,7 +54,7 @@
|
|||||||
var draw = new OpenLayers.Control.DrawFeature(
|
var draw = new OpenLayers.Control.DrawFeature(
|
||||||
wfs, OpenLayers.Handler.Point,
|
wfs, OpenLayers.Handler.Point,
|
||||||
{
|
{
|
||||||
handlerOptions: {freehand: false},
|
handlerOptions: {freehand: false, multi: true},
|
||||||
displayClass: "olControlDrawFeaturePoint"
|
displayClass: "olControlDrawFeaturePoint"
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -63,14 +63,6 @@
|
|||||||
trigger: OpenLayers.Function.bind(wfs.commit, wfs),
|
trigger: OpenLayers.Function.bind(wfs.commit, wfs),
|
||||||
displayClass: "olControlSaveFeatures"
|
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([
|
panel.addControls([
|
||||||
new OpenLayers.Control.Navigation(),
|
new OpenLayers.Control.Navigation(),
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
*/
|
*/
|
||||||
drawFeature: function(geometry) {
|
drawFeature: function(geometry) {
|
||||||
var feature = new OpenLayers.Feature.Vector(geometry);
|
var feature = new OpenLayers.Feature.Vector(geometry);
|
||||||
|
feature.state = OpenLayers.State.INSERT;
|
||||||
this.layer.addFeatures([feature]);
|
this.layer.addFeatures([feature]);
|
||||||
this.featureAdded(feature);
|
this.featureAdded(feature);
|
||||||
this.events.triggerEvent("featureadded",{feature : 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.Path, {'displayClass': 'olControlDrawFeaturePath'}),
|
||||||
new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'})
|
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);
|
this.addControls(controls);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -446,11 +446,24 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
*/
|
*/
|
||||||
dragComplete: function(vertex) {
|
dragComplete: function(vertex) {
|
||||||
this.resetVertices();
|
this.resetVertices();
|
||||||
|
this.setFeatureState();
|
||||||
this.onModification(this.feature);
|
this.onModification(this.feature);
|
||||||
this.layer.events.triggerEvent("featuremodified",
|
this.layer.events.triggerEvent("featuremodified",
|
||||||
{feature: this.feature});
|
{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
|
* Method: resetVertices
|
||||||
*/
|
*/
|
||||||
@@ -522,6 +535,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
|||||||
this.layer.drawFeature(this.feature,
|
this.layer.drawFeature(this.feature,
|
||||||
this.selectControl.renderIntent);
|
this.selectControl.renderIntent);
|
||||||
this.resetVertices();
|
this.resetVertices();
|
||||||
|
this.setFeatureState();
|
||||||
this.onModification(this.feature);
|
this.onModification(this.feature);
|
||||||
this.layer.events.triggerEvent("featuremodified",
|
this.layer.events.triggerEvent("featuremodified",
|
||||||
{feature: this.feature});
|
{feature: this.feature});
|
||||||
|
|||||||
@@ -13,13 +13,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_drawFeature(t) {
|
function test_drawFeature(t) {
|
||||||
t.plan(2);
|
t.plan(3);
|
||||||
var layer = new OpenLayers.Layer.Vector();
|
var layer = new OpenLayers.Layer.Vector();
|
||||||
var control = new OpenLayers.Control.DrawFeature(layer, function() {});
|
var control = new OpenLayers.Control.DrawFeature(layer, function() {});
|
||||||
var geom = {};
|
var geom = {};
|
||||||
|
|
||||||
layer.addFeatures = function(features) {
|
layer.addFeatures = function(features) {
|
||||||
t.ok(features[0].geometry == geom, "layer.addFeatures called");
|
t.ok(features[0].geometry == geom, "layer.addFeatures called");
|
||||||
|
t.eq(features[0].state, OpenLayers.State.INSERT, "layer state set");
|
||||||
};
|
};
|
||||||
function handlefeatureadded(event) {
|
function handlefeatureadded(event) {
|
||||||
t.ok(event.feature.geometry == geom, "featureadded triggered");
|
t.ok(event.feature.geometry == geom, "featureadded triggered");
|
||||||
|
|||||||
@@ -74,7 +74,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_handleKeypress(t) {
|
function test_handleKeypress(t) {
|
||||||
t.plan(10);
|
t.plan(11);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* There are two things that we want to test here
|
* There are two things that we want to test here
|
||||||
@@ -125,6 +125,7 @@
|
|||||||
// run the above four tests twice
|
// run the above four tests twice
|
||||||
control.handleKeypress({keyCode:delKey});
|
control.handleKeypress({keyCode:delKey});
|
||||||
control.handleKeypress({keyCode:dKey});
|
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
|
// now make sure nothing happens if the vertex is mid-drag
|
||||||
control.dragControl.handlers.drag.dragging = true;
|
control.dragControl.handlers.drag.dragging = true;
|
||||||
@@ -344,7 +345,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function test_dragComplete(t) {
|
function test_dragComplete(t) {
|
||||||
t.plan(7);
|
t.plan(8);
|
||||||
var layer = new OpenLayers.Layer.Vector();
|
var layer = new OpenLayers.Layer.Vector();
|
||||||
var control = new OpenLayers.Control.ModifyFeature(layer);
|
var control = new OpenLayers.Control.ModifyFeature(layer);
|
||||||
|
|
||||||
@@ -375,6 +376,7 @@
|
|||||||
control.vertices = 'previous normal';
|
control.vertices = 'previous normal';
|
||||||
control.virtualVertices = 'previous virtual';
|
control.virtualVertices = 'previous virtual';
|
||||||
control.dragComplete();
|
control.dragComplete();
|
||||||
|
t.eq(fakeFeature.state, OpenLayers.State.UPDATE, "feature state set to UPDATE");
|
||||||
|
|
||||||
control.destroy();
|
control.destroy();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user