UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

200 lines (164 loc) 4.83 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) * Jonathan Weiß (jonathan_rass) ************************************************************************ */ /** * Row selection manager */ qx.Class.define("qx.ui.virtual.selection.Row", { extend: qx.ui.virtual.selection.Abstract, /* ***************************************************************************** MEMBERS ***************************************************************************** */ members: { /** * Returns the number of all items in the pane. This number may contain * unselectable items as well. * * @return {Integer} number of items */ _getItemCount() { return this._pane.getRowConfig().getItemCount(); }, /* --------------------------------------------------------------------------- IMPLEMENT ABSTRACT METHODS --------------------------------------------------------------------------- */ // overridden _getSelectableFromPointerEvent(event) { var cell = this._pane.getCellAtPosition( event.getDocumentLeft(), event.getDocumentTop() ); if (!cell) { return null; } return this._isSelectable(cell.row) ? cell.row : null; }, // overridden getSelectables(all) { var selectables = []; for (var i = 0, l = this._getItemCount(); i < l; i++) { if (this._isSelectable(i)) { selectables.push(i); } } return selectables; }, // overridden _getSelectableRange(item1, item2) { var selectables = []; var min = Math.min(item1, item2); var max = Math.max(item1, item2); for (var i = min; i <= max; i++) { if (this._isSelectable(i)) { selectables.push(i); } } return selectables; }, // overridden _getFirstSelectable() { var count = this._getItemCount(); for (var i = 0; i < count; i++) { if (this._isSelectable(i)) { return i; } } return null; }, // overridden _getLastSelectable() { var count = this._getItemCount(); for (var i = count - 1; i >= 0; i--) { if (this._isSelectable(i)) { return i; } } return null; }, // overridden _getRelatedSelectable(item, relation) { if (relation == "above") { var startIndex = item - 1; var endIndex = 0; var increment = -1; } else if (relation == "under") { var startIndex = item + 1; var endIndex = this._getItemCount() - 1; var increment = 1; } else { return null; } for (var i = startIndex; i !== endIndex + increment; i += increment) { if (this._isSelectable(i)) { return i; } } return null; }, // overridden _getPage(lead, up) { var paneSize; var scrollY; var newItem; var rowConfig = this._pane.getRowConfig(); // Determine the height of the pane paneSize = this._pane.getInnerSize(); // Determine our current y position scrollY = this._pane.getScrollY(); // Scroll to the new page if (up) { // Add item size so we include the immediately previous item, i.e., so // that pageDown followed by pageUp returns to the same location this._pane.setScrollY( scrollY - paneSize.height + rowConfig.getDefaultItemSize() ); } else { this._pane.setScrollY(scrollY + paneSize.height); } // Determine new y position, and from that, what row we moved to scrollY = this._pane.getScrollY(); newItem = rowConfig.getItemAtPosition(scrollY); return newItem.index; }, // overridden _selectableToHashCode(item) { return item; }, // overridden _scrollItemIntoView(item) { if (this._autoScrollIntoView) { this._pane.scrollRowIntoView(item); } }, // overridden _getSelectableLocationX(item) { return { left: 0, right: this._pane.getColumnConfig().getTotalSize() - 1 }; }, // overridden _getSelectableLocationY(item) { var rowConfig = this._pane.getRowConfig(); var itemTop = rowConfig.getItemPosition(item); var itemBottom = itemTop + rowConfig.getItemSize(item) - 1; return { top: itemTop, bottom: itemBottom }; } } });