setCurrentSelectingPositionWithOffset method

  1. @override
void setCurrentSelectingPositionWithOffset(
  1. Offset? offset
)
inherited

Sets the position of a multi-selected cell.

Implementation

@override
void setCurrentSelectingPositionWithOffset(Offset? offset) {
  if (currentCell == null) {
    return;
  }

  final double gridBodyOffsetDy = gridGlobalOffset!.dy +
      PlutoGridSettings.gridBorderWidth +
      headerHeight +
      columnGroupHeight +
      columnHeight +
      columnFilterHeight;

  double currentCellOffsetDy = (currentRowIdx! * rowTotalHeight) +
      gridBodyOffsetDy -
      scroll.vertical!.offset;

  if (gridBodyOffsetDy > offset!.dy) {
    return;
  }

  int rowIdx = (((currentCellOffsetDy - offset.dy) / rowTotalHeight).ceil() -
          currentRowIdx!)
      .abs();

  int? columnIdx;

  final directionalOffset = toDirectionalOffset(offset);
  double currentWidth = isLTR ? gridGlobalOffset!.dx : 0.0;

  final columnIndexes = columnIndexesByShowFrozen;

  final savedRightBlankOffset = rightBlankOffset;
  final savedHorizontalScrollOffset = scroll.horizontal!.offset;

  for (int i = 0; i < columnIndexes.length; i += 1) {
    final column = refColumns[columnIndexes[i]];

    currentWidth += column.width;

    final rightFrozenColumnOffset =
        column.frozen.isEnd && showFrozenColumn ? savedRightBlankOffset : 0;

    if (currentWidth + rightFrozenColumnOffset >
        directionalOffset.dx + savedHorizontalScrollOffset) {
      columnIdx = i;
      break;
    }
  }

  if (columnIdx == null) {
    return;
  }

  setCurrentSelectingPosition(
    cellPosition: PlutoGridCellPosition(
      columnIdx: columnIdx,
      rowIdx: rowIdx,
    ),
  );
}