Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dojox / grid / _ViewManager.js @ 12

History | View | Annotate | Download (4.22 KB)

1
/*
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
}