1 /**
  2  * @author Gillis Haasnoot <gillis.haasnoot@gmail.com>
  3  * @package Banana.Controls
  4  * @summary Datagrid  
  5  */
  6 
  7 goog.provide('Banana.Controls.DataGridTreeListHolder');
  8 
  9 /** @namespace Banana.Controls.DataGridTreeListHolder */
 10 namespace('Banana.Controls').DataGridTreeListHolder = Banana.Controls.Panel.extend(
 11 /** @lends Banana.Controls.DataGridTreeListHolder.prototype */
 12 {
 13 	/**
 14 	 * Holder for Datagrid tree itemrenders
 15 	 * The listrender automatically creates a holder where a itemrender is rendered in
 16 	 * @constructs
 17 	 * @extends Banana.Controls.Panel
 18 	 */
 19 	init : function()
 20 	{
 21 		this._super();
 22 		
 23 		//when true we maximize the width size of a node
 24 		//call setMaximizeAutoWidth(true) on the listRender to apply 
 25 		this.maximizeAutoWidth = false;
 26 		
 27 		this.toggleHolder = new Banana.Controls.Panel().setStyle('float:left;clear:both;height:20px;width:20px;');
 28 		this.itemRenderHolder = new Banana.Controls.Panel().setStyle('float:left;');
 29 		this.childsHolder = new Banana.Controls.Panel().setStyle('float:left;clear:both;');
 30 		this.buttonHolder = new Banana.Controls.Panel().setStyle('float:left;clear:both;');
 31 		
 32 		this.addControl(this.toggleHolder);
 33 		this.addControl(this.itemRenderHolder);
 34 		this.addControl(this.childsHolder);
 35 		this.addControl(this.buttonHolder);
 36 	},	
 37 	
 38 	/**
 39 	 * returns the holder where item render is rendered in
 40 	 * @return {Banana.Controls.Panel}
 41 	 */
 42 	getItemRenderHolder : function()
 43 	{
 44 		return this.itemRenderHolder;
 45 	},
 46 	
 47 	/**
 48 	 * returns the holder where toggle button is rendered in
 49 	 * @return {Banana.Controls.Panel}
 50 	 */	
 51 	getToggleHolder : function()
 52 	{
 53 		return this.toggleHolder;
 54 	},
 55 	
 56 	/**
 57 	 * returns the holder where childs are rendered in
 58 	 * @return {Banana.Controls.Panel}
 59 	 */	
 60 	getChildHolder : function()
 61 	{
 62 		return this.childsHolder;
 63 	},
 64 	
 65 	/**
 66 	 * returns the holder where buttons are rendered in
 67 	 * @return {Banana.Controls.Panel}
 68 	 */	
 69 	getButtonHolder : function()
 70 	{
 71 		return this.buttonHolder;
 72 	},
 73 	
 74 	/**
 75 	 * @ignore
 76 	 */
 77 	updateDisplay : function()
 78 	{		
 79 		if (!this.maximizeAutoWidth) return;
 80 		
 81 		var dem = this.listRender.getDimensions();
 82 		if (!dem.offset) return;
 83 		var listRenderOffset = dem.offset.left; //add this
 84 		var totalWidth = dem.width;
 85 	
 86 		var renderOffset = this.itemRenderHolder.getDimensions().offset.left-listRenderOffset;
 87 		
 88 		var maxWidth = totalWidth-renderOffset;
 89 		
 90 		this.itemRenderHolder.setCss({width:maxWidth-20+'px'});
 91 	},
 92 
 93 	/**
 94 	 * @return {Banana.Controls.DataGridTreeItemRender}
 95 	 */
 96 	getItemRender : function()
 97 	{
 98 		if (!this.itemRenderHolder)
 99 		{
100 			return null;
101 		}
102 		
103 		return this.itemRenderHolder.controls[0];
104 	},
105 	
106 	/**
107 	 * @return {Banana.Controls.DataGridTreeListNodeToggle}
108 	 */
109 	getToggle : function()
110 	{
111 		return this.toggleHolder.controls[0];
112 	}
113 });
114 
115 /** @namespace Banana.Controls.DataGridTreeListRootHolder */
116 namespace('Banana.Controls').DataGridTreeListRootHolder = Banana.Controls.Panel.extend(
117 /** @lends Banana.Controls.DataGridTreeListRootHolder.prototype */
118 {
119 	/**
120 	 * Holder for Datagrid tree itemrenders
121 	 * The listrender automatically creates a holder for root item render
122 	 * @constructs
123 	 * @extends Banana.Controls.Panel
124 	 */
125 	init : function()
126 	{
127 		this._super();
128 	
129 		this.childsHolder = new Banana.Controls.Panel().setStyle('float:left;clear:both;');
130 		this.buttonHolder = new Banana.Controls.Panel().setStyle('float:left;clear:both;');
131 		
132 		this.addControl(this.itemRenderHolder);
133 		this.addControl(this.childsHolder);
134 		this.addControl(this.buttonHolder);
135 	},	
136 	
137 	/**
138 	 * @return {Banana.Controls.DataGridTreeItemRender}
139 	 */
140 	getItemRender : function()
141 	{
142 		return null;
143 	}
144 });