slackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangouts
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
3.7 KiB
128 lines
3.7 KiB
/** |
|
* @private |
|
*/ |
|
Ext.define('Ext.selection.DataViewModel', { |
|
extend: 'Ext.selection.Model', |
|
|
|
alias: 'selection.dataviewmodel', |
|
|
|
requires: ['Ext.util.KeyNav'], |
|
|
|
deselectOnContainerClick: true, |
|
|
|
/** |
|
* @cfg {Boolean} [enableKeyNav=true] |
|
* |
|
* @deprecated 5.1.0 Keyboard navigation is a function of the view's {@link Ext.view.NavigationModel navigation model}, |
|
* and is enabled for accessibilty purposes. |
|
*/ |
|
|
|
/** |
|
* @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. |
|
* @param {Number} The index within the store of the deselected record. |
|
*/ |
|
|
|
/** |
|
* @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. |
|
* @param {Number} The index within the store of the selected record. |
|
*/ |
|
|
|
/** |
|
* @event deselect |
|
* Fired after a record is deselected |
|
* @param {Ext.selection.DataViewModel} this |
|
* @param {Ext.data.Model} record The deselected record |
|
*/ |
|
|
|
/** |
|
* @event select |
|
* Fired after a record is selected |
|
* @param {Ext.selection.DataViewModel} this |
|
* @param {Ext.data.Model} record The selected record. |
|
* @param {Number} The index within the store of the selected record. |
|
*/ |
|
|
|
bindComponent: function(view) { |
|
var me = this, |
|
viewListeners; |
|
|
|
if (me.view !== view) { |
|
if (me.view) { |
|
me.navigationModel = null; |
|
Ext.destroy(me.viewListeners, me.navigationListeners); |
|
} |
|
me.view = view; |
|
if (view) { |
|
viewListeners = me.getViewListeners(); |
|
viewListeners.scope = me; |
|
viewListeners.destroyable = true; |
|
me.navigationModel = view.getNavigationModel(); |
|
me.viewListeners = view.on(viewListeners); |
|
me.navigationListeners = me.navigationModel.on({ |
|
navigate: me.onNavigate, |
|
scope: me, |
|
destroyable: true |
|
}); |
|
} |
|
} |
|
}, |
|
|
|
getViewListeners: function() { |
|
var me = this, |
|
eventListeners = {}; |
|
|
|
eventListeners[me.view.triggerCtEvent] = me.onContainerClick; |
|
return eventListeners; |
|
}, |
|
|
|
onUpdate: function(record){ |
|
var view = this.view; |
|
if (view && this.isSelected(record)) { |
|
view.onItemSelect(record); |
|
} |
|
}, |
|
|
|
onContainerClick: function() { |
|
if (this.deselectOnContainerClick) { |
|
this.deselectAll(); |
|
} |
|
}, |
|
|
|
// Allow the DataView to update the ui |
|
onSelectChange: function(record, isSelected, suppressEvent, commitFn) { |
|
var me = this, |
|
view = me.view, |
|
eventName = isSelected ? 'select' : 'deselect', |
|
recordIndex = me.store.indexOf(record); |
|
|
|
if ((suppressEvent || me.fireEvent('before' + eventName, me, record, recordIndex)) !== false && |
|
commitFn() !== false) { |
|
|
|
if (view) { |
|
if (isSelected) { |
|
view.onItemSelect(record); |
|
} else { |
|
view.onItemDeselect(record); |
|
} |
|
} |
|
|
|
if (!suppressEvent) { |
|
me.fireEvent(eventName, me, record, recordIndex); |
|
} |
|
} |
|
}, |
|
|
|
destroy: function() { |
|
this.bindComponent(); |
|
Ext.destroy(this.keyNav); |
|
this.callParent(); |
|
} |
|
});
|
|
|