UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

283 lines (230 loc) 6.51 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) ************************************************************************ */ /** * EXPERIMENTAL! * * Cell selection manager */ qx.Class.define("qx.ui.virtual.selection.CellRectangle", { 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 : function() { return this._pane.getRowConfig().getItemCount() * this._pane.getColumnConfig().getItemCount(); }, /* --------------------------------------------------------------------------- IMPLEMENT ABSTRACT METHODS --------------------------------------------------------------------------- */ // overridden _getSelectableFromPointerEvent : function(event) { var cell = this._pane.getCellAtPosition( event.getDocumentLeft(), event.getDocumentTop() ); if (!cell) { return null; } return this._isSelectable(cell) ? cell : null; }, // overridden getSelectables : function(all) { var selectables = []; var rowCount = this._pane.getRowConfig().getItemCount(); var columnCount = this._pane.getColumnConfig().getItemCount(); for (var row=0; row<rowCount; row++) { for (var column=0; column<columnCount; column++) { var cell = { row: row, column: column }; if (this._isSelectable(cell)) { selectables.push(cell); } } } return selectables; }, // overridden _getSelectableRange : function(item1, item2) { var selectables = []; var minRow = Math.min(item1.row, item2.row); var maxRow = Math.max(item1.row, item2.row); var minColumn = Math.min(item1.column, item2.column); var maxColumn = Math.max(item1.column, item2.column); for (var row=minRow; row<=maxRow; row++) { for (var column=minColumn; column<=maxColumn; column++) { var cell = { row: row, column: column }; if (this._isSelectable(cell)) { selectables.push(cell); } } } return selectables; }, // overridden _getFirstSelectable : function() { var rowCount = this._pane.getRowConfig().getItemCount(); var columnCount = this._pane.getColumnConfig().getItemCount(); for (var row=0; row<rowCount; row++) { for (var column=0; column<columnCount; column++) { var cell = { row: row, column: column }; if (this._isSelectable(cell)) { return cell; } } } return null; }, // overridden _getLastSelectable : function() { var rowCount = this._pane.getRowConfig().getItemCount(); var columnCount = this._pane.getColumnConfig().getItemCount(); for (var column=columnCount-1; column>=0; column--) { for (var row=rowCount-1; row>=0; row--) { var cell = { row: row, column: column }; if (this._isSelectable(cell)) { return cell; } } } return null; }, // overridden _getRelatedSelectable : function(item, relation) { var cell = { row: item.row, column: item.column }; switch(relation) { case "above": for (var row=item.row-1; row>=0; row--) { cell.row = row; if (this._isSelectable(cell)) { return cell; } } break; case "under": var rowCount = this._pane.getRowConfig().getItemCount(); for (var row=item.row+1; row<rowCount; row++) { cell.row = row; if (this._isSelectable(cell)) { return cell; } } break; case "left": for (var column=item.column-1; column>=0; column--) { cell.column = column; if (this._isSelectable(cell)) { return cell; } } break; case "right": var columnCount = this._pane.getColumnConfig().getItemCount(); for (var column=item.column+1; column<columnCount; column++) { cell.column = column; if (this._isSelectable(cell)) { return cell; } } break; } return null; }, // overridden _getPage : function(lead, up) { if (up) { return this._getFirstSelectable(); } else { return this._getLastSelectable(); } }, // overridden _selectableToHashCode : function(item) { return item.column + "x" + item.row; }, // overridden _scrollItemIntoView : function(item) { if (this._autoScrollIntoView) { this._pane.scrollCellIntoView(item.column, item.row); } }, // overridden _getSelectableLocationX : function(item) { var columnConfig = this._pane.getColumnConfig(); var itemLeft = columnConfig.getItemPosition(item.column); var itemRight = itemLeft + columnConfig.getItemSize(item.column) - 1; return { left: itemLeft, right: itemRight }; }, // overridden _getSelectableLocationY : function(item) { var rowConfig = this._pane.getRowConfig(); var itemTop = rowConfig.getItemPosition(item.row); var itemBottom = itemTop + rowConfig.getItemSize(item.row) - 1; return { top: itemTop, bottom: itemBottom }; } } });