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); }
public static IUndoableGridTableAction insertColumns(int nCols, int beforeColumns, IGridRegion region, IGrid grid, MetaInfoWriter metaInfoWriter) { int h = IGridRegion.Tool.height(region); int w = IGridRegion.Tool.width(region); int columnsToMove = w - beforeColumns; ArrayList<IUndoableGridTableAction> actions = new ArrayList<>(h * columnsToMove); int firstToMove = region.getLeft() + beforeColumns; int colTo = firstToMove + nCols; int top = region.getTop(); // shift cells by column, copy cells of inserted column and resize merged regions after actions.addAll(shiftColumns(colTo, nCols, INSERT, region, grid, metaInfoWriter)); actions.addAll(copyCells(firstToMove, top, colTo, top, nCols, h, grid, metaInfoWriter)); actions.addAll(resizeMergedRegions(grid, beforeColumns, nCols, INSERT, COLUMNS, region, metaInfoWriter)); actions.addAll(emptyCells(firstToMove, top, nCols, h, grid, metaInfoWriter)); return new UndoableCompositeAction(actions); }
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 void doAction(IGridTable table) { IWritableGrid grid = (IWritableGrid) table.getGrid(); createdRegions = new ArrayList<IGridRegion>(); removedRegions = new ArrayList<IGridRegion>(); for (int row = region.getTop(); row <= region.getBottom(); row++) { for (int column = region.getLeft(); column < region.getRight(); column++) { IGridRegion mergedRegion = grid.getRegionStartingAt(column, row); if (mergedRegion != null && IGridRegion.Tool.width(mergedRegion) > 1) { removedRegions.add(mergedRegion); grid.removeMergedRegion(mergedRegion); for (int i = mergedRegion.getLeft(); i <= mergedRegion.getRight(); i++) { IGridRegion newRegion = new GridRegion(mergedRegion.getTop(), i, mergedRegion.getBottom(), i); grid.addMergedRegion(newRegion); createdRegions.add(newRegion); } column = mergedRegion.getRight(); } } } }
public UndoableResizeMergedRegionAction(IGridRegion initialRegion, int numberOfRowsOrColumns, boolean isInsert, boolean isColumns) { this.initialRegion = initialRegion; int increase = isInsert ? numberOfRowsOrColumns : -numberOfRowsOrColumns; try { if (isColumns) { newRegion = new GridRegion(initialRegion.getTop(), initialRegion.getLeft(), initialRegion.getBottom(), initialRegion.getRight() + increase); } else { newRegion = new GridRegion(initialRegion.getTop(), initialRegion.getLeft(), initialRegion.getBottom() + increase, initialRegion.getRight()); } } catch (IllegalArgumentException e) { // Wrong region created newRegion = null; } if(IGridRegion.Tool.width(newRegion) == 1 && IGridRegion.Tool.height(newRegion) == 1){ newRegion = null; } }
/** * Checks if the specified region must be resized. * * If we delete all we remove all rows/columns in region then region * must be deleted(not resized). */ private static boolean isRegionMustBeResized(IGridRegion region, int firstRowOrColumn, int numberOfRowsOrColumns, boolean isColumns, IGridRegion regionOfTable) { if (isColumns) { // merged region contains column which we copy/remove return IGridRegion.Tool.width(region) > numberOfRowsOrColumns && IGridRegion.Tool.contains(region, regionOfTable.getLeft() + firstRowOrColumn, region .getTop()); } else { // merged region contains row which we copy/remove return IGridRegion.Tool.height(region) > numberOfRowsOrColumns && IGridRegion.Tool.contains(region, region.getLeft(), regionOfTable.getTop() + firstRowOrColumn); } }
private static IUndoableGridTableAction insertRows(int nRows, int row, IGridRegion region, IGrid grid, boolean before, MetaInfoWriter metaInfoWriter) { int h = IGridRegion.Tool.height(region); int w = IGridRegion.Tool.width(region); int rowsToMove = h - row; ArrayList<IUndoableGridTableAction> actions = new ArrayList<>(w * rowsToMove); int firstToMove = region.getTop() + row; int rowTo = firstToMove + nRows; int left = region.getLeft(); // Shift cells by row, copy cells of inserted row and resize merged regions after actions.addAll(shiftRows(rowTo, nRows, INSERT, region, grid, metaInfoWriter)); actions.addAll(copyCells(left, firstToMove, left, rowTo, w, nRows, grid, metaInfoWriter)); actions.addAll(resizeMergedRegions(grid, row, nRows, INSERT, ROWS, region, metaInfoWriter)); int rowFrom = before ? firstToMove : rowTo; actions.addAll(emptyCells(left, rowFrom, w, nRows, grid, metaInfoWriter)); return new UndoableCompositeAction(actions); }
/** * Initialize width and height of current grid. According to the compose * direction. * */ private void initWidthAndHeight() { for (int i = 0; i < gridTables.length; i++) { IGridRegion reg = gridTables[i].getRegion(); if (vertical) { height += IGridRegion.Tool.height(reg); width = Math.max(width, IGridRegion.Tool.width(reg)); } else { width += IGridRegion.Tool.width(reg); height = Math.max(height, IGridRegion.Tool.height(reg)); } } }
public synchronized void moveTableTo(IGridTable table, IGridRegion destRegion) throws TableServiceException { if (Tool.height(destRegion) != table.getHeight() || Tool.width(destRegion) != table.getWidth()) { throw new TableServiceException("Bad destination region size."); } try { TableBuilder tableBuilder = new TableBuilder((XlsSheetGridModel) table.getGrid(), metaInfoWriter); tableBuilder.beginTable(destRegion); tableBuilder.writeGridTable(table); tableBuilder.endTable(); } catch (Exception e) { throw new TableServiceException("Could not move the table", e); } removeTable(table); } }
/** * Returns max number of rows to display. * * @return number of rows to display or -1 for all rows */ public static int getMaxNumRowsToDisplay(IGridTable table) { IGridRegion region = table.getRegion(); int cols = IGridRegion.Tool.width(region); int rows = IGridRegion.Tool.height(region); return getMaxNumRowsToDisplay(rows, cols); }
public StyleIndexHandler(IGridRegion tableRegion, int sheetIndex) { this.tableRegion = tableRegion; cellIndexes = new int[IGridRegion.Tool.height(tableRegion)][IGridRegion.Tool.width(tableRegion)]; this.sheetIndex = sheetIndex; formulaParsingWorkbook = new SAXFormulaParsingWorkbook(); }
void setGrid(TableModel tm) { int width = IGridRegion.Tool.width(reg); for (int i = 0; i <= width; i++) { setVerticalBorder(i, tm); } int height = IGridRegion.Tool.height(reg); for (int i = 0; i <= height; i++) { setHorizontalBorder(i, tm); } }
@Override protected boolean canPerformAction(IGridRegion gridRegion) { return !(startCol < 0 || startCol >= IGridRegion.Tool.width(gridRegion)); }
void setGrid(TableModel tm) { int width = IGridRegion.Tool.width(reg); for (int i = 0; i <= width; i++) { setVerticalBorder(i, tm); } int height = IGridRegion.Tool.height(reg); for (int i = 0; i <= height; i++) { setHorizontalBorder(i, tm); } }
int getColSpan(ICell cell) { IGridRegion gr = cell.getRegion(); if (gr == null) { return 1; } return IGridRegion.Tool.width(IGridRegion.Tool.intersect(reg, gr)); }
/** * Returns max number of rows to display. * * @return number of rows to display or -1 for all rows */ public static int getMaxNumRowsToDisplay(IGridTable table) { IGridRegion region = table.getRegion(); int cols = IGridRegion.Tool.width(region); int rows = IGridRegion.Tool.height(region); return getMaxNumRowsToDisplay(rows, cols); }
int getColSpan(ICell cell) { IGridRegion gr = cell.getRegion(); if (gr == null) { return 1; } return IGridRegion.Tool.width(IGridRegion.Tool.intersect(reg, gr)); }
public TableStyleListener(EventSheetDescriptor sheet, IGridRegion tableRegion) { this.sheet = sheet; this.tableRegion = tableRegion; cellIndexes = new int[IGridRegion.Tool.height(tableRegion)][IGridRegion.Tool.width(tableRegion)]; }