X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/ee06f37b0f6f6d94cd05a6ffae556660f7c4a2bc..c930e9176a5a85509c5b0230e2bff5c22a591432:/src/widgets/list/Sorter.js diff --git a/src/widgets/list/Sorter.js b/src/widgets/list/Sorter.js new file mode 100644 index 00000000..a7ee71a9 --- /dev/null +++ b/src/widgets/list/Sorter.js @@ -0,0 +1,70 @@ +/*! + * Ext JS Library 3.0.0 + * Copyright(c) 2006-2009 Ext JS, LLC + * licensing@extjs.com + * http://www.extjs.com/license + */ +/** + * @class Ext.ListView.Sorter + * @extends Ext.util.Observable + *

Supporting Class for Ext.ListView.

+ * @constructor + * @param {Object} config + */ +Ext.ListView.Sorter = Ext.extend(Ext.util.Observable, { + /** + * @cfg {Array} sortClasses + * The CSS classes applied to a header when it is sorted. (defaults to ["sort-asc", "sort-desc"]) + */ + sortClasses : ["sort-asc", "sort-desc"], + + constructor: function(config){ + Ext.apply(this, config); + Ext.ListView.Sorter.superclass.constructor.call(this); + }, + + init : function(listView){ + this.view = listView; + listView.on('render', this.initEvents, this); + }, + + initEvents : function(view){ + view.mon(view.innerHd, 'click', this.onHdClick, this); + view.innerHd.setStyle('cursor', 'pointer'); + view.mon(view.store, 'datachanged', this.updateSortState, this); + this.updateSortState.defer(10, this, [view.store]); + }, + + updateSortState : function(store){ + var state = store.getSortState(); + if(!state){ + return; + } + this.sortState = state; + var cs = this.view.columns, sortColumn = -1; + for(var i = 0, len = cs.length; i < len; i++){ + if(cs[i].dataIndex == state.field){ + sortColumn = i; + break; + } + } + if(sortColumn != -1){ + var sortDir = state.direction; + this.updateSortIcon(sortColumn, sortDir); + } + }, + + updateSortIcon : function(col, dir){ + var sc = this.sortClasses; + var hds = this.view.innerHd.select('em').removeClass(sc); + hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]); + }, + + onHdClick : function(e){ + var hd = e.getTarget('em', 3); + if(hd && !this.view.disableHeaders){ + var index = this.view.findHeaderIndex(hd); + this.view.store.sort(this.view.columns[index].dataIndex); + } + } +}); \ No newline at end of file