Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.grid._grid.views"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.grid._grid.views"] = true;dojo.provide("dojox.grid._grid.views");dojo.declare('dojox.grid.views', null, {// summary:// A collection of grid views. Owned by grid and used internally for managing grid views.// Grid creates views automatically based on grid's layout structure.// Users should typically not need to access individual views or the views collection directly.constructor: function(inGrid){this.grid = inGrid;},defaultWidth: 200,views: [],// operationsresize: function(){this.onEach("resize");},render: function(){this.onEach("render");this.normalizeHeaderNodeHeight();},// viewsaddView: function(inView){inView.idx = this.views.length;this.views.push(inView);},destroyViews: function(){for (var i=0, v; v=this.views[i]; i++)v.destroy();this.views = [];},getContentNodes: function(){var nodes = [];for(var i=0, v; v=this.views[i]; i++){nodes.push(v.contentNode);}return nodes;},forEach: function(inCallback){for(var i=0, v; v=this.views[i]; i++){inCallback(v, i);}},onEach: function(inMethod, inArgs){inArgs = inArgs || [];for(var i=0, v; v=this.views[i]; i++){if(inMethod in v){v[inMethod].apply(v, inArgs);}}},// layoutnormalizeHeaderNodeHeight: function(){var rowNodes = [];for(var i=0, v; (v=this.views[i]); i++){if(v.headerContentNode.firstChild){rowNodes.push(v.headerContentNode)};}this.normalizeRowNodeHeights(rowNodes);},normalizeRowNodeHeights: function(inRowNodes){var h = 0;for(var i=0, n, o; (n=inRowNodes[i]); i++){h = Math.max(h, (n.firstChild.clientHeight)||(n.firstChild.offsetHeight));}h = (h >= 0 ? h : 0);//var hpx = h + 'px';for(var i=0, n; (n=inRowNodes[i]); i++){if(n.firstChild.clientHeight!=h){n.firstChild.style.height = hpx;}}////console.log('normalizeRowNodeHeights ', h);//// querying the height here seems to help scroller measure the page on IEif(inRowNodes&&inRowNodes[0]){inRowNodes[0].parentNode.offsetHeight;}},renormalizeRow: function(inRowIndex){var rowNodes = [];for(var i=0, v, n; (v=this.views[i])&&(n=v.getRowNode(inRowIndex)); i++){n.firstChild.style.height = '';rowNodes.push(n);}this.normalizeRowNodeHeights(rowNodes);},getViewWidth: function(inIndex){return this.views[inIndex].getWidth() || this.defaultWidth;},measureHeader: function(){this.forEach(function(inView){inView.headerContentNode.style.height = '';});var h = 0;this.forEach(function(inView){//console.log('headerContentNode', inView.headerContentNode.offsetHeight, inView.headerContentNode.offsetWidth);h = Math.max(inView.headerNode.offsetHeight, h);});return h;},measureContent: function(){var h = 0;this.forEach(function(inView) {h = Math.max(inView.domNode.offsetHeight, h);});return h;},findClient: function(inAutoWidth){// try to use user defined clientvar c = this.grid.elasticView || -1;// attempt to find implicit clientif(c < 0){for(var i=1, v; (v=this.views[i]); i++){if(v.viewWidth){for(i=1; (v=this.views[i]); i++){if(!v.viewWidth){c = i;break;}}break;}}}// client is in the middle by defaultif(c < 0){c = Math.floor(this.views.length / 2);}return c;},_arrange: function(l, t, w, h){var i, v, vw, len = this.views.length;// find the clientvar c = (w <= 0 ? len : this.findClient());// layout viewsvar setPosition = function(v, l, t){with(v.domNode.style){left = l + 'px';top = t + 'px';}with(v.headerNode.style){left = l + 'px';top = 0;}}// for views left of the clientfor(i=0; (v=this.views[i])&&(i<c); i++){// get widthvw = this.getViewWidth(i);// process boxesv.setSize(vw, h);setPosition(v, l, t);vw = v.domNode.offsetWidth;// update positionl += vw;}// next view (is the client, i++ == c)i++;// start from the right edgevar r = w;// for views right of the client (iterated from the right)for(var j=len-1; (v=this.views[j])&&(i<=j); j--){// get widthvw = this.getViewWidth(j);// set sizev.setSize(vw, h);// measure in pixelsvw = v.domNode.offsetWidth;// update positionr -= vw;// set positionsetPosition(v, r, t);}if(c<len){v = this.views[c];// position the client box between left and right boxesvw = Math.max(1, r-l);// set sizev.setSize(vw + 'px', h);setPosition(v, l, t);}return l;},arrange: function(l, t, w, h){var w = this._arrange(l, t, w, h);this.resize();return w;},// renderingrenderRow: function(inRowIndex, inNodes){var rowNodes = [];for(var i=0, v, n, rowNode; (v=this.views[i])&&(n=inNodes[i]); i++){rowNode = v.renderRow(inRowIndex);n.appendChild(rowNode);rowNodes.push(rowNode);}this.normalizeRowNodeHeights(rowNodes);},rowRemoved: function(inRowIndex){this.onEach("rowRemoved", [ inRowIndex ]);},// updatingupdateRow: function(inRowIndex, inHeight){for(var i=0, v; v=this.views[i]; i++){v.updateRow(inRowIndex, inHeight);}this.renormalizeRow(inRowIndex);},updateRowStyles: function(inRowIndex){this.onEach("updateRowStyles", [ inRowIndex ]);},// scrollingsetScrollTop: function(inTop){var top = inTop;for(var i=0, v; v=this.views[i]; i++){top = v.setScrollTop(inTop);}return top;//this.onEach("setScrollTop", [ inTop ]);},getFirstScrollingView: function(){for(var i=0, v; (v=this.views[i]); i++){if(v.hasScrollbar()){return v;}}}});}