public override bool IsMerged(TabularPosition position, out TabularRange range) { range = new TabularRange(position, 1, 1); if ((_excel.ActiveSheet != null) && (_excel.ActiveSheet.SpanModel != null)) { CellRange range2 = _excel.ActiveSheet.SpanModel.Find(position.Row, position.Column); if (range2 != null) { range = new TabularRange(position.Area, range2.Row, range2.Column, range2.RowCount, range2.ColumnCount); return(true); } } return(false); }
TabularPosition MoveLeftByPage(out TabularPosition newStartPosition) { newStartPosition = TabularPosition.Empty; if (CanHorizontalScroll(false)) { TabularPosition position = _startNavigateCellPosition; if (CurrentCell.IsEmpty) { position = new TabularPosition(_startNavigateCellPosition.Area, 0, 0); } TabularRange currentViewport = CurrentViewport; bool flag = IsColumnInViewport(currentViewport, position); ScrollToPreviousPageOfColumns(); TabularRange viewPort = CurrentViewport; if (IsColumnInViewport(viewPort, position)) { return(CurrentCell); } int column = flag ? (position.Column - currentViewport.ColumnCount) : viewPort.Column; if (column < ContentBounds.Column) { column = ContentBounds.Column; } int num2 = flag ? position.Column : viewPort.LastColumn; while (column < num2) { TabularRange range3; TabularPosition topLeft = new TabularPosition(_startNavigateCellPosition.Area, position.Row, column); if (IsMerged(topLeft, out range3)) { topLeft = range3.TopLeft; } if (CanMoveCurrentTo(topLeft)) { newStartPosition = new TabularPosition(_startNavigateCellPosition.Area, position.Row, column); return(topLeft); } column += range3.ColumnCount; } } return(TabularPosition.Empty); }
TabularPosition MoveUpByPage(out TabularPosition newStartPosition) { newStartPosition = TabularPosition.Empty; if (CanVerticalScroll(false)) { TabularPosition position = _startNavigateCellPosition; if (CurrentCell.IsEmpty) { position = new TabularPosition(_startNavigateCellPosition.Area, 0, 0); } TabularRange currentViewport = CurrentViewport; bool flag = IsRowInViewport(currentViewport, position); ScrollToPreviousPageOfRows(); TabularRange viewPort = CurrentViewport; if (IsRowInViewport(viewPort, position)) { return(CurrentCell); } int row = flag ? (position.Row - currentViewport.RowCount) : viewPort.Row; int num2 = flag ? position.Row : viewPort.LastRow; if (row < ContentBounds.Row) { row = ContentBounds.Row; } while (row < num2) { TabularRange range3; TabularPosition topLeft = new TabularPosition(_startNavigateCellPosition.Area, row, position.Column); if (IsMerged(topLeft, out range3)) { topLeft = range3.TopLeft; } if (CanMoveCurrentTo(topLeft)) { newStartPosition = new TabularPosition(_startNavigateCellPosition.Area, row, position.Column); return(topLeft); } row += range3.RowCount; } } return(TabularPosition.Empty); }
TabularPosition MoveRightByPage(out TabularPosition newStartPosition) { newStartPosition = TabularPosition.Empty; if (CanHorizontalScroll(true)) { TabularPosition position = _startNavigateCellPosition; if (CurrentCell.IsEmpty) { position = new TabularPosition(_startNavigateCellPosition.Area, 0, 0); } TabularRange currentViewport = CurrentViewport; bool flag = IsColumnInViewport(currentViewport, _startNavigateCellPosition); ScrollToNextPageOfColumns(); TabularRange viewPort = CurrentViewport; if (IsColumnInViewport(viewPort, position)) { return(CurrentCell); } if (flag) { int column = position.Column + currentViewport.ColumnCount; if (column > ContentBounds.LastColumn) { column = ContentBounds.LastColumn; } while (column > position.Column) { TabularRange range3; TabularPosition topLeft = new TabularPosition(position.Area, position.Row, column); if (IsMerged(topLeft, out range3)) { topLeft = range3.TopLeft; } if (CanMoveCurrentTo(topLeft)) { newStartPosition = new TabularPosition(position.Area, position.Row, column); return(topLeft); } column -= range3.ColumnCount; } } else { TabularRange range4; for (int i = viewPort.Column; i < viewPort.LastColumn; i += range4.ColumnCount) { TabularPosition position3 = new TabularPosition(position.Area, position.Row, i); if (IsMerged(position3, out range4)) { position3 = range4.TopLeft; } if (CanMoveCurrentTo(position3)) { newStartPosition = new TabularPosition(position.Area, position.Row, i); return(position3); } } } } return(TabularPosition.Empty); }
TabularPosition MoveDownByPage(out TabularPosition newStartPosition) { newStartPosition = TabularPosition.Empty; if (CanVerticalScroll(true)) { TabularPosition position = _startNavigateCellPosition; if (CurrentCell.IsEmpty) { position = new TabularPosition(_startNavigateCellPosition.Area, 0, 0); } TabularRange currentViewport = CurrentViewport; bool flag = IsRowInViewport(currentViewport, position); ScrollToNextPageOfRows(); TabularRange viewPort = CurrentViewport; if (IsRowInViewport(viewPort, position)) { return(CurrentCell); } if (flag) { int row = position.Row + currentViewport.RowCount; if (row > ContentBounds.LastRow) { row = ContentBounds.LastRow; } while (row > position.Row) { TabularRange range3; TabularPosition topLeft = new TabularPosition(position.Area, row, position.Column); if (IsMerged(topLeft, out range3)) { topLeft = range3.TopLeft; } if (CanMoveCurrentTo(topLeft)) { newStartPosition = new TabularPosition(position.Area, row, position.Column); return(topLeft); } row -= range3.RowCount; } } else { TabularRange range4; for (int i = viewPort.Row; i < viewPort.LastRow; i += range4.RowCount) { TabularPosition position3 = new TabularPosition(_startNavigateCellPosition.Area, i, position.Column); if (IsMerged(position3, out range4)) { position3 = range4.TopLeft; } if (CanMoveCurrentTo(position3)) { newStartPosition = new TabularPosition(_startNavigateCellPosition.Area, i, position.Column); return(position3); } } } } return(TabularPosition.Empty); }
bool IsRowInViewport(TabularRange viewPort, TabularPosition position) { return((position.Row >= viewPort.Row) && (position.Row <= viewPort.LastRow)); }
public abstract bool IsMerged(TabularPosition position, out TabularRange range);
bool IsColumnInViewport(TabularRange viewPort, TabularPosition position) { return((position.Column >= viewPort.Column) && (position.Column <= viewPort.LastColumn)); }