Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.grid.Grid"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.grid.Grid"] = true;dojo.provide("dojox.grid.Grid");dojo.require("dojox.grid.VirtualGrid");dojo.require("dojox.grid._data.model");dojo.require("dojox.grid._data.editors");dojo.declare('dojox.Grid', dojox.VirtualGrid, {// summary:// A grid widget with virtual scrolling, cell editing, complex rows,// sorting, fixed columns, sizeable columns, etc.// description:// Grid is a subclass of VirtualGrid, providing binding to a data// store.// example:// define the grid structure:// | var structure = [ // array of view objects// | { cells: [// array of rows, a row is an array of cells// | [ { name: "Alpha", width: 6 },// | { name: "Beta" },// | { name: "Gamma", get: formatFunction }// | ]// | ]}// | ];//// define a grid data model// | var model = new dojox.grid.data.table(null, data);// |// | <div id="grid" model="model" structure="structure"// | dojoType="dojox.VirtualGrid"></div>//// model:// string or object grid data modelmodel: 'dojox.grid.data.Table',// life cyclepostCreate: function(){if(this.model){var m = this.model;if(dojo.isString(m)){m = dojo.getObject(m);}this.model = (dojo.isFunction(m)) ? new m() : m;this._setModel(this.model);}this.inherited(arguments);},destroy: function(){this.setModel(null);this.inherited(arguments);},// structure_structureChanged: function() {this.indexCellFields();this.inherited(arguments);},// model_setModel: function(inModel){// if(!inModel){ return; }this.model = inModel;if(this.model){this.model.observer(this);this.model.measure();this.indexCellFields();}},setModel: function(inModel){// summary:// set the grid's data model// inModel:// model object, usually an instance of a dojox.grid.data.Model// subclassif(this.model){this.model.notObserver(this);}this._setModel(inModel);},// data socket (called in cell's context)get: function(inRowIndex){return this.grid.model.getDatum(inRowIndex, this.fieldIndex);},// model modificationsmodelAllChange: function(){this.rowCount = (this.model ? this.model.getRowCount() : 0);this.updateRowCount(this.rowCount);},modelRowChange: function(inData, inRowIndex){this.updateRow(inRowIndex);},modelDatumChange: function(inDatum, inRowIndex, inFieldIndex){this.updateRow(inRowIndex);},modelFieldsChange: function() {this.indexCellFields();this.render();},// model insertionmodelInsertion: function(inRowIndex){this.updateRowCount(this.model.getRowCount());},// model removalmodelRemoval: function(inKeys){this.updateRowCount(this.model.getRowCount());},// cellsgetCellName: function(inCell){var v = this.model.fields.values, i = inCell.fieldIndex;return i>=0 && i<v.length && v[i].name || this.inherited(arguments);},indexCellFields: function(){var cells = this.layout.cells;for(var i=0, c; cells && (c=cells[i]); i++){if(dojo.isString(c.field)){c.fieldIndex = this.model.fields.indexOf(c.field);}}},// utilityrefresh: function(){// summary:// re-render the grid, getting new data from the modelthis.edit.cancel();this.model.measure();},// sortingcanSort: function(inSortInfo){var f = this.getSortField(inSortInfo);// 0 is not a valid sort fieldreturn f && this.model.canSort(f);},getSortField: function(inSortInfo){// summary:// retrieves the model field on which to sort data.// inSortInfo: int// 1-based grid column index; positive if sort is ascending, otherwise negativevar c = this.getCell(this.getSortIndex(inSortInfo));// we expect c.fieldIndex == -1 for non model fields// that yields a getSortField value of 0, which can be detected as invalidreturn (c.fieldIndex+1) * (this.sortInfo > 0 ? 1 : -1);},sort: function(){this.edit.apply();this.model.sort(this.getSortField());},// row editingaddRow: function(inRowData, inIndex){this.edit.apply();var i = inIndex || -1;if(i<0){i = this.selection.getFirstSelected() || 0;}if(i<0){i = 0;}this.model.insert(inRowData, i);this.model.beginModifyRow(i);// begin editing row// FIXME: add to editfor(var j=0, c; ((c=this.getCell(j)) && !c.editor); j++){}if(c&&c.editor){this.edit.setEditCell(c, i);}},removeSelectedRows: function(){this.edit.apply();var s = this.selection.getSelected();if(s.length){this.model.remove(s);this.selection.clear();}},//: protected// editingcanEdit: function(inCell, inRowIndex){// summary:// determines if a given cell may be edited// inCell: grid cell// inRowIndex: grid row index// returns: true if given cell may be editedreturn (this.model.canModify ? this.model.canModify(inRowIndex) : true);},doStartEdit: function(inCell, inRowIndex){var edit = this.canEdit(inCell, inRowIndex);if(edit){this.model.beginModifyRow(inRowIndex);this.onStartEdit(inCell, inRowIndex);}return edit;},doApplyCellEdit: function(inValue, inRowIndex, inFieldIndex){this.model.setDatum(inValue, inRowIndex, inFieldIndex);this.onApplyCellEdit(inValue, inRowIndex, inFieldIndex);},doCancelEdit: function(inRowIndex){this.model.cancelModifyRow(inRowIndex);this.onCancelEdit.apply(this, arguments);},doApplyEdit: function(inRowIndex){this.model.endModifyRow(inRowIndex);this.onApplyEdit(inRowIndex);},// Perform row stylingstyleRowState: function(inRow){if(this.model.getState){var states=this.model.getState(inRow.index), c='';for(var i=0, ss=["inflight", "error", "inserting"], s; s=ss[i]; i++){if(states[s]){c = ' dojoxGrid-row-' + s;break;}}inRow.customClasses += c;}},onStyleRow: function(inRow){this.styleRowState(inRow);this.inherited(arguments);},junk: 0});}