Bienvenue sur PostGIS.fr

Bienvenue sur PostGIS.fr , le site de la communauté des utilisateurs francophones de PostGIS.

PostGIS ajoute le support d'objets géographique à la base de données PostgreSQL. En effet, PostGIS "spatialise" le serverur PostgreSQL, ce qui permet de l'utiliser comme une base de données SIG.

Maintenu à jour, en fonction de nos disponibilités et des diverses sorties des outils que nous testons, nous vous proposons l'ensemble de nos travaux publiés en langue française.

source: trunk/workshop-routing-foss4g/web/OpenLayers/lib/OpenLayers/Handler/Box.js @ 76

Revision 76, 7.0 KB checked in by djay, 12 years ago (diff)

Ajout du répertoire web

  • Property svn:executable set to *
Line 
1/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for
2 * full list of contributors). Published under the Clear BSD license. 
3 * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
4 * full text of the license. */
5
6/**
7 * @requires OpenLayers/Handler.js
8 * @requires OpenLayers/Handler/Drag.js
9 */
10
11/**
12 * Class: OpenLayers.Handler.Box
13 * Handler for dragging a rectangle across the map.  Box is displayed
14 * on mouse down, moves on mouse move, and is finished on mouse up.
15 *
16 * Inherits from:
17 *  - <OpenLayers.Handler>
18 */
19OpenLayers.Handler.Box = OpenLayers.Class(OpenLayers.Handler, {
20
21    /**
22     * Property: dragHandler
23     * {<OpenLayers.Handler.Drag>}
24     */
25    dragHandler: null,
26
27    /**
28     * APIProperty: boxDivClassName
29     * {String} The CSS class to use for drawing the box. Default is
30     *     olHandlerBoxZoomBox
31     */
32    boxDivClassName: 'olHandlerBoxZoomBox',
33   
34    /**
35     * Property: boxCharacteristics
36     * {Object} Caches some box characteristics from css. This is used
37     *     by the getBoxCharacteristics method.
38     */
39    boxCharacteristics: null,
40
41    /**
42     * Constructor: OpenLayers.Handler.Box
43     *
44     * Parameters:
45     * control - {<OpenLayers.Control>}
46     * callbacks - {Object} An object containing a single function to be
47     *                          called when the drag operation is finished.
48     *                          The callback should expect to recieve a single
49     *                          argument, the point geometry.
50     * options - {Object}
51     */
52    initialize: function(control, callbacks, options) {
53        OpenLayers.Handler.prototype.initialize.apply(this, arguments);
54        var callbacks = {
55            "down": this.startBox, 
56            "move": this.moveBox, 
57            "out":  this.removeBox,
58            "up":   this.endBox
59        };
60        this.dragHandler = new OpenLayers.Handler.Drag(
61                                this, callbacks, {keyMask: this.keyMask});
62    },
63
64    /**
65     * Method: destroy
66     */
67    destroy: function() {
68        if (this.dragHandler) {
69            this.dragHandler.destroy();
70            this.dragHandler = null;
71        }           
72        OpenLayers.Handler.prototype.destroy.apply(this, arguments);
73    },
74
75    /**
76     * Method: setMap
77     */
78    setMap: function (map) {
79        OpenLayers.Handler.prototype.setMap.apply(this, arguments);
80        if (this.dragHandler) {
81            this.dragHandler.setMap(map);
82        }
83    },
84
85    /**
86    * Method: startBox
87    *
88    * Parameters:
89    * evt - {Event}
90    */
91    startBox: function (xy) {
92        this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
93                                                 this.dragHandler.start);
94        this.zoomBox.className = this.boxDivClassName;                                         
95        this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
96        this.map.viewPortDiv.appendChild(this.zoomBox);
97
98        OpenLayers.Element.addClass(
99            this.map.viewPortDiv, "olDrawBox"
100        );
101    },
102
103    /**
104    * Method: moveBox
105    */
106    moveBox: function (xy) {
107        var startX = this.dragHandler.start.x;
108        var startY = this.dragHandler.start.y;
109        var deltaX = Math.abs(startX - xy.x);
110        var deltaY = Math.abs(startY - xy.y);
111        this.zoomBox.style.width = Math.max(1, deltaX) + "px";
112        this.zoomBox.style.height = Math.max(1, deltaY) + "px";
113        this.zoomBox.style.left = xy.x < startX ? xy.x+"px" : startX+"px";
114        this.zoomBox.style.top = xy.y < startY ? xy.y+"px" : startY+"px";
115
116        // depending on the box model, modify width and height to take borders
117        // of the box into account
118        var box = this.getBoxCharacteristics();
119        if (box.newBoxModel) {
120            if (xy.x > startX) {
121                this.zoomBox.style.width =
122                    Math.max(1, deltaX - box.xOffset) + "px";
123            }
124            if (xy.y > startY) {
125                this.zoomBox.style.height =
126                    Math.max(1, deltaY - box.yOffset) + "px";
127            }
128        }
129    },
130
131    /**
132    * Method: endBox
133    */
134    endBox: function(end) {
135        var result;
136        if (Math.abs(this.dragHandler.start.x - end.x) > 5 ||   
137            Math.abs(this.dragHandler.start.y - end.y) > 5) {   
138            var start = this.dragHandler.start;
139            var top = Math.min(start.y, end.y);
140            var bottom = Math.max(start.y, end.y);
141            var left = Math.min(start.x, end.x);
142            var right = Math.max(start.x, end.x);
143            result = new OpenLayers.Bounds(left, bottom, right, top);
144        } else {
145            result = this.dragHandler.start.clone(); // i.e. OL.Pixel
146        } 
147        this.removeBox();
148
149        this.callback("done", [result]);
150    },
151
152    /**
153     * Method: removeBox
154     * Remove the zoombox from the screen and nullify our reference to it.
155     */
156    removeBox: function() {
157        this.map.viewPortDiv.removeChild(this.zoomBox);
158        this.zoomBox = null;
159        this.boxCharacteristics = null;
160        OpenLayers.Element.removeClass(
161            this.map.viewPortDiv, "olDrawBox"
162        );
163
164    },
165
166    /**
167     * Method: activate
168     */
169    activate: function () {
170        if (OpenLayers.Handler.prototype.activate.apply(this, arguments)) {
171            this.dragHandler.activate();
172            return true;
173        } else {
174            return false;
175        }
176    },
177
178    /**
179     * Method: deactivate
180     */
181    deactivate: function () {
182        if (OpenLayers.Handler.prototype.deactivate.apply(this, arguments)) {
183            this.dragHandler.deactivate();
184            return true;
185        } else {
186            return false;
187        }
188    },
189   
190    /**
191     * Method: getCharacteristics
192     * Determines offset and box model for a box.
193     *
194     * Returns:
195     * {Object} a hash with the following properties:
196     *     - xOffset - Corner offset in x-direction
197     *     - yOffset - Corner offset in y-direction
198     *     - newBoxModel - true for all browsers except IE in quirks mode
199     */
200    getBoxCharacteristics: function() {
201        if (!this.boxCharacteristics) {
202            var xOffset = parseInt(OpenLayers.Element.getStyle(this.zoomBox,
203                "border-left-width")) + parseInt(OpenLayers.Element.getStyle(
204                this.zoomBox, "border-right-width")) + 1;
205            var yOffset = parseInt(OpenLayers.Element.getStyle(this.zoomBox,
206                "border-top-width")) + parseInt(OpenLayers.Element.getStyle(
207                this.zoomBox, "border-bottom-width")) + 1;
208            // all browsers use the new box model, except IE in quirks mode
209            var newBoxModel = OpenLayers.Util.getBrowserName() == "msie" ?
210                document.compatMode != "BackCompat" : true;
211            this.boxCharacteristics = {
212                xOffset: xOffset,
213                yOffset: yOffset,
214                newBoxModel: newBoxModel
215            };
216        }
217        return this.boxCharacteristics;
218    },
219
220    CLASS_NAME: "OpenLayers.Handler.Box"
221});
Note: See TracBrowser for help on using the repository browser.