root / trunk / web / dojo / dojox / grid / _ViewManager.js @ 13
History | View | Annotate | Download (4.22 KB)
1 | 9 | andrej.cim | /*
|
---|---|---|---|
2 | Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
|
||
3 | Available via Academic Free License >= 2.1 OR the modified BSD license.
|
||
4 | see: http://dojotoolkit.org/license for details
|
||
5 | */
|
||
6 | |||
7 | |||
8 | if(!dojo._hasResource["dojox.grid._ViewManager"]){ |
||
9 | dojo._hasResource["dojox.grid._ViewManager"]=true; |
||
10 | dojo.provide("dojox.grid._ViewManager");
|
||
11 | dojo.declare("dojox.grid._ViewManager",null,{constructor:function(_1){ |
||
12 | this.grid=_1;
|
||
13 | },defaultWidth:200,views:[],resize:function(){ |
||
14 | this.onEach("resize"); |
||
15 | },render:function(){ |
||
16 | this.onEach("render"); |
||
17 | },addView:function(_2){ |
||
18 | _2.idx=this.views.length;
|
||
19 | this.views.push(_2);
|
||
20 | },destroyViews:function(){ |
||
21 | for(var i=0,v;v=this.views[i];i++){ |
||
22 | v.destroy(); |
||
23 | } |
||
24 | this.views=[];
|
||
25 | },getContentNodes:function(){ |
||
26 | var _3=[];
|
||
27 | for(var i=0,v;v=this.views[i];i++){ |
||
28 | _3.push(v.contentNode); |
||
29 | } |
||
30 | return _3;
|
||
31 | },forEach:function(_4){ |
||
32 | for(var i=0,v;v=this.views[i];i++){ |
||
33 | _4(v,i); |
||
34 | } |
||
35 | },onEach:function(_5,_6){ |
||
36 | _6=_6||[]; |
||
37 | for(var i=0,v;v=this.views[i];i++){ |
||
38 | if(_5 in v){ |
||
39 | v[_5].apply(v,_6); |
||
40 | } |
||
41 | } |
||
42 | },normalizeHeaderNodeHeight:function(){ |
||
43 | var _7=[];
|
||
44 | for(var i=0,v;(v=this.views[i]);i++){ |
||
45 | if(v.headerContentNode.firstChild){
|
||
46 | _7.push(v.headerContentNode); |
||
47 | } |
||
48 | } |
||
49 | this.normalizeRowNodeHeights(_7);
|
||
50 | },normalizeRowNodeHeights:function(_8){ |
||
51 | var h=0; |
||
52 | var _9=[];
|
||
53 | if(this.grid.rowHeight){ |
||
54 | h=this.grid.rowHeight;
|
||
55 | }else{
|
||
56 | if(_8.length<=1){ |
||
57 | return;
|
||
58 | } |
||
59 | for(var i=0,n;(n=_8[i]);i++){ |
||
60 | if(!dojo.hasClass(n,"dojoxGridNonNormalizedCell")){ |
||
61 | _9[i]=n.firstChild.offsetHeight; |
||
62 | h=Math.max(h,_9[i]); |
||
63 | } |
||
64 | } |
||
65 | h=(h>=0?h:0); |
||
66 | if(dojo.isMoz&&h){
|
||
67 | h++; |
||
68 | } |
||
69 | } |
||
70 | for(i=0;(n=_8[i]);i++){ |
||
71 | if(_9[i]!=h){
|
||
72 | n.firstChild.style.height=h+"px";
|
||
73 | } |
||
74 | } |
||
75 | },resetHeaderNodeHeight:function(){ |
||
76 | for(var i=0,v,n;(v=this.views[i]);i++){ |
||
77 | n=v.headerContentNode.firstChild; |
||
78 | if(n){
|
||
79 | n.style.height="";
|
||
80 | } |
||
81 | } |
||
82 | },renormalizeRow:function(_a){ |
||
83 | var _b=[];
|
||
84 | for(var i=0,v,n;(v=this.views[i])&&(n=v.getRowNode(_a));i++){ |
||
85 | n.firstChild.style.height="";
|
||
86 | _b.push(n); |
||
87 | } |
||
88 | this.normalizeRowNodeHeights(_b);
|
||
89 | },getViewWidth:function(_c){ |
||
90 | return this.views[_c].getWidth()||this.defaultWidth; |
||
91 | },measureHeader:function(){ |
||
92 | this.resetHeaderNodeHeight();
|
||
93 | this.forEach(function(_d){ |
||
94 | _d.headerContentNode.style.height="";
|
||
95 | }); |
||
96 | var h=0; |
||
97 | this.forEach(function(_e){ |
||
98 | h=Math.max(_e.headerNode.offsetHeight,h); |
||
99 | }); |
||
100 | return h;
|
||
101 | },measureContent:function(){ |
||
102 | var h=0; |
||
103 | this.forEach(function(_f){ |
||
104 | h=Math.max(_f.domNode.offsetHeight,h); |
||
105 | }); |
||
106 | return h;
|
||
107 | },findClient:function(_10){ |
||
108 | var c=this.grid.elasticView||-1; |
||
109 | if(c<0){ |
||
110 | for(var i=1,v;(v=this.views[i]);i++){ |
||
111 | if(v.viewWidth){
|
||
112 | for(i=1;(v=this.views[i]);i++){ |
||
113 | if(!v.viewWidth){
|
||
114 | c=i; |
||
115 | break;
|
||
116 | } |
||
117 | } |
||
118 | break;
|
||
119 | } |
||
120 | } |
||
121 | } |
||
122 | if(c<0){ |
||
123 | c=Math.floor(this.views.length/2); |
||
124 | } |
||
125 | return c;
|
||
126 | },arrange:function(l,w){ |
||
127 | var i,v,vw,len=this.views.length; |
||
128 | var c=(w<=0?len:this.findClient()); |
||
129 | var _11=function(v,l){ |
||
130 | var ds=v.domNode.style;
|
||
131 | var hs=v.headerNode.style;
|
||
132 | if(!dojo._isBodyLtr()){
|
||
133 | ds.right=l+"px";
|
||
134 | if(dojo.isMoz){
|
||
135 | hs.right=l+v.getScrollbarWidth()+"px";
|
||
136 | hs.width=parseInt(hs.width,10)-v.getScrollbarWidth()+"px"; |
||
137 | }else{
|
||
138 | hs.right=l+"px";
|
||
139 | } |
||
140 | }else{
|
||
141 | ds.left=l+"px";
|
||
142 | hs.left=l+"px";
|
||
143 | } |
||
144 | ds.top=0+"px"; |
||
145 | hs.top=0;
|
||
146 | }; |
||
147 | for(i=0;(v=this.views[i])&&(i<c);i++){ |
||
148 | vw=this.getViewWidth(i);
|
||
149 | v.setSize(vw,0);
|
||
150 | _11(v,l); |
||
151 | if(v.headerContentNode&&v.headerContentNode.firstChild){
|
||
152 | vw=v.getColumnsWidth()+v.getScrollbarWidth(); |
||
153 | }else{
|
||
154 | vw=v.domNode.offsetWidth; |
||
155 | } |
||
156 | l+=vw; |
||
157 | } |
||
158 | i++; |
||
159 | var r=w;
|
||
160 | for(var j=len-1;(v=this.views[j])&&(i<=j);j--){ |
||
161 | vw=this.getViewWidth(j);
|
||
162 | v.setSize(vw,0);
|
||
163 | vw=v.domNode.offsetWidth; |
||
164 | r-=vw; |
||
165 | _11(v,r); |
||
166 | } |
||
167 | if(c<len){
|
||
168 | v=this.views[c];
|
||
169 | vw=Math.max(1,r-l);
|
||
170 | v.setSize(vw+"px",0); |
||
171 | _11(v,l); |
||
172 | } |
||
173 | return l;
|
||
174 | },renderRow:function(_12,_13,_14){ |
||
175 | var _15=[];
|
||
176 | for(var i=0,v,n,_16;(v=this.views[i])&&(n=_13[i]);i++){ |
||
177 | _16=v.renderRow(_12); |
||
178 | n.appendChild(_16); |
||
179 | _15.push(_16); |
||
180 | } |
||
181 | if(!_14){
|
||
182 | this.normalizeRowNodeHeights(_15);
|
||
183 | } |
||
184 | },rowRemoved:function(_17){ |
||
185 | this.onEach("rowRemoved",[_17]); |
||
186 | },updateRow:function(_18,_19){ |
||
187 | for(var i=0,v;v=this.views[i];i++){ |
||
188 | v.updateRow(_18); |
||
189 | } |
||
190 | if(!_19){
|
||
191 | this.renormalizeRow(_18);
|
||
192 | } |
||
193 | },updateRowStyles:function(_1a){ |
||
194 | this.onEach("updateRowStyles",[_1a]); |
||
195 | },setScrollTop:function(_1b){ |
||
196 | var top=_1b;
|
||
197 | for(var i=0,v;v=this.views[i];i++){ |
||
198 | top=v.setScrollTop(_1b); |
||
199 | if(dojo.isIE&&v.headerNode&&v.scrollboxNode){
|
||
200 | v.headerNode.scrollLeft=v.scrollboxNode.scrollLeft; |
||
201 | } |
||
202 | } |
||
203 | return top;
|
||
204 | },getFirstScrollingView:function(){ |
||
205 | for(var i=0,v;(v=this.views[i]);i++){ |
||
206 | if(v.hasHScrollbar()||v.hasVScrollbar()){
|
||
207 | return v;
|
||
208 | } |
||
209 | } |
||
210 | return null; |
||
211 | }}); |
||
212 | } |