API Docs for:
Show:

File: src/main/resources/js/PlaceLayer.js

/**
  dynamic html for TiledImage
  $Id: PlaceLayer.js 11 2013-04-06 21:25:54Z nazotoko $
  Copyright 2013 Shun N. Watanabe <nazotoko (a+) users.sourceforge.net>
  @module TiledImage
 **/
 
/**
  Place Layer is a moving and zooming layer for placing HTML Elements.
  @class PlaceLayer
  @constructor
  @parm name {String} name of the layer
  @parm w {Number} width of the original image
  @parm h {Number} height of the original image
 **/
function PlaceLayer(name,w,h){
    /**
     * name of the layer
     * @private
     * @property name_
     * @type String
     */
    var name_=name,
    /**
     * parent (TiledImage) pointer 
     * @property parent
     * @type Object
     * @private
     */
    parent,
    /**
     * DOM Element of the layer
     * @property layer
     * @type DOMElement
     * @private
     */
    layer,
    /**
     * max size
     * @private
     * @property maxSize
     * @type Array[Number,Number]
     */
    maxSize=[w,h],
    /**
     * current zoom level
     * @private
     * @property z_
     * @type Number
     */
    z_=0,
    /**
     * maximum zoom level
     * @private
     * @property maxZ
     * @type Number
     */
    maxZ=0,
    /**
     * list of objects on the layer
     * @private
     * @property obj
     * @type Array
     */
    obj=[];

    d.mod(this,{
	/**
	 * setParent are usually called form TiledImage object. 
	 * see <a href="TiledImage.html#method_addLayer">TiledImage.addLayer</a>.
	 * @public
	 * @method setParent
	 * @required
	 * @param p {Object} object of TiledImage. It's called as parent. 
	 */
	setParent:function (p){
	    parent=p;
	    maxZ=p.getZooms()[2];
	    layer=d.app(p.map,'div',{id:p.target.id+'-layer-'+name_,classname:'map'});
	},
	/**
	 * @public
	 * @method detach
	 * @required
	 */
	detach:function(){
	    parent.map.removeChild(layer);
	    layer=null;
	},
	/**
	 * @public
	 * @method setName
	 * @param name {String} name of the layer.
	 * @chainable
	 * @return this
	 */
	setName:function(name){
	    name_=name;
	    return this;
	},
	/**
	 * @public
	 * @method getName
	 * @required
	 * @return {String} name of the layer.
	 */
	getName:function(){
	    return name_;
	},
	/**
	 * @public
	 * @method getWrap
	 * @required
	 * @return {Array[Boolean,Boolean]} wrap flags
	 */
	getWrap:function(){
	    return [false,false];
	},
	/**
	 * @public
	 * @method getMaxSize
	 * @required
	 * @return {Array[Number,Number]} original image size
	 */
	getMaxSize:function(){
	    return maxSize;
	},
	/**
	 * append DOM Elements in the range. This checks the range and creates
	 * registed objects in the range.
	 * @public
	 * @method append
	 * @required
	 * @param l {Number} left edge by absolute position
	 * @param t {Number} top edge by absolute position
	 * @param r {Number} right edge by absolute position
	 * @param b {Number} bottom edge by absolute position
	 */
	append:function(l,t,r,b){
	    var i,o,x,y,w,h,dz=maxZ-z_;
	    l<<=dz;
	    t<<=dz;
	    r<<=dz;
	    b<<=dz;
	    for(i=0;i<obj.length;i++){
		o=obj[i];
		if(o.vis && o.x+o.w>l && o.x-o.w<r && o.y+o.h>t && o.y-o.h<b){
		    o.vis=false;
		    x=o.x>>dz;
		    y=o.y>>dz;
		    w=o.w>>dz;
		    h=o.h>>dz;
		    var ele=d.app(layer,o.ele,{style:{position:'absolute',left:x+'px',top:y+'px',width:w+'px',height:h+'px'}});
		    d.mod(ele,o.atr);
		}
	    }
	},
	/**
	 * @public
	 * @method getMaxZ
	 * @required
	 * @return {Number} maximum zoom level
	 */
	getMaxZ:function(){
	    return maxZ;
	},
	/**
	 * set zoom level. This should be called though TiledImage object.
	 * @public
	 * @method setZoom
	 * @required
	 */
	setZoom:function(z){
	    z_=z;
	},
	/**
	 * @public
	 * @method removeAll
	 * @required
	 */
	removeAll:function(){
	    d.removeAll(layer);
	    for(var key in obj){
		obj[key].vis=true;
	    }
	},
	/**
	 * @public
	 * @method addObj
	 * @param ele {String} element's name
	 * @param x {Number} left
	 * @param y {Number} top
	 * @param w {Number} width
	 * @param h {Number} height
	 * @param atr {Number} attribute. See <a href="d.html#method_mod">d.mod()</a>
	 * for detail.
	 * @chainable
	 * @return this
	 */
	addObj:function(ele,x,y,w,h,atr){
	    var obj={ele:ele,x:x,y:y,w:w,h:h,vis:true};
	    obj.atr=atr;
	    obj[obj.length]=obj;
	    return this;
	},
	// not implemented
	rmObj:function(obj){
	}
    });
}