| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- Ext.define('saas.override.grid.buffer.BufferedRenderer', {
- override: 'Ext.grid.plugin.BufferedRenderer',
- setViewSize: function(viewSize, fromLockingPartner) {
- var me = this,
- store = me.store,
- view = me.view,
- ownerGrid,
- rows = view.all,
- elCount = rows.getCount(),
- storeCount = store.getCount(),
- start, end,
- lockingPartner = me.view.lockingPartner && me.view.lockingPartner.bufferedRenderer,
- diff = elCount - viewSize,
- oldTop = 0,
- maxIndex = Math.max(0, storeCount - 1),
- // This is which end is closer to being visible therefore must be the first to have rows added
- // or the opposite end from which rows get removed if shrinking the view.
- pointyEnd = Ext.Number.sign((me.getFirstVisibleRowIndex() - rows.startIndex) - (rows.endIndex - me.getLastVisibleRowIndex()));
- // Synchronize view sizes
- if (lockingPartner && !fromLockingPartner) {
- lockingPartner.setViewSize(viewSize, true);
- }
- diff = elCount - viewSize;
- if (diff) {
- // Must be set for getFirstVisibleRowIndex to work
- me.scrollTop = me.scroller ? me.scroller.getPosition().y : 0;
- me.viewSize = viewSize;
- if (store.isBufferedStore) {
- store.setViewSize(viewSize);
- }
- // If a store loads before we have calculated a viewSize, it loads me.defaultViewSize records.
- // This may be larger or smaller than the final viewSize so the store needs adjusting when the view size is calculated.
- if (elCount) {
- // New start index should be current start index unless that's now too close to the end of the store
- // to yield a full view, in which case work back from the end of the store.
- // Ensure we don't go negative.
- start = Math.max(0, Math.min(rows.startIndex, storeCount - viewSize));
- // New end index works forward from the new start index ensuring we don't walk off the end
- end = Math.min(start + viewSize - 1, maxIndex);
- // Only do expensive adding or removal if range is not already correct
- if (start === rows.startIndex && end === rows.endIndex) {
- // Needs rows adding to or bottom depending on which end is closest
- // to being visible (The pointy end)
- if (diff < 0) {
- me.handleViewScroll(pointyEnd);
- }
- } else {
- // While changing our visible range, the locking partner must not sync
- if (lockingPartner) {
- lockingPartner.disable();
- }
- // View must expand
- if (diff < 0) {
- // If it's *possible* to add rows...
- if (storeCount > viewSize && storeCount > elCount) {
- // Grab the render range with a view to appending and prepending
- // nodes to the top and bottom as necessary.
- // Store's getRange API always has been inclusive of endIndex.
- store.getRange(start, end, {
- callback: function(newRecords, start, end) {
- ownerGrid = view.ownerGrid;
- // Append if necessary
- if (end > rows.endIndex) {
- rows.scroll(Ext.Array.slice(newRecords, rows.endIndex + 1, Infinity), 1, 0);
- }
- // Prepend if necessary
- if (start < rows.startIndex) {
- oldTop = rows.first(true);
- rows.scroll(Ext.Array.slice(newRecords, 0, rows.startIndex - start), -1, 0);
- // We just added some rows to the top of the rendered block
- // We have to bump it up to keep the view stable.
- me.bodyTop -= oldTop.offsetTop;
- }
- me.setBodyTop(me.bodyTop);
- // The newly added rows must sync the row heights
- if (lockingPartner && !fromLockingPartner && (ownerGrid.syncRowHeight || ownerGrid.syncRowHeightOnNextLayout)) {
- lockingPartner.setViewSize(viewSize, true);
- ownerGrid.syncRowHeights();
- }
- }
- });
- } else // If not possible just refresh
- {
- me.refreshView(0);
- }
- } else // View size is contracting
- {
- // If removing from top, we have to bump the rendered block downwards
- // by the height of the removed rows.
- if (pointyEnd === 1) {
- oldTop = rows.item(rows.startIndex + diff, true).offsetTop;
- }
- // Clip the rows off the required end
- rows.clip(pointyEnd, diff);
- me.setBodyTop(me.bodyTop + oldTop);
- }
- if (lockingPartner) {
- lockingPartner.enable();
- }
- }
- }
- // Update scroll range
- me.refreshSize();
- }
- if(this.grid.xtype=='power-grid'){
- viewSize = 61
- }
- return viewSize;
- },
- });
|