isSelectedCell method
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');
}
}