Making it so features with DELETE state get drawn with the 'delete' rendering intent. The default symbolizer used for the delete intent has display property set to 'none'. This means features with DELETE state will be erased (if already drawn) the next time layer.drawFeature is called. If you want to have features with DELETE state drawn in a partially opaque gray (for example), create a custom style map or change the default delete symbolizer. r=crschmidt (closes #1953)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@8956 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2009-03-06 17:20:34 +00:00
parent d2656e002a
commit c2d47cf46f
4 changed files with 66 additions and 6 deletions

View File

@@ -397,5 +397,8 @@ OpenLayers.Feature.Vector.style = {
hoverPointUnit: "%",
pointerEvents: "visiblePainted",
cursor: "inherit"
},
'delete': {
display: "none"
}
};

View File

@@ -118,7 +118,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
* {Boolean} Whether the layer is a vector layer.
*/
isVector: true,
/**
* APIProperty: features
* {Array(<OpenLayers.Feature.Vector>)}
@@ -643,10 +643,11 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, {
if (!this.drawn) {
return
}
if (typeof style != "object") {
var renderIntent = typeof style == "string" ?
style : feature.renderIntent;
if(!style && feature.state === OpenLayers.State.DELETE) {
style = "delete";
}
var renderIntent = style || feature.renderIntent;
style = feature.style || this.style;
if (!style) {
style = this.styleMap.createSymbolizer(feature, renderIntent);

View File

@@ -15,7 +15,7 @@ OpenLayers.StyleMap = OpenLayers.Class({
/**
* Property: styles
* Hash of {<OpenLayers.Style>}, keyed by names of well known
* rendering intents (e.g. "default", "temporary", "select").
* rendering intents (e.g. "default", "temporary", "select", "delete").
*/
styles: null,
@@ -46,7 +46,9 @@ OpenLayers.StyleMap = OpenLayers.Class({
"select": new OpenLayers.Style(
OpenLayers.Feature.Vector.style["select"]),
"temporary": new OpenLayers.Style(
OpenLayers.Feature.Vector.style["temporary"])
OpenLayers.Feature.Vector.style["temporary"]),
"delete": new OpenLayers.Style(
OpenLayers.Feature.Vector.style["delete"])
};
// take whatever the user passed as style parameter and convert it
@@ -56,6 +58,7 @@ OpenLayers.StyleMap = OpenLayers.Class({
this.styles["default"] = style;
this.styles["select"] = style;
this.styles["temporary"] = style;
this.styles["delete"] = style;
} else if(typeof style == "object") {
for(var key in style) {
if(style[key] instanceof OpenLayers.Style) {
@@ -69,6 +72,7 @@ OpenLayers.StyleMap = OpenLayers.Class({
this.styles["default"] = new OpenLayers.Style(style);
this.styles["select"] = new OpenLayers.Style(style);
this.styles["temporary"] = new OpenLayers.Style(style);
this.styles["delete"] = new OpenLayers.Style(style);
break;
}
}

View File

@@ -243,6 +243,58 @@
layer.features = [];
}
function test_deleted_state(t) {
t.plan(9);
var map = new OpenLayers.Map("map");
var layer = new OpenLayers.Layer.Vector(null, {
drawn: true
});
map.addLayer(layer);
var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(10, 10)
);
var log;
layer.renderer = {
drawFeature: function(f, s) {
log = {
feature: f,
style: s
};
}
};
// draw feature with no state
layer.drawFeature(feature);
t.ok(log.feature === feature, "[no state] drawFeature called with correct feature");
t.ok(log.style.display !== "none", "[no state] drawFeature called with style display not none");
// draw feature with delete style
feature.state = OpenLayers.State.DELETE;
layer.drawFeature(feature);
t.ok(log.feature === feature, "[delete] drawFeature called with correct feature");
t.eq(log.style.display, "none", "[delete] drawFeature called with style display none");
// undelete the feature and redraw
delete feature.state;
delete feature.renderIntent;
layer.drawFeature(feature);
t.ok(log.feature === feature, "[undelete] drawFeature called with correct feature");
t.ok(log.style.display !== "none", "[undelete] drawFeature called with style display not none");
// change deleted style
layer.styleMap.styles["delete"] = new OpenLayers.Style({fillOpacity: 0.1});
// draw feature with delete style
feature.state = OpenLayers.State.DELETE;
layer.drawFeature(feature);
t.ok(log.feature === feature, "[draw deleted] drawFeature called with correct feature");
t.ok(log.style.display !== "none", "[draw deleted] drawFeature called with style display not none");
t.eq(log.style.fillOpacity, 0.1,"[draw deleted] drawFeature called with correct fill opacity");
}
function test_Layer_Vector_eraseFeatures(t) {
t.plan(2);
var layer = new OpenLayers.Layer.Vector("Test Layer");