Adding multi property to the DrawFeature control. If true, geometries will be cast to multi-part counterparts before features are added to the target layer. r=ahocevar (closes #2542)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@10142 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
Tim Schaub
2010-03-23 17:49:13 +00:00
parent ff8b356638
commit 3de62b703a
4 changed files with 41 additions and 3 deletions

View File

@@ -77,7 +77,7 @@ function init() {
{ {
title: "Draw Feature", title: "Draw Feature",
displayClass: "olControlDrawFeaturePolygon", displayClass: "olControlDrawFeaturePolygon",
handlerOptions: {multi: true} multi: true
} }
); );

View File

@@ -38,6 +38,13 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
*/ */
EVENT_TYPES: ["featureadded"], EVENT_TYPES: ["featureadded"],
/**
* APIProperty: multi
* {Boolean} Cast features to multi-part geometries before passing to the
* layer. Default is false.
*/
multi: false,
/** /**
* APIProperty: featureAdded * APIProperty: featureAdded
* {Function} Called after each feature is added * {Function} Called after each feature is added
@@ -84,9 +91,12 @@ OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
this.callbacks this.callbacks
); );
this.layer = layer; this.layer = layer;
this.handlerOptions = this.handlerOptions || {};
if (!("multi" in this.handlerOptions)) {
this.handlerOptions.multi = this.multi;
}
var sketchStyle = this.layer.styleMap && this.layer.styleMap.styles.temporary; var sketchStyle = this.layer.styleMap && this.layer.styleMap.styles.temporary;
if(sketchStyle) { if(sketchStyle) {
this.handlerOptions = this.handlerOptions || {};
this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults( this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(
this.handlerOptions.layerOptions, this.handlerOptions.layerOptions,
{styleMap: new OpenLayers.StyleMap({"default": sketchStyle})} {styleMap: new OpenLayers.StyleMap({"default": sketchStyle})}

View File

@@ -35,7 +35,7 @@ OpenLayers.Handler.Point = OpenLayers.Class(OpenLayers.Handler, {
layer: null, layer: null,
/** /**
* Property: multi * APIProperty: multi
* {Boolean} Cast features to multi-part geometries before passing to the * {Boolean} Cast features to multi-part geometries before passing to the
* layer. Default is false. * layer. Default is false.
*/ */

View File

@@ -12,6 +12,34 @@
"featureadded event in EVENT_TYPES"); "featureadded event in EVENT_TYPES");
} }
function test_multi(t) {
t.plan(4);
var layer = new OpenLayers.Layer.Vector();
var control;
// multi false by default
control = new OpenLayers.Control.DrawFeature(
layer, OpenLayers.Handler.Polygon
);
t.ok(!control.multi, "control.multi false by default");
t.ok(!control.handler.multi, "handler.multi false by default");
// set on handler
control = new OpenLayers.Control.DrawFeature(
layer, OpenLayers.Handler.Polygon, {multi: true}
);
t.ok(control.handler.multi, "handler.multi set from control options");
// respect handlerOptions
control = new OpenLayers.Control.DrawFeature(
layer, OpenLayers.Handler.Polygon,
{multi: true, handlerOptions: {multi: false}}
);
t.ok(!control.handler.multi, "handlerOptions.multi respected");
}
function test_drawFeature(t) { function test_drawFeature(t) {
t.plan(3); t.plan(3);
var layer = new OpenLayers.Layer.Vector(); var layer = new OpenLayers.Layer.Vector();