root / trunk / web / dojo / dojox / grid / _ViewManager.js @ 11
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 | } |