/** * QuickCollectionTable * * Created by GUY on 2016/1/12. * @class BI.QuickCollectionTable * @extends BI.CollectionTable */ BI.QuickCollectionTable = BI.inherit(BI.CollectionTable, { _defaultConfig: function () { return BI.extend(BI.QuickCollectionTable.superclass._defaultConfig.apply(this, arguments), { extraCls: "bi-quick-collection-table" }); }, render: function () { BI.QuickCollectionTable.superclass.render.apply(this, arguments); var self = this, o = this.options; this.topLeftCollection.setOverflowX(false); this.topLeftCollection.setOverflowY(false); this.topRightCollection.setOverflowX(false); this.topRightCollection.setOverflowY(false); this.bottomLeftCollection.setOverflowX(false); this.bottomLeftCollection.setOverflowY(false); this.bottomRightCollection.setOverflowX(false); this.bottomRightCollection.setOverflowY(false); }, mounted: function () { BI.QuickCollectionTable.superclass.mounted.apply(this, arguments); var self = this; this._topLeftWheelHandler = new BI.WheelHandler( BI.bind(this._onWheelLeft, this), BI.bind(this._shouldHandleLeftX, this), BI.bind(this._shouldHandleY, this) ); this._topRightWheelHandler = new BI.WheelHandler( BI.bind(this._onWheelRight, this), BI.bind(this._shouldHandleRightX, this), BI.bind(this._shouldHandleY, this) ); this._bottomLeftWheelHandler = new BI.WheelHandler( BI.bind(this._onWheelLeft, this), BI.bind(this._shouldHandleLeftX, this), BI.bind(this._shouldHandleY, this) ); this._bottomRightWheelHandler = new BI.WheelHandler( BI.bind(this._onWheelRight, this), BI.bind(this._shouldHandleRightX, this), BI.bind(this._shouldHandleY, this) ); this.topLeftCollection.element.mousewheel(function (e) { self._topLeftWheelHandler.onWheel(e.originalEvent); }); this.topRightCollection.element.mousewheel(function (e) { self._topRightWheelHandler.onWheel(e.originalEvent); }); this.bottomLeftCollection.element.mousewheel(function (e) { self._bottomLeftWheelHandler.onWheel(e.originalEvent); }); this.bottomRightCollection.element.mousewheel(function (e) { self._bottomRightWheelHandler.onWheel(e.originalEvent); }); }, _shouldHandleLeftX: function (delta) { if (delta > 0) { return this.bottomLeftCollection.getScrollLeft() < this.bottomLeftCollection.getMaxScrollLeft(); } else { return this.bottomLeftCollection.getScrollLeft() > 0; } }, _shouldHandleRightX: function (delta) { if (delta > 0) { return this.bottomRightCollection.getScrollLeft() < this.bottomRightCollection.getMaxScrollLeft(); } else { return this.bottomRightCollection.getScrollLeft() > 0; } }, _shouldHandleY: function (delta) { if (delta > 0) { return this.bottomRightCollection.getScrollTop() < this.bottomRightCollection.getMaxScrollTop(); } else { return this.bottomRightCollection.getScrollTop() > 0; } }, _onWheelLeft: function (deltaX, deltaY) { var self = this; var scrollTop = this.bottomLeftCollection.getScrollTop(); var scrollLeft = this.bottomLeftCollection.getScrollLeft(); scrollTop += deltaY; scrollLeft += deltaX; this.bottomLeftCollection.setScrollTop(scrollTop); this.bottomRightCollection.setScrollTop(scrollTop); this.topLeftCollection.setScrollLeft(scrollLeft); this.bottomLeftCollection.setScrollLeft(scrollLeft); self._populateScrollbar(); this.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); }, _onWheelRight: function (deltaX, deltaY) { var self = this; var scrollTop = this.bottomRightCollection.getScrollTop(); var scrollLeft = this.bottomRightCollection.getScrollLeft(); scrollTop += deltaY; scrollLeft += deltaX; this.bottomLeftCollection.setScrollTop(scrollTop); this.bottomRightCollection.setScrollTop(scrollTop); this.topRightCollection.setScrollLeft(scrollLeft); this.bottomRightCollection.setScrollLeft(scrollLeft); self._populateScrollbar(); this.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments); }, _populateTable: function () { var self = this, o = this.options; var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = [] BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { totalLeftColumnSize += size; } else { totalRightColumnSize += size; } totalColumnSize += size; if (i === 0) { summaryColumnSizeArray[i] = size; } else { summaryColumnSizeArray[i] = summaryColumnSizeArray[i - 1] + size; } }); var otlw = regionSize; var otlh = this._getFreezeHeaderHeight(); var otrw = this._width - regionSize; var otrh = this._getFreezeHeaderHeight(); var oblw = regionSize; var oblh = this._height - otlh; var obrw = this._width - regionSize; var obrh = this._height - otrh; this.topLeft.setWidth(otlw); this.topLeft.setHeight(otlh); this.topRight.setWidth(otrw); this.topRight.setHeight(otrh); this.bottomLeft.setWidth(oblw); this.bottomLeft.setHeight(oblh); this.bottomRight.setWidth(obrw); this.bottomRight.setHeight(obrh); this.topLeftCollection.setWidth(otlw); this.topLeftCollection.setHeight(otlh); this.topRightCollection.setWidth(otrw); this.topRightCollection.setHeight(otrh); this.bottomLeftCollection.setWidth(oblw); this.bottomLeftCollection.setHeight(oblh); this.bottomRightCollection.setWidth(obrw); this.bottomRightCollection.setHeight(obrh); var items = this.contextLayout.attr("items"); items[1].left = regionSize; items[2].top = this._getFreezeHeaderHeight(); items[3].left = regionSize; items[3].top = this._getFreezeHeaderHeight(); this.contextLayout.attr("items", items); this.contextLayout.resize(); var leftHeader = [], rightHeader = [], leftItems = [], rightItems = []; var run = function (positions, items, rendered) { BI.each(positions, function (i, item) { var cell = { type: "bi.collection_table_cell", cell: items[item.row][item.col] }; rendered.push(cell); }); }; run(this.topLeftItems, o.header, leftHeader); run(this.topRightItems, o.header, rightHeader); run(this.bottomLeftItems, this._getActualItems(), leftItems); run(this.bottomRightItems, this._getActualItems(), rightItems); this.topLeftCollection.populate(leftHeader); this.topRightCollection.populate(rightHeader); this.bottomLeftCollection.populate(leftItems); this.bottomRightCollection.populate(rightItems); } }); BI.shortcut('bi.quick_collection_table', BI.QuickCollectionTable);