X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/b95e9d27599ee55b2fd61a444acc3264c7637265..b2b6892a4553eeaa8d601737dee440eba0c6d6a6:/public/lib/OpenLayers/Control/PanZoom.js diff --git a/public/lib/OpenLayers/Control/PanZoom.js b/public/lib/OpenLayers/Control/PanZoom.js new file mode 100644 index 000000000..32eed2feb --- /dev/null +++ b/public/lib/OpenLayers/Control/PanZoom.js @@ -0,0 +1,164 @@ +/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. + * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full + * text of the license. */ +// @require: OpenLayers/Control.js + +/** + * @class + * + * default zoom/pan controls + */ +OpenLayers.Control.PanZoom = Class.create(); +OpenLayers.Control.PanZoom.X = 4; +OpenLayers.Control.PanZoom.Y = 4; +OpenLayers.Control.PanZoom.prototype = + Object.extend( new OpenLayers.Control(), { + + /** @type int */ + slideFactor: 50, + + /** @type Array of Button Divs */ + buttons: null, + + /** @type OpenLayers.Pixel */ + position: null, + + /** + * @constructor + */ + initialize: function() { + OpenLayers.Control.prototype.initialize.apply(this, arguments); + this.position = new OpenLayers.Pixel(OpenLayers.Control.PanZoom.X, + OpenLayers.Control.PanZoom.Y); + }, + + /** + * @param {OpenLayers.Pixel} px + * + * @returns A reference to the container div for the PanZoom control + * @type DOMElement + */ + draw: function(px) { + // initialize our internal div + OpenLayers.Control.prototype.draw.apply(this, arguments); + px = this.position; + + // place the controls + this.buttons = new Array(); + + var sz = new OpenLayers.Size(18,18); + var centered = new OpenLayers.Pixel(px.x+sz.w/2, px.y); + + this._addButton("panup", "north-mini.png", centered, sz); + px.y = centered.y+sz.h; + this._addButton("panleft", "west-mini.png", px, sz); + this._addButton("panright", "east-mini.png", px.add(sz.w, 0), sz); + this._addButton("pandown", "south-mini.png", + centered.add(0, sz.h*2), sz); + this._addButton("zoomin", "zoom-plus-mini.png", + centered.add(0, sz.h*3+5), sz); + this._addButton("zoomworld", "zoom-world-mini.png", + centered.add(0, sz.h*4+5), sz); + this._addButton("zoomout", "zoom-minus-mini.png", + centered.add(0, sz.h*5+5), sz); + return this.div; + }, + + /** + * @param {String} id + * @param {String} img + * @param {OpenLayers.Pixel} xy + * @param {OpenLayers.Size} sz + * + * @returns A Div (an alphaImageDiv, to be precise) that contains the + * image of the button, and has all the proper event handlers + * set. + * @type DOMElement + */ + _addButton:function(id, img, xy, sz) { + var imgLocation = OpenLayers.Util.getImagesLocation() + img; + // var btn = new ol.AlphaImage("_"+id, imgLocation, xy, sz); + var btn = OpenLayers.Util.createAlphaImageDiv( + "OpenLayers_Control_PanZoom_" + id, + xy, sz, imgLocation, "absolute"); + + //we want to add the outer div + this.div.appendChild(btn); + + btn.onmousedown = this.buttonDown.bindAsEventListener(btn); + btn.ondblclick = this.doubleClick.bindAsEventListener(btn); + btn.onclick = this.doubleClick.bindAsEventListener(btn); + btn.action = id; + btn.map = this.map; + btn.slideFactor = this.slideFactor; + + //we want to remember/reference the outer div + this.buttons.push(btn); + return btn; + }, + + /** + * @param {event} evt + * + * @type Boolean + */ + doubleClick: function (evt) { + Event.stop(evt); + return false; + }, + + /** + * @param {event} evt + */ + buttonDown: function (evt) { + if (!Event.isLeftClick(evt)) return; + + var slide = this.map.getResolution() * this.slideFactor; + var center = this.map.getCenter(); + + var newCenter = center.copyOf(); + + switch (this.action) { + case "panup": + newCenter = newCenter.add( 0, slide); + break; + case "pandown": + newCenter = newCenter.add( 0, -slide); + break; + case "panleft": + newCenter = newCenter.add( -slide, 0); + break; + case "panright": + newCenter = newCenter.add( slide, 0); + break; + case "zoomin": + this.map.zoomIn(); + break; + case "zoomout": + this.map.zoomOut(); + break; + case "zoomworld": + this.map.zoomToFullExtent(); + break; + } + + if (!newCenter.equals(center)) { + this.map.setCenter(newCenter); + } + + Event.stop(evt); + }, + + /** + * + */ + destroy: function() { + OpenLayers.Control.prototype.destroy.apply(this, arguments); + for(i=0; i