diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js index d148d5eded..bd704d4cf9 100644 --- a/lib/OpenLayers/Feature/Vector.js +++ b/lib/OpenLayers/Feature/Vector.js @@ -397,5 +397,8 @@ OpenLayers.Feature.Vector.style = { hoverPointUnit: "%", pointerEvents: "visiblePainted", cursor: "inherit" + }, + 'delete': { + display: "none" } }; diff --git a/lib/OpenLayers/Layer/Vector.js b/lib/OpenLayers/Layer/Vector.js index 8fb3b37b9e..bcc965665c 100644 --- a/lib/OpenLayers/Layer/Vector.js +++ b/lib/OpenLayers/Layer/Vector.js @@ -118,7 +118,7 @@ OpenLayers.Layer.Vector = OpenLayers.Class(OpenLayers.Layer, { * {Boolean} Whether the layer is a vector layer. */ isVector: true, - + /** * APIProperty: features * {Array()} @@ -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); diff --git a/lib/OpenLayers/StyleMap.js b/lib/OpenLayers/StyleMap.js index 75b880567d..757dc4c657 100644 --- a/lib/OpenLayers/StyleMap.js +++ b/lib/OpenLayers/StyleMap.js @@ -15,7 +15,7 @@ OpenLayers.StyleMap = OpenLayers.Class({ /** * Property: styles * Hash of {}, 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; } } diff --git a/tests/Layer/Vector.html b/tests/Layer/Vector.html index 0d61e7c66b..a32c3d5daa 100644 --- a/tests/Layer/Vector.html +++ b/tests/Layer/Vector.html @@ -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");