X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/3789b528d8dd8aad4558e38e22d775bcab1cbd36..6746dc89c47ed01b165cc1152533605f97eb8e8d:/docs/source/Model2.html diff --git a/docs/source/Model2.html b/docs/source/Model2.html index 18ddfd75..4d1ae627 100644 --- a/docs/source/Model2.html +++ b/docs/source/Model2.html @@ -32,7 +32,7 @@ */ Ext.define('Ext.selection.Model', { extend: 'Ext.util.Observable', - alternateClassName: 'Ext.AbstractStoreSelectionModel', + alternateClassName: 'Ext.AbstractSelectionModel', requires: ['Ext.data.StoreManager'], // lastSelected @@ -41,7 +41,7 @@ Ext.define('Ext.selection.Model', { * Modes of selection. * Valid values are SINGLE, SIMPLE, and MULTI. Defaults to 'SINGLE' */ - + /** * @cfg {Boolean} allowDeselect * Allow users to deselect a record in a DataView, List or Grid. Only applicable when the SelectionModel's mode is 'SINGLE'. Defaults to false. @@ -54,8 +54,8 @@ Ext.define('Ext.selection.Model', { * records. */ selected: null, - - + + /** * Prune records when they are removed from the store from the selection. * This is a private flag. For an example of its usage, take a look at @@ -66,10 +66,10 @@ Ext.define('Ext.selection.Model', { constructor: function(cfg) { var me = this; - + cfg = cfg || {}; Ext.apply(me, cfg); - + me.addEvents( /** * @event selectionchange @@ -91,14 +91,14 @@ Ext.define('Ext.selection.Model', { // maintains the currently selected records. me.selected = Ext.create('Ext.util.MixedCollection'); - + me.callParent(arguments); }, // binds the store to the selModel. bind : function(store, initial){ var me = this; - + if(!initial && me.store){ if(store !== me.store && me.store.autoDestroy){ me.store.destroy(); @@ -135,7 +135,7 @@ Ext.define('Ext.selection.Model', { i = 0, len = selections.length, start = me.getSelection().length; - + me.bulkChange = true; for (; i < len; i++) { me.doSelect(selections[i], true, suppressEvent); @@ -155,7 +155,7 @@ Ext.define('Ext.selection.Model', { i = 0, len = selections.length, start = me.getSelection().length; - + me.bulkChange = true; for (; i < len; i++) { me.doDeselect(selections[i], suppressEvent); @@ -168,9 +168,9 @@ Ext.define('Ext.selection.Model', { // Provides differentiation of logic between MULTI, SIMPLE and SINGLE // selection modes. Requires that an event be passed so that we can know // if user held ctrl or shift. - selectWithEvent: function(record, e) { + selectWithEvent: function(record, e, keepExisting) { var me = this; - + switch (me.selectionMode) { case 'MULTI': if (e.ctrlKey && me.isSelected(record)) { @@ -180,7 +180,7 @@ Ext.define('Ext.selection.Model', { } else if (e.ctrlKey) { me.doSelect(record, true, false); } else if (me.isSelected(record) && !e.shiftKey && !e.ctrlKey && me.selected.getCount() > 1) { - me.doSelect(record, false, false); + me.doSelect(record, keepExisting, false); } else { me.doSelect(record, false); } @@ -219,22 +219,22 @@ Ext.define('Ext.selection.Model', { tmp, dontDeselect, records = []; - + if (me.isLocked()){ return; } - + if (!keepExisting) { - me.clearSelections(); + me.deselectAll(true); } - + if (!Ext.isNumber(startRow)) { startRow = store.indexOf(startRow); - } + } if (!Ext.isNumber(endRow)) { endRow = store.indexOf(endRow); } - + // swap values if (startRow > endRow){ tmp = endRow; @@ -253,7 +253,7 @@ Ext.define('Ext.selection.Model', { } else { dontDeselect = (dir == 'up') ? startRow : endRow; } - + for (i = startRow; i <= endRow; i++){ if (selectedCount == (endRow - startRow + 1)) { if (i != dontDeselect) { @@ -265,7 +265,7 @@ Ext.define('Ext.selection.Model', { } me.doMultiSelect(records, true); }, - + /** * Selects a record instance by record instance or index. * @param {Ext.data.Model/Index} records An array of records or an index @@ -284,11 +284,11 @@ Ext.define('Ext.selection.Model', { deselect: function(records, suppressEvent) { this.doDeselect(records, suppressEvent); }, - + doSelect: function(records, keepExisting, suppressEvent) { var me = this, record; - + if (me.locked) { return; } @@ -309,17 +309,24 @@ Ext.define('Ext.selection.Model', { change = false, i = 0, len, record; - + if (me.locked) { return; } - + records = !Ext.isArray(records) ? [records] : records; len = records.length; if (!keepExisting && selected.getCount() > 0) { + if (me.doDeselect(me.getSelection(), suppressEvent) === false) { + return; + } + // TODO - coalesce the selectionchange event in deselect w/the one below... + } + + function commit () { + selected.add(record); change = true; - me.doDeselect(me.getSelection(), suppressEvent); } for (; i < len; i++) { @@ -327,11 +334,9 @@ Ext.define('Ext.selection.Model', { if (keepExisting && me.isSelected(record)) { continue; } - change = true; me.lastSelected = record; - selected.add(record); - me.onSelectChange(record, true, suppressEvent); + me.onSelectChange(record, true, suppressEvent, commit); } me.setLastFocused(record, suppressEvent); // fire selchange if there was a change and there is no suppressEvent flag @@ -342,38 +347,49 @@ Ext.define('Ext.selection.Model', { doDeselect: function(records, suppressEvent) { var me = this, selected = me.selected, - change = false, i = 0, - len, record; - + len, record, + attempted = 0, + accepted = 0; + if (me.locked) { - return; + return false; } if (typeof records === "number") { records = [me.store.getAt(records)]; + } else if (!Ext.isArray(records)) { + records = [records]; + } + + function commit () { + ++accepted; + selected.remove(record); } - records = !Ext.isArray(records) ? [records] : records; len = records.length; + for (; i < len; i++) { record = records[i]; - if (selected.remove(record)) { + if (me.isSelected(record)) { if (me.lastSelected == record) { me.lastSelected = selected.last(); } - me.onSelectChange(record, false, suppressEvent); - change = true; + ++attempted; + me.onSelectChange(record, false, suppressEvent, commit); } } + // fire selchange if there was a change and there is no suppressEvent flag - me.maybeFireSelectionChange(change && !suppressEvent); + me.maybeFireSelectionChange(accepted > 0 && !suppressEvent); + return accepted === attempted; }, doSingleSelect: function(record, suppressEvent) { var me = this, + changed = false, selected = me.selected; - + if (me.locked) { return; } @@ -382,16 +398,28 @@ Ext.define('Ext.selection.Model', { if (me.isSelected(record)) { return; } - if (selected.getCount() > 0) { - me.doDeselect(me.lastSelected, suppressEvent); + + function commit () { + me.bulkChange = true; + if (selected.getCount() > 0 && me.doDeselect(me.lastSelected, suppressEvent) === false) { + delete me.bulkChange; + return false; + } + delete me.bulkChange; + + selected.add(record); + me.lastSelected = record; + changed = true; } - selected.add(record); - me.lastSelected = record; - me.onSelectChange(record, true, suppressEvent); - if (!suppressEvent) { - me.setLastFocused(record); + + me.onSelectChange(record, true, suppressEvent, commit); + + if (changed) { + if (!suppressEvent) { + me.setLastFocused(record); + } + me.maybeFireSelectionChange(!suppressEvent); } - me.maybeFireSelectionChange(!suppressEvent); }, /** @@ -405,7 +433,7 @@ Ext.define('Ext.selection.Model', { me.lastFocused = record; me.onLastFocusChanged(recordBeforeLast, record, supressFocus); }, - + /** * Determines if this record is currently focused. * @param Ext.data.Record record @@ -430,13 +458,14 @@ Ext.define('Ext.selection.Model', { getLastSelected: function() { return this.lastSelected; }, - + getLastFocused: function() { return this.lastFocused; }, /** * Returns an array of the currently selected records. + * @return {Array} The selected records */ getSelection: function() { return this.selected.getRange(); @@ -444,6 +473,7 @@ Ext.define('Ext.selection.Model', { /** * Returns the current selectionMode. SINGLE, MULTI or SIMPLE. + * @return {String} The selectionMode */ getSelectionMode: function() { return this.selectionMode; @@ -485,9 +515,9 @@ Ext.define('Ext.selection.Model', { record = Ext.isNumber(record) ? this.store.getAt(record) : record; return this.selected.indexOf(record) !== -1; }, - + /** - * Returns true if there is a selected record. + * Returns true if there are any a selected records. * @return {Boolean} */ hasSelection: function() { @@ -521,7 +551,7 @@ Ext.define('Ext.selection.Model', { } me.clearSelections(); - + if (me.store.indexOf(lastFocused) !== -1) { // restore the last focus but supress restoring focus this.setLastFocused(lastFocused, true); @@ -531,7 +561,7 @@ Ext.define('Ext.selection.Model', { // perform the selection again me.doSelect(toBeSelected, false, true); } - + me.maybeFireSelectionChange(change); }, @@ -542,10 +572,9 @@ Ext.define('Ext.selection.Model', { */ clearSelections: function() { // reset the entire selection to nothing - var me = this; - me.selected.clear(); - me.lastSelected = null; - me.setLastFocused(null); + this.selected.clear(); + this.lastSelected = null; + this.setLastFocused(null); }, // when a record is added to a store @@ -556,14 +585,9 @@ Ext.define('Ext.selection.Model', { // when a store is cleared remove all selections // (if there were any) onStoreClear: function() { - var me = this, - selected = this.selected; - - if (selected.getCount > 0) { - selected.clear(); - me.lastSelected = null; - me.setLastFocused(null); - me.maybeFireSelectionChange(true); + if (this.selected.getCount > 0) { + this.clearSelections(); + this.maybeFireSelectionChange(true); } }, @@ -573,7 +597,7 @@ Ext.define('Ext.selection.Model', { onStoreRemove: function(store, record) { var me = this, selected = me.selected; - + if (me.locked || !me.pruneRemoved) { return; } @@ -589,6 +613,10 @@ Ext.define('Ext.selection.Model', { } }, + /** + * Gets the count of selected records. + * @return {Number} The number of selected records + */ getCount: function() { return this.selected.getCount(); },