]> dev.renevier.net Git - syp.git/blob - openlayers/lib/OpenLayers/Control/DrawFeature.js
initial commit
[syp.git] / openlayers / lib / OpenLayers / Control / DrawFeature.js
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. */
4
5
6 /**
7  * @requires OpenLayers/Control.js
8  * @requires OpenLayers/Feature/Vector.js
9  */
10
11 /**
12  * Class: OpenLayers.Control.DrawFeature
13  * The DrawFeature control draws point, line or polygon features on a vector
14  * layer when active.
15  *
16  * Inherits from:
17  *  - <OpenLayers.Control>
18  */
19 OpenLayers.Control.DrawFeature = OpenLayers.Class(OpenLayers.Control, {
20     
21     /**
22      * Property: layer
23      * {<OpenLayers.Layer.Vector>}
24      */
25     layer: null,
26
27     /**
28      * Property: callbacks
29      * {Object} The functions that are sent to the handler for callback
30      */
31     callbacks: null,
32     
33     /**
34      * Constant: EVENT_TYPES
35      *
36      * Supported event types:
37      * featureadded - Triggered when a feature is added
38      */
39     EVENT_TYPES: ["featureadded"],
40     
41     /**
42      * APIProperty: featureAdded
43      * {Function} Called after each feature is added
44      */
45     featureAdded: function() {},
46
47     /**
48      * APIProperty: handlerOptions
49      * {Object} Used to set non-default properties on the control's handler
50      */
51     handlerOptions: null,
52     
53     /**
54      * Constructor: OpenLayers.Control.DrawFeature
55      * 
56      * Parameters:
57      * layer - {<OpenLayers.Layer.Vector>} 
58      * handler - {<OpenLayers.Handler>} 
59      * options - {Object} 
60      */
61     initialize: function(layer, handler, options) {
62         
63         // concatenate events specific to vector with those from the base
64         this.EVENT_TYPES =
65             OpenLayers.Control.DrawFeature.prototype.EVENT_TYPES.concat(
66             OpenLayers.Control.prototype.EVENT_TYPES
67         );
68         
69         OpenLayers.Control.prototype.initialize.apply(this, [options]);
70         this.callbacks = OpenLayers.Util.extend(
71             {
72                 done: this.drawFeature,
73                 modify: function(vertex, feature) {
74                     this.layer.events.triggerEvent(
75                         "sketchmodified", {vertex: vertex, feature: feature}
76                     );
77                 },
78                 create: function(vertex, feature) {
79                     this.layer.events.triggerEvent(
80                         "sketchstarted", {vertex: vertex, feature: feature}
81                     );
82                 }
83             },
84             this.callbacks
85         );
86         this.layer = layer;
87         var sketchStyle = this.layer.styleMap && this.layer.styleMap.styles.temporary;
88         if(sketchStyle) {
89             this.handlerOptions = this.handlerOptions || {};
90             this.handlerOptions.layerOptions = OpenLayers.Util.applyDefaults(
91                 this.handlerOptions.layerOptions,
92                 {styleMap: new OpenLayers.StyleMap({"default": sketchStyle})}
93             );
94         }
95         this.handler = new handler(this, this.callbacks, this.handlerOptions);
96     },
97
98     /**
99      * Method: drawFeature
100      */
101     drawFeature: function(geometry) {
102         var feature = new OpenLayers.Feature.Vector(geometry);
103         var proceed = this.layer.events.triggerEvent(
104             "sketchcomplete", {feature: feature}
105         );
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});
111         }
112     },
113
114     CLASS_NAME: "OpenLayers.Control.DrawFeature"
115 });