static/ext/src/ux/grid/FilterBar.js
function() {
		var me = this;
		var columns = this.grid.headerCt.getGridColumns();
		me.columns.clear();
		me.autoStores.clear();

        
		Ext.each(columns, function(column) {
			if (column.filter) {
				if (column.filter === true || column.filter === 'auto') { // automatic types configuration (store based)
					var type = 'auto'//me.grid.store.model.prototype.fields.get(column.dataIndex).type.type;
					if (type == 'auto') type = 'string';
					column.filter = type;
				}
				if (Ext.isString(column.filter)) {
					column.filter = {
						type: column.filter // only set type to then use templates
					};
				}
				if (column.filter.type) {
					column.filter = Ext.applyIf(column.filter, me[column.filter.type + 'Tpl']); // also use templates but with user configuration
				}

				if (column.filter.xtype == 'combo' && !column.filter.store) {
					column.autoStore = true;
					column.filter.store = Ext.create('Ext.data.ArrayStore', {
						fields: [{
							name: 'text'
						},{
							name: 'id'
						}]
					});
					me.autoStores.add(column.dataIndex, column.filter.store);
					column.filter = Ext.apply(column.filter, {
						displayField: 'text',
						valueField: 'id'
					});
				}

				if (!column.filter.type) {
					switch(column.filter.xtype) {
						case 'combo':
							column.filter.type = (column.filter.multiSelect ? 'list' : 'combo');
							break;
						case 'datefield':
							column.filter.type = 'date';
							break;
						case 'numberfield':
							column.filter.type = (column.filter.allowDecimals ? 'float' : 'int');
							break;
						default:
							column.filter.type = 'string'
					}
				}

				if (!column.filter.operator) {
					column.filter.operator = me[column.filter.type + 'Tpl'].operator;
				}
				me.columns.add(column.dataIndex, column);
			}
		}, me);
		if (me.autoStores.getCount()) {
			if (me.grid.store.getCount() > 0) {
				me.fillAutoStores(me.grid.store);
			}
			if (me.grid.store.remoteFilter) {
				var autoStores = [];
				me.autoStores.eachKey(function(key, item) {
					autoStores.push(key);
				});
				me.grid.store.proxy.extraParams = me.grid.store.proxy.extraParams || {};
				me.grid.store.proxy.extraParams[me.autoStoresRemoteProperty] = autoStores;
			}
			me.grid.store.on('load', me.fillAutoStores, me);
		}
	}
function() {
		var me = this;
		var columns = this.grid.headerCt.getGridColumns();
		me.columns.clear();
		me.autoStores.clear();

        
		Ext.each(columns, function(column) {
			if (column.filter) {
				if (column.filter === true || column.filter === 'auto') { // automatic types configuration (store based)
					var type = 'auto'//me.grid.store.model.prototype.fields.get(column.dataIndex).type.type;
					if (type == 'auto') type = 'string';
					column.filter = type;
				}
				if (Ext.isString(column.filter)) {
					column.filter = {
						type: column.filter // only set type to then use templates
					};
				}
				if (column.filter.type) {
					column.filter = Ext.applyIf(column.filter, me[column.filter.type + 'Tpl']); // also use templates but with user configuration
				}

				if (column.filter.xtype == 'combo' && !column.filter.store) {
					column.autoStore = true;
					column.filter.store = Ext.create('Ext.data.ArrayStore', {
						fields: [{
							name: 'text'
						},{
							name: 'id'
						}]
					});
					me.autoStores.add(column.dataIndex, column.filter.store);
					column.filter = Ext.apply(column.filter, {
						displayField: 'text',
						valueField: 'id'
					});
				}

				if (!column.filter.type) {
					switch(column.filter.xtype) {
						case 'combo':
							column.filter.type = (column.filter.multiSelect ? 'list' : 'combo');
							break;
						case 'datefield':
							column.filter.type = 'date';
							break;
						case 'numberfield':
							column.filter.type = (column.filter.allowDecimals ? 'float' : 'int');
							break;
						default:
							column.filter.type = 'string'
					}
				}

				if (!column.filter.operator) {
					column.filter.operator = me[column.filter.type + 'Tpl'].operator;
				}
				me.columns.add(column.dataIndex, column);
			}
		}, me);
		if (me.autoStores.getCount()) {
			if (me.grid.store.getCount() > 0) {
				me.fillAutoStores(me.grid.store);
			}
			if (me.grid.store.remoteFilter) {
				var autoStores = [];
				me.autoStores.eachKey(function(key, item) {
					autoStores.push(key);
				});
				me.grid.store.proxy.extraParams = me.grid.store.proxy.extraParams || {};
				me.grid.store.proxy.extraParams[me.autoStoresRemoteProperty] = autoStores;
			}
			me.grid.store.on('load', me.fillAutoStores, me);
		}
	}
private