/** * This plugin ensures that its associated grid or tree always has a selection record. The * only exception is, of course, when there are no records in the store. * @since 6.0.2 */Ext.define('Ext.ux.grid.plugin.AutoSelector', { extend: 'Ext.plugin.Abstract', alias: 'plugin.gridautoselector', config: { store: null }, init: function(grid) { var me = this; //<debug> if (!grid.isXType('tablepanel')) { Ext.raise('The gridautoselector plugin is designed only for grids and trees'); } //</debug> me.grid = grid; me.watchGrid(); grid.on({ reconfigure: me.watchGrid, scope: me }); }, destroy: function() { this.setStore(null); this.grid = null; this.callParent(); }, ensureSelection: function() { var grid = this.grid, store = grid.getStore(), selection; if (store.getCount()) { selection = grid.getSelection(); if (!selection || !selection.length) { grid.getSelectionModel().select(0); } } }, watchGrid: function() { this.setStore(this.grid.getStore()); this.ensureSelection(); }, updateStore: function(store) { var me = this; Ext.destroy(me.storeListeners); me.storeListeners = store && store.on({ // We could go from 0 records to 1+ records... now we can select one! add: me.ensureSelection, // We might remove the selected record... remove: me.ensureSelection, destroyable: true, scope: me }); }});