- Author:
- David Nickerson <nickerso@users.sourceforge.net>
- Date:
- 2009-07-16 02:00:03+12:00
- Desc:
- the starting point for the HH tutorial example
- Permanent Source URI:
- https://models.fieldml.org/workspace/a1/rawfile/f6a8f90307388eb4b040ee3566b84d88b59247f7/dojo-presentation/js/dojo/dojox/grid/compat/_grid/layout.js
dojo.provide("dojox.grid.compat._grid.layout");
dojo.require("dojox.grid.compat._grid.cell");
dojo.declare("dojox.grid.layout", null, {
// summary:
// Controls grid cell layout. Owned by grid and used internally.
constructor: function(inGrid){
this.grid = inGrid;
},
// flat array of grid cells
cells: [],
// structured array of grid cells
structure: null,
// default cell width
defaultWidth: '6em',
// methods
setStructure: function(inStructure){
this.fieldIndex = 0;
this.cells = [];
var s = this.structure = [];
for(var i=0, viewDef, rows; (viewDef=inStructure[i]); i++){
s.push(this.addViewDef(viewDef));
}
this.cellCount = this.cells.length;
},
addViewDef: function(inDef){
this._defaultCellProps = inDef.defaultCell || {};
return dojo.mixin({}, inDef, {rows: this.addRowsDef(inDef.rows || inDef.cells)});
},
addRowsDef: function(inDef){
var result = [];
for(var i=0, row; inDef && (row=inDef[i]); i++){
result.push(this.addRowDef(i, row));
}
return result;
},
addRowDef: function(inRowIndex, inDef){
var result = [];
for(var i=0, def, cell; (def=inDef[i]); i++){
cell = this.addCellDef(inRowIndex, i, def);
result.push(cell);
this.cells.push(cell);
}
return result;
},
addCellDef: function(inRowIndex, inCellIndex, inDef){
var w = 0;
if(inDef.colSpan > 1){
w = 0;
}else if(!isNaN(inDef.width)){
w = inDef.width + "em";
}else{
w = inDef.width || this.defaultWidth;
}
// fieldIndex progresses linearly from the last indexed field
// FIXME: support generating fieldIndex based a text field name (probably in Grid)
var fieldIndex = inDef.field != undefined ? inDef.field : (inDef.get ? -1 : this.fieldIndex);
if((inDef.field != undefined) || !inDef.get){
this.fieldIndex = (inDef.field > -1 ? inDef.field : this.fieldIndex) + 1;
}
return new dojox.grid.cell(
dojo.mixin({}, this._defaultCellProps, inDef, {
grid: this.grid,
subrow: inRowIndex,
layoutIndex: inCellIndex,
index: this.cells.length,
fieldIndex: fieldIndex,
unitWidth: w
}));
}
});