1 /* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD
2 * license. See http://svn.openlayers.org/trunk/openlayers/license.txt for the
3 * full text of the license. */
7 * @requires OpenLayers/Control.js
8 * @requires OpenLayers/Feature/Vector.js
12 * Class: OpenLayers.Control.DrawFeature
13 * The DrawFeature control draws point, line or polygon features on a vector
17 * - <OpenLayers.Control>
19 OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
23 * {<OpenLayers.Layer.Vector>}
29 * {Object} The functions that are sent to the handler for callback
34 * Constant: EVENT_TYPES
36 * Supported event types:
37 * featureadded - Triggered when a feature is added
39 EVENT_TYPES: ["featureadded"],
42 * APIProperty: featureAdded
43 * {Function} Called after each feature is added
45 featureAdded: function() {},
48 * APIProperty: handlerOptions
49 * {Object} Used to set non-default properties on the control's handler
54 * Constructor: OpenLayers.Control.DrawFeature
57 * layer - {<OpenLayers.Layer.Vector>}
58 * handler - {<OpenLayers.Handler>}
61 initialize: function(layer, handler, options) {
63 // concatenate events specific to vector with those from the base
65 OpenLayers.Control.DrawFeature.prototype.EVENT_TYPES.concat(
66 OpenLayers.Control.prototype.EVENT_TYPES
69 OpenLayers.Control.prototype.initialize.apply(this, [options]);
70 this.callbacks = OpenLayers.Util.extend(
72 done: this.drawFeature,
73 modify: function(vertex, feature) {
74 this.layer.events.triggerEvent(
75 "sketchmodified", {vertex: vertex, feature: feature}
78 create: function(vertex, feature) {
79 this.layer.events.triggerEvent(
80 "sketchstarted", {vertex: vertex, feature: feature}
87 var sketchStyle = this.layer.styleMap && this.layer.styleMap.styles.temporary;
89 this.handlerOptions = this.handlerOptions || {};
90 this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(
91 this.handlerOptions.layerOptions,
92 {styleMap: new OpenLayers.StyleMap({"default": sketchStyle})}
95 this.handler = new handler(this, this.callbacks, this.handlerOptions);
101 drawFeature: function(geometry) {
102 var feature = new OpenLayers.Feature.Vector(geometry);
103 var proceed = this.layer.events.triggerEvent(
104 "sketchcomplete", {feature: feature}
106 if(proceed !== false) {
107 feature.state = OpenLayers.State.INSERT;
108 this.layer.addFeatures([feature]);
109 this.featureAdded(feature);
110 this.events.triggerEvent("featureadded",{feature : feature});
114 CLASS_NAME: "OpenLayers.Control.DrawFeature"