public static IUndoableGridTableAction removeRows(int nRows, int startRow, IGridRegion region, IGrid grid, MetaInfoWriter metaInfoWriter) { int w = IGridRegion.Tool.width(region); int h = IGridRegion.Tool.height(region); int firstToMove = region.getTop() + startRow + nRows; ArrayList<IUndoableGridTableAction> actions = new ArrayList<>(w * (h - startRow)); // resize merged regions -> shift cells by row -> clear cells actions.addAll(resizeMergedRegions(grid, startRow, nRows, REMOVE, ROWS, region, metaInfoWriter)); actions.addAll(shiftRows(firstToMove, nRows, REMOVE, region, grid, metaInfoWriter)); actions.addAll(clearCells(region.getLeft(), w, region.getBottom() + 1 - nRows, nRows, grid, metaInfoWriter)); return new UndoableCompositeAction(actions); } }
public static boolean canInsertColumns(IGridTable table, int nCols) { IGridRegion region = getOriginalRegion(table); GridRegion newRegion = new GridRegion(region.getTop() - 1, region.getRight() + 1, region.getBottom() + 1, region.getRight() + 1 + nCols); IGridTable[] allGridTables = table.getGrid().getTables(); for (IGridTable allGridTable : allGridTables) { if (!table.getUri().equals(allGridTable.getUri()) && IGridRegion.Tool.intersects(newRegion, allGridTable.getRegion())) { return false; } } return true; }
public static boolean canInsertRows(IGridTable table, int nRows) { IGridRegion region = getOriginalRegion(table); GridRegion newRegion = new GridRegion(region.getBottom() + 1, region.getLeft() - 1, region.getBottom() + 1 + nRows, region.getRight() + 1); IGridTable[] allGridTables = table.getGrid().getTables(); for (IGridTable allGridTable : allGridTables) { if (!table.getUri().equals(allGridTable.getUri()) && IGridRegion.Tool.intersects(newRegion, allGridTable.getRegion())) { return false; } } return true; }
public static IUndoableGridTableAction removeColumns(int nCols, int startColumn, IGridRegion region, IGrid grid, MetaInfoWriter metaInfoWriter) { int firstToMove = region.getLeft() + startColumn + nCols; int w = IGridRegion.Tool.width(region); int h = IGridRegion.Tool.height(region); ArrayList<IUndoableGridTableAction> actions = new ArrayList<>(h * (w - startColumn)); // resize merged regions -> shift cells by column -> clear cells actions.addAll(resizeMergedRegions(grid, startColumn, nCols, REMOVE, COLUMNS, region, metaInfoWriter)); actions.addAll(shiftColumns(firstToMove, nCols, REMOVE, region, grid, metaInfoWriter)); actions.addAll(clearCells(region.getRight() + 1 - nCols, nCols, region.getTop(), h, grid, metaInfoWriter)); return new UndoableCompositeAction(actions); }
/** * Return absolute row index taking into account region. * * @param region Region which contains row. * @param row Row index in the region. * @return Absolute row index. */ public static int getAbsoluteRow(IGridRegion region, int row) { return row + region.getTop(); }
/** * Return absolute column index taking into account region. * * @param region Region which contains column. * @param column Column index in the region. * @return Absolute column index. */ public static int getAbsoluteColumn(IGridRegion region, int column) { return column + region.getLeft(); }
IGridRegion existingMergedRegion = grid.getMergedRegion(i); if (IGridRegion.Tool.contains(regionOfTable, existingMergedRegion.getLeft(), existingMergedRegion .getTop())) { if (isRegionMustBeResized(existingMergedRegion, firstRowOrColumn, numberOfRowsOrColumns, isColumns, regionOfTable)) { ICellStyle oldCellStyle = grid.getCell(existingMergedRegion.getLeft(),existingMergedRegion.getBottom()).getStyle(); grid.getCell(existingMergedRegion.getLeft(),existingMergedRegion.getBottom() + 1).getStyle(); resizeActions.add(new SetBorderStyleAction(existingMergedRegion.getLeft(), existingMergedRegion.getBottom() + j, oldCellStyle, metaInfoWriter));
shiftActions.addAll(clearCells(region.getRight() + 1, nCols, region.getTop(), IGridRegion.Tool.height(region), grid, metaInfoWriter)); } else { for (int column = startColumn - nCols; column < startColumn; column++) { for (int row = region.getTop(); row <= region.getBottom(); row++) { if (!grid.isPartOfTheMergedRegion(column, row) || (grid.isTopLeftCellInMergedRegion(column, row) && IGridRegion.Tool if (isInsert) {// shift columns left direction = -1; colFromCopy = region.getRight(); } else {// shift columns right direction = 1; colFromCopy = startColumn; int numColumnsToBeShifted = region.getRight() - startColumn; for (int i = 0; i <= numColumnsToBeShifted; i++) { colToCopy = colFromCopy - direction * nCols; for (int row = region.getBottom(); row >= region.getTop(); row--) { shiftActions.add(shiftCell(colFromCopy, row, colToCopy, row, grid, metaInfoWriter));
shiftActions.addAll(clearCells(region.getLeft(), IGridRegion.Tool.width(region), region.getBottom() + 1, nRows, grid, metaInfoWriter)); } else { for (int row = startRow - nRows; row < startRow; row++) { for (int column = region.getLeft(); column <= region.getRight(); column++) { if (!grid.isPartOfTheMergedRegion(column, row) || (grid.isTopLeftCellInMergedRegion(column, row) && IGridRegion.Tool if (isInsert) {// shift rows down direction = -1; rowFromCopy = region.getBottom(); // we gets the bottom row from the region, and are int numRowsToBeShifted = region.getBottom() - startRow; for (int i = 0; i <= numRowsToBeShifted; i++) { int rowToCopy = rowFromCopy - direction * nRows; // compute to which row we need to shift. for (int column = region.getRight(); column >= region.getLeft(); column--) { shiftActions.add(shiftCell(column, rowFromCopy, column, rowToCopy, grid, metaInfoWriter));
public static boolean isValidRegion(IGridRegion region, SpreadsheetConstants spreadsheetConstants) { int rowIndex = region.getBottom(); int columnIndex = region.getRight(); return rowIndex >= 0 && rowIndex <= spreadsheetConstants.getMaxRowIndex() && columnIndex >= 0 && columnIndex <= spreadsheetConstants.getMaxColumnIndex(); } }
public int getGridRow(int column, int row) { return region.getTop() + row; }
public int getGridColumn(int column, int row) { return region.getLeft() + column; }