| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | <!DOCTYPE html><html><head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>The source code</title>  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>  <style type="text/css">    .highlight { display: block; background-color: #ddd; }  </style>  <script type="text/javascript">    function highlight() {      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";    }  </script></head><body onload="prettyPrint(); highlight();">  <pre class="prettyprint lang-js"><span id='Ext-selection-DataViewModel'>/**</span> * @private */Ext.define('Ext.selection.DataViewModel', {    extend: 'Ext.selection.Model',    requires: ['Ext.util.KeyNav'],    deselectOnContainerClick: true,<span id='Ext-selection-DataViewModel-cfg-enableKeyNav'>    /**</span>     * @cfg {Boolean} enableKeyNav     *     * Turns on/off keyboard navigation within the DataView.     */    enableKeyNav: true,    constructor: function(cfg){        this.addEvents(<span id='Ext-selection-DataViewModel-event-beforedeselect'>            /**</span>             * @event beforedeselect             * Fired before a record is deselected. If any listener returns false, the             * deselection is cancelled.             * @param {Ext.selection.DataViewModel} this             * @param {Ext.data.Model} record The deselected record             */            'beforedeselect',<span id='Ext-selection-DataViewModel-event-beforeselect'>            /**</span>             * @event beforeselect             * Fired before a record is selected. If any listener returns false, the             * selection is cancelled.             * @param {Ext.selection.DataViewModel} this             * @param {Ext.data.Model} record The selected record             */            'beforeselect',<span id='Ext-selection-DataViewModel-event-deselect'>            /**</span>             * @event deselect             * Fired after a record is deselected             * @param {Ext.selection.DataViewModel} this             * @param  {Ext.data.Model} record The deselected record             */            'deselect',<span id='Ext-selection-DataViewModel-event-select'>            /**</span>             * @event select             * Fired after a record is selected             * @param {Ext.selection.DataViewModel} this             * @param  {Ext.data.Model} record The selected record             */            'select'        );        this.callParent(arguments);    },    bindComponent: function(view) {        var me = this,            eventListeners = {                refresh: me.refresh,                scope: me            };        me.view = view;        me.bindStore(view.getStore());        eventListeners[view.triggerEvent] = me.onItemClick;        eventListeners[view.triggerCtEvent] = me.onContainerClick;        view.on(eventListeners);        if (me.enableKeyNav) {            me.initKeyNav(view);        }    },    onItemClick: function(view, record, item, index, e) {        this.selectWithEvent(record, e);    },    onContainerClick: function() {        if (this.deselectOnContainerClick) {            this.deselectAll();        }    },    initKeyNav: function(view) {        var me = this;        if (!view.rendered) {            view.on({                render: Ext.Function.bind(me.initKeyNav, me, [view]),                single: true            });            return;        }        view.el.set({            tabIndex: -1        });        me.keyNav = new Ext.util.KeyNav({            target: view.el,            ignoreInputFields: true,            down: Ext.pass(me.onNavKey, [1], me),            right: Ext.pass(me.onNavKey, [1], me),            left: Ext.pass(me.onNavKey, [-1], me),            up: Ext.pass(me.onNavKey, [-1], me),            scope: me        });    },    onNavKey: function(step) {        step = step || 1;        var me = this,            view = me.view,            selected = me.getSelection()[0],            numRecords = me.view.store.getCount(),            idx;        if (selected) {            idx = view.indexOf(view.getNode(selected)) + step;        } else {            idx = 0;        }        if (idx < 0) {            idx = numRecords - 1;        } else if (idx >= numRecords) {            idx = 0;        }        me.select(idx);    },    // Allow the DataView to update the ui    onSelectChange: function(record, isSelected, suppressEvent, commitFn) {        var me = this,            view = me.view,            eventName = isSelected ? 'select' : 'deselect';        if ((suppressEvent || me.fireEvent('before' + eventName, me, record)) !== false &&                commitFn() !== false) {            if (view) {                if (isSelected) {                    view.onItemSelect(record);                } else {                    view.onItemDeselect(record);                }            }            if (!suppressEvent) {                me.fireEvent(eventName, me, record);            }        }    },        destroy: function(){        Ext.destroy(this.keyNav);        this.callParent();    }});</pre></body></html>
 |