setCurrentSelectingPositionWithOffset method
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,
),
);
}