isSelectedCell method

  1. @override
bool isSelectedCell(
  1. PlutoCell cell,
  2. PlutoColumn column,
  3. int rowIdx
)
inherited

Whether the cell is the currently multi selected cell.

Implementation

@override
bool isSelectedCell(PlutoCell cell, PlutoColumn column, int rowIdx) {
  if (selectingMode.isNone) {
    return false;
  }

  if (currentCellPosition == null) {
    return false;
  }

  if (currentSelectingPosition == null) {
    return false;
  }

  if (selectingMode.isCell) {
    final bool inRangeOfRows = min(
              currentCellPosition!.rowIdx as num,
              currentSelectingPosition!.rowIdx as num,
            ) <=
            rowIdx &&
        rowIdx <=
            max(
              currentCellPosition!.rowIdx!,
              currentSelectingPosition!.rowIdx!,
            );

    if (inRangeOfRows == false) {
      return false;
    }

    final int? columnIdx = columnIndex(column);

    if (columnIdx == null) {
      return false;
    }

    final bool inRangeOfColumns = min(
              currentCellPosition!.columnIdx as num,
              currentSelectingPosition!.columnIdx as num,
            ) <=
            columnIdx &&
        columnIdx <=
            max(
              currentCellPosition!.columnIdx!,
              currentSelectingPosition!.columnIdx!,
            );

    if (inRangeOfColumns == false) {
      return false;
    }

    return true;
  } else if (selectingMode.isHorizontal) {
    int startRowIdx = min(
      currentCellPosition!.rowIdx!,
      currentSelectingPosition!.rowIdx!,
    );

    int endRowIdx = max(
      currentCellPosition!.rowIdx!,
      currentSelectingPosition!.rowIdx!,
    );

    final int? columnIdx = columnIndex(column);

    if (columnIdx == null) {
      return false;
    }

    int? startColumnIdx;

    int? endColumnIdx;

    if (currentCellPosition!.rowIdx! < currentSelectingPosition!.rowIdx!) {
      startColumnIdx = currentCellPosition!.columnIdx;
      endColumnIdx = currentSelectingPosition!.columnIdx;
    } else if (currentCellPosition!.rowIdx! >
        currentSelectingPosition!.rowIdx!) {
      startColumnIdx = currentSelectingPosition!.columnIdx;
      endColumnIdx = currentCellPosition!.columnIdx;
    } else {
      startColumnIdx = min(
        currentCellPosition!.columnIdx!,
        currentSelectingPosition!.columnIdx!,
      );
      endColumnIdx = max(
        currentCellPosition!.columnIdx!,
        currentSelectingPosition!.columnIdx!,
      );
    }

    if (rowIdx == startRowIdx && startRowIdx == endRowIdx) {
      return !(columnIdx < startColumnIdx! || columnIdx > endColumnIdx!);
    } else if (rowIdx == startRowIdx && columnIdx >= startColumnIdx!) {
      return true;
    } else if (rowIdx == endRowIdx && columnIdx <= endColumnIdx!) {
      return true;
    } else if (rowIdx > startRowIdx && rowIdx < endRowIdx) {
      return true;
    }

    return false;
  } else if (selectingMode.isRow) {
    return false;
  } else {
    throw Exception('selectingMode is not handled');
  }
}