/* Copyright (c) 2006-2007 MetaCarta, Inc., published under a modified BSD license. * See http://svn.openlayers.org/trunk/openlayers/repository-license.txt * for the full text of the license. */ /** * @requires OpenLayers/Popup/Anchored.js * * Class: OpenLayers.Popup.AnchoredBubble * * Inherits from: * - */ OpenLayers.Popup.AnchoredBubble = OpenLayers.Class(OpenLayers.Popup.Anchored, { /** * Property: rounded * {Boolean} Has the popup been rounded yet? */ rounded: false, /** * Constructor: OpenLayers.Popup.AnchoredBubble * * Parameters: * id - {String} * lonlat - {} * size - {} * contentHTML - {String} * anchor - {Object} Object to which we'll anchor the popup. Must expose * a 'size' () and 'offset' () * (Note that this is generally an ) * closeBox - {Boolean} */ initialize:function(id, lonlat, size, contentHTML, anchor, closeBox) { OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments); }, /** * Method: draw * * Parameters: * px - {} * * Returns: * {DOMElement} Reference to a div that contains the drawn popup */ draw: function(px) { OpenLayers.Popup.Anchored.prototype.draw.apply(this, arguments); this.setContentHTML(); this.setRicoCorners(!this.rounded); this.rounded = true; //set the popup color and opacity this.setBackgroundColor(); this.setOpacity(); return this.div; }, /** * APIMethod: setSize * * Parameters: * size - {} */ setSize:function(size) { OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); if (this.contentDiv != null) { var contentSize = this.size.clone(); contentSize.h -= (2 * OpenLayers.Popup.AnchoredBubble.CORNER_SIZE); contentSize.h -= (2 * this.padding); this.contentDiv.style.height = contentSize.h + "px"; this.contentDiv.style.width = contentSize.w + "px"; if (this.map) { //size has changed - must redo corners this.setRicoCorners(!this.rounded); this.rounded = true; } } }, /** * APIMethod: setBackgroundColor * * Parameters: * color - {String} */ setBackgroundColor:function(color) { if (color != undefined) { this.backgroundColor = color; } if (this.div != null) { if (this.contentDiv != null) { this.div.style.background = "transparent"; OpenLayers.Rico.Corner.changeColor(this.contentDiv, this.backgroundColor); } } }, /** * APIMethod: setOpacity * * Parameters: * opacity - {float} */ setOpacity:function(opacity) { if (opacity != undefined) { this.opacity = opacity; } if (this.div != null) { if (this.contentDiv != null) { OpenLayers.Rico.Corner.changeOpacity(this.contentDiv, this.opacity); } } }, /** * Method: setBorder * * Always sets border to 0. Bubble Popups can not have a border. * * Parameters: * border - {Integer} */ setBorder:function(border) { this.border = 0; }, /** * Method: setRicoCorners * * Update RICO corners according to the popup's current relative postion. * * Parameters: * firstTime - {Boolean} Is this the first time the corners are being * rounded? */ setRicoCorners:function(firstTime) { var corners = this.getCornersToRound(this.relativePosition); var options = {corners: corners, color: this.backgroundColor, bgColor: "transparent", blend: false}; if (firstTime) { OpenLayers.Rico.Corner.round(this.div, options); } else { OpenLayers.Rico.Corner.reRound(this.groupDiv, options); //set the popup color and opacity this.setBackgroundColor(); this.setOpacity(); } }, /** * Method: getCornersToRound * * Returns: * {String} The proper corners string ("tr tl bl br") for rico to round */ getCornersToRound:function() { var corners = ['tl', 'tr', 'bl', 'br']; //we want to round all the corners _except_ the opposite one. var corner = OpenLayers.Bounds.oppositeQuadrant(this.relativePosition); OpenLayers.Util.removeItem(corners, corner); return corners.join(" "); }, CLASS_NAME: "OpenLayers.Popup.AnchoredBubble" }); /** * Constant: CORNER_SIZE * {Integer} 5. Border space for the RICO corners */ OpenLayers.Popup.AnchoredBubble.CORNER_SIZE = 5;