X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/25ef3491bd9ae007ff1fc2b0d7943e6eaaccf775..6b044c28b5f26fb99c86c237ffad19741c0f7f3d:/docs/source/ColumnModel.html diff --git a/docs/source/ColumnModel.html b/docs/source/ColumnModel.html index dcf24c0f..da438b76 100644 --- a/docs/source/ColumnModel.html +++ b/docs/source/ColumnModel.html @@ -1,15 +1,16 @@
+/*! - * Ext JS Library 3.0.3 - * Copyright(c) 2006-2009 Ext JS, LLC - * licensing@extjs.com - * http://www.extjs.com/license + * Ext JS Library 3.3.1 + * Copyright(c) 2006-2010 Sencha Inc. + * licensing@sencha.com + * http://www.sencha.com/license */ /** * @class Ext.grid.ColumnModel @@ -95,99 +96,109 @@ * @param {Mixed} config Specify either an Array of {@link Ext.grid.Column} configuration objects or specify * a configuration Object (see introductory section discussion utilizing Initialization Method 2 above). */ -Ext.grid.ColumnModel = function(config){ - /** - * An Array of {@link Ext.grid.Column Column definition} objects representing the configuration - * of this ColumnModel. See {@link Ext.grid.Column} for the configuration properties that may - * be specified. - * @property config - * @type Array - */ - if(config.columns){ - Ext.apply(this, config); - this.setConfig(config.columns, true); - }else{ - this.setConfig(config, true); - } - this.addEvents( - /** - * @event widthchange - * Fires when the width of a column is programmaticially changed using - *- * @param {Function} fn - * @param {Object} scope (optional) + * @param {Function} fn A function which, when passed a {@link Ext.grid.Column Column} object, must + * return{@link #setColumnWidth}
. - * Note internal resizing suppresses the event from firing. See also - * {@link Ext.grid.GridPanel}.{@link #columnresize}
. - * @param {ColumnModel} this - * @param {Number} columnIndex The column index - * @param {Number} newWidth The new width - */ - "widthchange", - /** - * @event headerchange - * Fires when the text of a header changes. - * @param {ColumnModel} this - * @param {Number} columnIndex The column index - * @param {String} newText The new header text - */ - "headerchange", - /** - * @event hiddenchange - * Fires when a column is hidden or "unhidden". - * @param {ColumnModel} this - * @param {Number} columnIndex The column index - * @param {Boolean} hidden true if hidden, false otherwise - */ - "hiddenchange", - /** - * @event columnmoved - * Fires when a column is moved. - * @param {ColumnModel} this - * @param {Number} oldIndex - * @param {Number} newIndex - */ - "columnmoved", - /** - * @event configchange - * Fires when the configuration is changed - * @param {ColumnModel} this - */ - "configchange" - ); - Ext.grid.ColumnModel.superclass.constructor.call(this); -}; -Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { +Ext.grid.ColumnModel = Ext.extend(Ext.util.Observable, { /** * @cfg {Number} defaultWidth (optional) The width of columns which have no {@link #width} * specified (defaults to 100). This property shall preferably be configured through the * {@link #defaults} config property. */ defaultWidth: 100, + /** * @cfg {Boolean} defaultSortable (optional) Default sortable of columns which have no * sortable specified (defaults to false). This property shall preferably be configured * through the {@link #defaults} config property. */ defaultSortable: false, + /** * @cfg {Array} columns An Array of object literals. The config options defined by * {@link Ext.grid.Column} are the options which may appear in the object literal for each * individual column definition. */ + /** * @cfg {Object} defaults Object literal which will be used to apply {@link Ext.grid.Column} * configuration options to all {@link #columns}. Configuration options specified with * individual {@link Ext.grid.Column column} configs will supersede these {@link #defaults}. */ + constructor : function(config) { + /** + * An Array of {@link Ext.grid.Column Column definition} objects representing the configuration + * of this ColumnModel. See {@link Ext.grid.Column} for the configuration properties that may + * be specified. + * @property config + * @type Array + */ + if (config.columns) { + Ext.apply(this, config); + this.setConfig(config.columns, true); + } else { + this.setConfig(config, true); + } + + this.addEvents( + /** + * @event widthchange + * Fires when the width of a column is programmaticially changed using + *{@link #setColumnWidth}
. + * Note internal resizing suppresses the event from firing. See also + * {@link Ext.grid.GridPanel}.{@link #columnresize}
. + * @param {ColumnModel} this + * @param {Number} columnIndex The column index + * @param {Number} newWidth The new width + */ + "widthchange", + + /** + * @event headerchange + * Fires when the text of a header changes. + * @param {ColumnModel} this + * @param {Number} columnIndex The column index + * @param {String} newText The new header text + */ + "headerchange", + + /** + * @event hiddenchange + * Fires when a column is hidden or "unhidden". + * @param {ColumnModel} this + * @param {Number} columnIndex The column index + * @param {Boolean} hidden true if hidden, false otherwise + */ + "hiddenchange", + + /** + * @event columnmoved + * Fires when a column is moved. + * @param {ColumnModel} this + * @param {Number} oldIndex + * @param {Number} newIndex + */ + "columnmoved", + + /** + * @event configchange + * Fires when the configuration is changed + * @param {ColumnModel} this + */ + "configchange" + ); + + Ext.grid.ColumnModel.superclass.constructor.call(this); + }, + /** * Returns the id of the column at the specified index. * @param {Number} index The column index * @return {String} the id */ - getColumnId : function(index){ + getColumnId : function(index) { return this.config[index].id; }, - getColumnAt : function(index){ + getColumnAt : function(index) { return this.config[index]; }, @@ -201,14 +212,18 @@ Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { * @param {Boolean} initial Specify true to bypass cleanup which deletes the totalWidth * and destroys existing editors. */ - setConfig : function(config, initial){ + setConfig : function(config, initial) { var i, c, len; - if(!initial){ // cleanup + + if (!initial) { // cleanup delete this.totalWidth; - for(i = 0, len = this.config.length; i < len; i++){ + + for (i = 0, len = this.config.length; i < len; i++) { c = this.config[i]; - if(c.editor){ - c.editor.destroy(); + + if (c.setEditor) { + //check here, in case we have a special column like a CheckboxSelectionModel + c.setEditor(null); } } } @@ -222,20 +237,24 @@ Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { this.config = config; this.lookup = {}; - for(i = 0, len = config.length; i < len; i++){ + for (i = 0, len = config.length; i < len; i++) { c = Ext.applyIf(config[i], this.defaults); + // if no id, create one using column's ordinal position - if(typeof c.id == 'undefined'){ + if (Ext.isEmpty(c.id)) { c.id = i; } - if(!c.isColumn){ + + if (!c.isColumn) { var Cls = Ext.grid.Column.types[c.xtype || 'gridcolumn']; c = new Cls(c); config[i] = c; } + this.lookup[c.id] = c; } - if(!initial){ + + if (!initial) { this.fireEvent('configchange', this); } }, @@ -245,7 +264,7 @@ Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { * @param {String} id The column id * @return {Object} the column */ - getColumnById : function(id){ + getColumnById : function(id) { return this.lookup[id]; }, @@ -254,9 +273,9 @@ Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { * @param {String} id The column id * @return {Number} the index, or -1 if not found */ - getIndexById : function(id){ - for(var i = 0, len = this.config.length; i < len; i++){ - if(this.config[i].id == id){ + getIndexById : function(id) { + for (var i = 0, len = this.config.length; i < len; i++) { + if (this.config[i].id == id) { return i; } } @@ -268,10 +287,12 @@ Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { * @param {Number} oldIndex The index of the column to move. * @param {Number} newIndex The position at which to reinsert the coolumn. */ - moveColumn : function(oldIndex, newIndex){ - var c = this.config[oldIndex]; - this.config.splice(oldIndex, 1); - this.config.splice(newIndex, 0, c); + moveColumn : function(oldIndex, newIndex) { + var config = this.config, + c = config[oldIndex]; + + config.splice(oldIndex, 1); + config.splice(newIndex, 0, c); this.dataMap = null; this.fireEvent("columnmoved", this, oldIndex, newIndex); }, @@ -281,17 +302,22 @@ Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, { * @param {Boolean} visibleOnly Optional. Pass as true to only include visible columns. * @return {Number} */ - getColumnCount : function(visibleOnly){ - if(visibleOnly === true){ - var c = 0; - for(var i = 0, len = this.config.length; i < len; i++){ - if(!this.isHidden(i)){ + getColumnCount : function(visibleOnly) { + var length = this.config.length, + c = 0, + i; + + if (visibleOnly === true) { + for (i = 0; i < length; i++) { + if (!this.isHidden(i)) { c++; } } + return c; } - return this.config.length; + + return length; }, /** @@ -303,19 +329,27 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){ return c.hidden; });
true
if the column is to be included in the returned Array.
+ * @param {Object} scope (optional) The scope (this
reference) in which the function
+ * is executed. Defaults to this ColumnModel.
* @return {Array} result
*/
- getColumnsBy : function(fn, scope){
- var r = [];
- for(var i = 0, len = this.config.length; i < len; i++){
- var c = this.config[i];
- if(fn.call(scope||this, c, i) === true){
- r[r.length] = c;
+ getColumnsBy : function(fn, scope) {
+ var config = this.config,
+ length = config.length,
+ result = [],
+ i, c;
+
+ for (i = 0; i < length; i++){
+ c = config[i];
+
+ if (fn.call(scope || this, c, i) === true) {
+ result[result.length] = c;
}
}
- return r;
+
+ return result;
},
/**
@@ -323,7 +357,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index
* @return {Boolean}
*/
- isSortable : function(col){
+ isSortable : function(col) {
return !!this.config[col].sortable;
},
@@ -332,7 +366,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index
* @return {Boolean}
*/
- isMenuDisabled : function(col){
+ isMenuDisabled : function(col) {
return !!this.config[col].menuDisabled;
},
@@ -341,11 +375,12 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index.
* @return {Function} The function used to render the cell. See {@link #setRenderer}.
*/
- getRenderer : function(col){
- if(!this.config[col].renderer){
- return Ext.grid.ColumnModel.defaultRenderer;
- }
- return this.config[col].renderer;
+ getRenderer : function(col) {
+ return this.config[col].renderer || Ext.grid.ColumnModel.defaultRenderer;
+ },
+
+ getRendererScope : function(col) {
+ return this.config[col].scope;
},
/**
@@ -365,7 +400,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* Column index
The {@link Ext.data.Store} object from which the Record was extracted.
{@link #widthchange}
* event. Defaults to false.
*/
- setColumnWidth : function(col, width, suppressEvent){
+ setColumnWidth : function(col, width, suppressEvent) {
this.config[col].width = width;
this.totalWidth = null;
- if(!suppressEvent){
+
+ if (!suppressEvent) {
this.fireEvent("widthchange", this, col, width);
}
},
@@ -398,11 +438,11 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Boolean} includeHidden True to include hidden column widths
* @return {Number}
*/
- getTotalWidth : function(includeHidden){
- if(!this.totalWidth){
+ getTotalWidth : function(includeHidden) {
+ if (!this.totalWidth) {
this.totalWidth = 0;
- for(var i = 0, len = this.config.length; i < len; i++){
- if(includeHidden || !this.isHidden(i)){
+ for (var i = 0, len = this.config.length; i < len; i++) {
+ if (includeHidden || !this.isHidden(i)) {
this.totalWidth += this.getColumnWidth(i);
}
}
@@ -415,7 +455,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index
* @return {String}
*/
- getColumnHeader : function(col){
+ getColumnHeader : function(col) {
return this.config[col].header;
},
@@ -424,7 +464,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index
* @param {String} header The new header
*/
- setColumnHeader : function(col, header){
+ setColumnHeader : function(col, header) {
this.config[col].header = header;
this.fireEvent("headerchange", this, col, header);
},
@@ -434,7 +474,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index
* @return {String}
*/
- getColumnTooltip : function(col){
+ getColumnTooltip : function(col) {
return this.config[col].tooltip;
},
/**
@@ -442,7 +482,7 @@ var columns = grid.getColumnModel().getColumnsBy(function(c){
* @param {Number} col The column index
* @param {String} tooltip The new tooltip
*/
- setColumnTooltip : function(col, tooltip){
+ setColumnTooltip : function(col, tooltip) {
this.config[col].tooltip = tooltip;
},
@@ -455,7 +495,7 @@ var fieldName = grid.getColumnModel().getDataIndex(columnIndex);
* @param {Number} col The column index
* @return {String} The column's dataIndex
*/
- getDataIndex : function(col){
+ getDataIndex : function(col) {
return this.config[col].dataIndex;
},
@@ -464,7 +504,7 @@ var fieldName = grid.getColumnModel().getDataIndex(columnIndex);
* @param {Number} col The column index
* @param {String} dataIndex The new dataIndex
*/
- setDataIndex : function(col, dataIndex){
+ setDataIndex : function(col, dataIndex) {
this.config[col].dataIndex = dataIndex;
},
@@ -473,7 +513,7 @@ var fieldName = grid.getColumnModel().getDataIndex(columnIndex);
* @param {String} col The dataIndex to find
* @return {Number} The column index, or -1 if no match was found
*/
- findColumnIndex : function(dataIndex){
+ findColumnIndex : function(dataIndex) {
var c = this.config;
for(var i = 0, len = c.length; i < len; i++){
if(c[i].dataIndex == dataIndex){
@@ -507,8 +547,12 @@ var grid = new Ext.grid.GridPanel({
* @param {Number} rowIndex The row index
* @return {Boolean}
*/
- isCellEditable : function(colIndex, rowIndex){
- return (this.config[colIndex].editable || (typeof this.config[colIndex].editable == "undefined" && this.config[colIndex].editor)) ? true : false;
+ isCellEditable : function(colIndex, rowIndex) {
+ var c = this.config[colIndex],
+ ed = c.editable;
+
+ //force boolean
+ return !!(ed || (!Ext.isDefined(ed) && c.editor));
},
/**
@@ -518,7 +562,7 @@ var grid = new Ext.grid.GridPanel({
* @return {Ext.Editor} The {@link Ext.Editor Editor} that was created to wrap
* the {@link Ext.form.Field Field} used to edit the cell.
*/
- getCellEditor : function(colIndex, rowIndex){
+ getCellEditor : function(colIndex, rowIndex) {
return this.config[colIndex].getCellEditor(rowIndex);
},
@@ -527,7 +571,7 @@ var grid = new Ext.grid.GridPanel({
* @param {Number} col The column index
* @param {Boolean} editable True if the column is editable
*/
- setEditable : function(col, editable){
+ setEditable : function(col, editable) {
this.config[col].editable = editable;
},
@@ -537,7 +581,7 @@ var grid = new Ext.grid.GridPanel({
* @param {Number} colIndex The column index
* @return {Boolean}
*/
- isHidden : function(colIndex){
+ isHidden : function(colIndex) {
return !!this.config[colIndex].hidden; // ensure returns boolean
},
@@ -547,7 +591,7 @@ var grid = new Ext.grid.GridPanel({
* @param {Number} colIndex The column index
* @return {Boolean}
*/
- isFixed : function(colIndex){
+ isFixed : function(colIndex) {
return !!this.config[colIndex].fixed;
},
@@ -555,9 +599,10 @@ var grid = new Ext.grid.GridPanel({
* Returns true if the column can be resized
* @return {Boolean}
*/
- isResizable : function(colIndex){
+ isResizable : function(colIndex) {
return colIndex >= 0 && this.config[colIndex].resizable !== false && this.config[colIndex].fixed !== true;
},
+
/**
* Sets if a column is hidden.
@@ -566,7 +611,7 @@ myGrid.getColumnModel().setHidden(0, true); // hide column 0 (0 = the first colu
* @param {Number} colIndex The column index
* @param {Boolean} hidden True if the column is hidden
*/
- setHidden : function(colIndex, hidden){
+ setHidden : function(colIndex, hidden) {
var c = this.config[colIndex];
if(c.hidden !== hidden){
c.hidden = hidden;
@@ -580,28 +625,41 @@ myGrid.getColumnModel().setHidden(0, true); // hide column 0 (0 = the first colu
* @param {Number} col The column index
* @param {Object} editor The editor object
*/
- setEditor : function(col, editor){
- Ext.destroy(this.config[col].editor);
- this.config[col].editor = editor;
+ setEditor : function(col, editor) {
+ this.config[col].setEditor(editor);
},
/**
- * Destroys this column model by purging any event listeners, and removing any editors.
+ * Destroys this column model by purging any event listeners. Destroys and dereferences all Columns.
*/
- destroy : function(){
- for(var i = 0, c = this.config, len = c.length; i < len; i++){
- Ext.destroy(c[i].editor);
+ destroy : function() {
+ var length = this.config.length,
+ i = 0;
+
+ for (; i < length; i++){
+ this.config[i].destroy(); // Column's destroy encapsulates all cleanup.
}
+ delete this.config;
+ delete this.lookup;
this.purgeListeners();
+ },
+
+ /**
+ * @private
+ * Setup any saved state for the column, ensures that defaults are applied.
+ */
+ setState : function(col, state) {
+ state = Ext.applyIf(state, this.defaults);
+ Ext.apply(this.config[col], state);
}
});
// private
-Ext.grid.ColumnModel.defaultRenderer = function(value){
- if(typeof value == "string" && value.length < 1){
+Ext.grid.ColumnModel.defaultRenderer = function(value) {
+ if (typeof value == "string" && value.length < 1) {
return " ";
}
return value;
-};
+};
\ No newline at end of file