Example usage for org.apache.poi.ss.util CellRangeAddress CellRangeAddress

List of usage examples for org.apache.poi.ss.util CellRangeAddress CellRangeAddress

Introduction

In this page you can find the example usage for org.apache.poi.ss.util CellRangeAddress CellRangeAddress.

Prototype

public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) 

Source Link

Document

Creates new cell range.

Usage

From source file:com.vaadin.addon.spreadsheet.CellSelectionManager.java

License:Open Source License

/**
 * Reports the correct cell selection value (formula/data) and selection.
 * This method is called when the cell selection has changed via the address
 * field./*from   w w w.j a va 2 s . c o  m*/
 * 
 * @param rowIndex
 *            Index of row, 1-based
 * @param columnIndex
 *            Index of column, 1-based
 */
private void handleCellAddressChange(int rowIndex, int colIndex, boolean initialSelection) {
    if (rowIndex >= spreadsheet.getState().rows) {
        rowIndex = spreadsheet.getState().rows;
    }
    if (colIndex >= spreadsheet.getState().cols) {
        colIndex = spreadsheet.getState().cols;
    }
    MergedRegion region = MergedRegionUtil.findIncreasingSelection(spreadsheet.getMergedRegionContainer(),
            rowIndex, rowIndex, colIndex, colIndex);
    if (region.col1 != region.col2 || region.row1 != region.row2) {
        handleCellRangeSelection(
                new CellRangeAddress(region.row1 - 1, region.row2 - 1, region.col1 - 1, region.col2 - 1));
    } else {
        rowIndex = region.row1;
        colIndex = region.col1;
        Workbook workbook = spreadsheet.getWorkbook();
        final Row row = workbook.getSheetAt(workbook.getActiveSheetIndex()).getRow(rowIndex - 1);
        if (row != null) {
            final Cell cell = row.getCell(colIndex - 1);
            if (cell != null) {
                String value = "";
                boolean formula = cell.getCellType() == Cell.CELL_TYPE_FORMULA;
                if (!spreadsheet.isCellHidden(cell)) {
                    if (formula) {
                        value = cell.getCellFormula();
                    } else {
                        value = spreadsheet.getCellValue(cell);
                    }
                }
                spreadsheet.getRpcProxy().showSelectedCell(colIndex, rowIndex, value, formula,
                        spreadsheet.isCellLocked(cell), initialSelection);
            } else {
                spreadsheet.getRpcProxy().showSelectedCell(colIndex, rowIndex, "", false,
                        spreadsheet.isCellLocked(cell), initialSelection);
            }
        } else {
            spreadsheet.getRpcProxy().showSelectedCell(colIndex, rowIndex, "", false,
                    spreadsheet.isActiveSheetProtected(), initialSelection);
        }
    }
}

From source file:com.vaadin.addon.spreadsheet.CellSelectionManager.java

License:Open Source License

/**
 * Fires a new SelectionChangeEvent based on the internal selection state.
 *//*from   w ww  .  ja  v  a  2s.c o m*/
private void fireNewSelectionChangeEvent() {
    CellRangeAddress selectedCellMergedRegion = null;
    MergedRegion region = spreadsheet.getMergedRegionContainer().getMergedRegionStartingFrom(
            selectedCellReference.getCol() + 1, selectedCellReference.getRow() + 1);
    if (region != null) {
        selectedCellMergedRegion = new CellRangeAddress(region.row1 - 1, region.row2 - 1, region.col1 - 1,
                region.col2 - 1);
        // if the only range is the merged region, clear ranges
        if (cellRangeAddresses.size() == 1 && cellRangeAddresses.get(0).formatAsString()
                .equals(selectedCellMergedRegion.formatAsString())) {
            cellRangeAddresses.clear();
        }
    }
    if (latestSelectionEvent != null) {
        boolean changed = false;
        if (!latestSelectionEvent.getSelectedCellReference().equals(selectedCellReference)) {
            changed = true;
        }
        if (!changed) {
            if (latestSelectionEvent.getIndividualSelectedCells().size() != individualSelectedCells.size()) {
                changed = true;
            } else {
                for (CellReference cr : latestSelectionEvent.getIndividualSelectedCells()) {
                    if (!individualSelectedCells.contains(cr)) {
                        changed = true;
                        break;
                    }
                }
            }
        }
        if (!changed) {
            if (latestSelectionEvent.getCellRangeAddresses().size() != cellRangeAddresses.size()) {
                changed = true;
            } else {
                for (CellRangeAddress cra : latestSelectionEvent.getCellRangeAddresses()) {
                    if (!cellRangeAddresses.contains(cra)) {
                        changed = true;
                        break;
                    }
                }
            }
        }
        if (!changed) {
            CellRangeAddress previouSelectedCellMergedRegion = latestSelectionEvent
                    .getSelectedCellMergedRegion();
            if ((previouSelectedCellMergedRegion == null && selectedCellMergedRegion != null)
                    || (previouSelectedCellMergedRegion != null
                            && !previouSelectedCellMergedRegion.equals(selectedCellMergedRegion))) {
                changed = true;
            }
        }
        if (!changed) {
            return;
        }
    }
    ArrayList<CellReference> cellRefCopy = new ArrayList<CellReference>(individualSelectedCells);
    ArrayList<CellRangeAddress> rangeCopy = new ArrayList<CellRangeAddress>(cellRangeAddresses);
    latestSelectionEvent = new SelectionChangeEvent(spreadsheet, selectedCellReference, cellRefCopy,
            selectedCellMergedRegion, rangeCopy);

    spreadsheet.fireEvent(latestSelectionEvent);
}

From source file:com.vaadin.addon.spreadsheet.CellSelectionShifter.java

License:Open Source License

/**
 * This method will be called when the user does a "shift" that increases
 * the amount of selected cells.//from   www  .  ja va 2s  . co  m
 * 
 * @param r1
 *            Index of the starting row, 1-based
 * @param c1
 *            Index of the starting column, 1-based
 * @param r2
 *            Index of the ending row, 1-based
 * @param c2
 *            Index of the ending column, 1-based
 */
public void onSelectionIncreasePainted(int r1, int c1, int r2, int c2) {
    final CellRangeAddress paintedCellRange = spreadsheet.getCellSelectionManager().getSelectedCellRange();
    if (paintedCellRange != null) {
        if (spreadsheet.isRangeEditable(paintedCellRange)
                && spreadsheet.isRangeEditable(r1 - 1, c1 - 1, r2 - 1, c2 - 1)) {
            CellRangeAddress changedCellRangeAddress = null;
            // store values
            CellValueCommand command = new CellShiftValuesCommand(spreadsheet, false);
            if (c1 != paintedCellRange.getFirstColumn() + 1) {
                // shift left
                changedCellRangeAddress = new CellRangeAddress(r1 - 1, r2 - 1, c1 - 1,
                        paintedCellRange.getFirstColumn() - 1);
                command.captureCellRangeValues(changedCellRangeAddress);
                shiftColumnsLeftInSelection(c1);
                spreadsheet.updateMarkedCells();
            } else if (c2 != paintedCellRange.getLastColumn() + 1) {
                // shift right
                changedCellRangeAddress = new CellRangeAddress(r1 - 1, r2 - 1,
                        paintedCellRange.getLastColumn() + 1, c2 - 1);
                command.captureCellRangeValues(changedCellRangeAddress);
                shiftColumnsRightInSelection(c2);
                spreadsheet.updateMarkedCells();
            } else if (r1 != paintedCellRange.getFirstRow() + 1) {
                // shift top
                changedCellRangeAddress = new CellRangeAddress(r1 - 1, paintedCellRange.getFirstRow() - 1,
                        c1 - 1, c2 - 1);
                command.captureCellRangeValues(changedCellRangeAddress);
                shiftRowsUpInSelection(r1);
                spreadsheet.updateMarkedCells();
            } else if (r2 != paintedCellRange.getLastRow() + 1) {
                // shift bottom
                changedCellRangeAddress = new CellRangeAddress(paintedCellRange.getLastRow() + 1, r2 - 1,
                        c1 - 1, c2 - 1);
                command.captureCellRangeValues(changedCellRangeAddress);
                shiftRowsDownInSelection(r2);
                spreadsheet.updateMarkedCells();
            }
            CellRangeAddress newPaintedCellRange = spreadsheet.createCorrectCellRangeAddress(r1, c1, r2, c2);
            getCellSelectionManager().handleCellRangeSelection(spreadsheet.getSelectedCellReference(),
                    newPaintedCellRange, false);
            spreadsheet.getSpreadsheetHistoryManager().addCommand(command);

            if (changedCellRangeAddress != null) {
                fireCellValueChangeEvent(changedCellRangeAddress);
            }

        } else {
            // TODO should show some sort of error, saying that some
            // cells are locked so cannot shift
        }
    }
}

From source file:com.vaadin.addon.spreadsheet.CellSelectionShifter.java

License:Open Source License

/**
 * This method will be called when the user does a "shift" that decreases
 * the amount of selected cells./*from  w w  w  .jav a2 s . c o  m*/
 * 
 * @param r
 *            Row index of the new last selected row, 1-based
 * @param c
 *            Column index of the new last selected column, 1-based
 */
public void onSelectionDecreasePainted(int r, int c) {
    final CellRangeAddress paintedCellRange = spreadsheet.getCellSelectionManager().getSelectedCellRange();
    if (paintedCellRange != null) {
        if (spreadsheet.isRangeEditable(paintedCellRange)) {
            CellValueCommand command = new CellShiftValuesCommand(spreadsheet, true);
            CellRangeAddress changedCellRangeAddress = new CellRangeAddress(r - 1,
                    paintedCellRange.getLastRow(), c - 1, paintedCellRange.getLastColumn());
            command.captureCellRangeValues(changedCellRangeAddress);
            getCellValueManager().removeCells(r, c, paintedCellRange.getLastRow() + 1,
                    paintedCellRange.getLastColumn() + 1, false);
            // removedCells makes sure that removed cells are marked.
            spreadsheet.updateMarkedCells();
            // range selection was updated if NOT all cells were painted
            CellRangeAddress newPaintedCellRange = null;
            if (c != paintedCellRange.getFirstColumn() + 1) {
                newPaintedCellRange = spreadsheet.createCorrectCellRangeAddress(
                        paintedCellRange.getFirstRow() + 1, paintedCellRange.getFirstColumn() + 1,
                        paintedCellRange.getLastRow() + 1, c - 1);
            } else if (r != paintedCellRange.getFirstRow() + 1) {
                newPaintedCellRange = spreadsheet.createCorrectCellRangeAddress(
                        paintedCellRange.getFirstRow() + 1, paintedCellRange.getFirstColumn() + 1, r - 1,
                        paintedCellRange.getLastColumn() + 1);
            }
            if (newPaintedCellRange != null) {
                CellReference selectedCellReference = spreadsheet.getSelectedCellReference();
                // if the decrease caused the seleced cell to be out of
                // painted range, move selected cell to first in range
                if (!SpreadsheetUtil.isCellInRange(selectedCellReference, newPaintedCellRange)) {
                    selectedCellReference = new CellReference(newPaintedCellRange.getFirstRow(),
                            newPaintedCellRange.getFirstColumn());
                }
                getCellSelectionManager().handleCellRangeSelection(selectedCellReference, newPaintedCellRange,
                        false);
            }
            // the selected cell might or might not have changed.. need to
            // call this so user can update possible custom editor value
            CellReference selectedCellReference = getCellSelectionManager().getSelectedCellReference();
            if ((c - 1) == selectedCellReference.getCol() && (r - 1) == selectedCellReference.getRow()) {
                spreadsheet.loadCustomEditorOnSelectedCell();
            }
            spreadsheet.getSpreadsheetHistoryManager().addCommand(command);
            fireCellValueChangeEvent(changedCellRangeAddress);
        } else {
            // TODO should show some sort of error, saying that some
            // cells are locked so cannot shift
        }
    }
}

From source file:com.vaadin.addon.spreadsheet.command.CellShiftValuesCommand.java

License:Open Source License

@Override
public CellRangeAddress getPaintedCellRange() {
    CellRangeAddress paintedCellRange = super.getPaintedCellRange();
    if (undone || paintedCellRange == null) {
        return paintedCellRange;
    } else {// w  ww.  ja v a 2s  .c  o  m
        CellRangeValue crv = (CellRangeValue) values.get(0);
        if (decrease) {
            int col2 = crv.col1 == paintedCellRange.getFirstColumn() ? crv.col2 : crv.col1 - 1;
            int row2 = crv.row1 == paintedCellRange.getFirstRow() ? crv.row2 : crv.row1 - 1;
            return new CellRangeAddress(paintedCellRange.getFirstRow(), row2, paintedCellRange.getFirstColumn(),
                    col2);
        } else {
            return CellRangeUtil.mergeCellRanges(new CellRangeAddress[] { paintedCellRange,
                    new CellRangeAddress(crv.row1, crv.row2, crv.col1, crv.col2) })[0];
        }
    }
}

From source file:com.vaadin.addon.spreadsheet.command.CellValueCommand.java

License:Open Source License

@Override
public CellRangeAddress getPaintedCellRange() {
    return selectedCellRange == null ? null
            : new CellRangeAddress(selectedCellRange[0], selectedCellRange[1], selectedCellRange[2],
                    selectedCellRange[3]);
}

From source file:com.vaadin.addon.spreadsheet.command.RowInsertOrDeleteCommand.java

@Override
public CellRangeAddress getPaintedCellRange() {
    return new CellRangeAddress(row, row, 0, spreadsheet.getLastColumn());
}

From source file:com.vaadin.addon.spreadsheet.ContextMenuManager.java

License:Open Source License

/**
 * This method is called when an action has been selected on top of a row
 * header.//from   w  w  w .j a v a  2  s .  co  m
 * 
 * @param actionKey
 *            Key of the selected action
 */
public void onActionOnRowHeader(String actionKey) {
    Action action = actionMapper.get(actionKey);
    final CellRangeAddress row = new CellRangeAddress(contextMenuHeaderIndex - 1, contextMenuHeaderIndex - 1,
            -1, -1);
    for (Action.Handler ah : actionHandlers) {
        ah.handleAction(action, spreadsheet, row);
    }
}

From source file:com.vaadin.addon.spreadsheet.ContextMenuManager.java

License:Open Source License

/**
 * This method is called when an action has been selected on top of a column
 * header.//w  w  w . j a  v a 2  s. c o  m
 * 
 * @param actionKey
 *            Key of the selected action
 */
public void onActionOnColumnHeader(String actionKey) {
    Action action = actionMapper.get(actionKey);
    final CellRangeAddress column = new CellRangeAddress(-1, -1, contextMenuHeaderIndex - 1,
            contextMenuHeaderIndex - 1);
    for (Action.Handler ah : actionHandlers) {
        ah.handleAction(action, spreadsheet, column);
    }
}

From source file:com.vaadin.addon.spreadsheet.ContextMenuManager.java

License:Open Source License

/**
 * Gets a list of available actions for the column at the given index.
 * /*  w  ww. ja  v  a 2  s  .  com*/
 * @param columnIndex
 *            Index of the target column, 1-based
 * @return List of actions
 */
protected ArrayList<SpreadsheetActionDetails> createActionsListForColumn(int columnIndex) {
    ArrayList<SpreadsheetActionDetails> actions = new ArrayList<SpreadsheetActionDetails>();
    final CellRangeAddress column = new CellRangeAddress(-1, -1, columnIndex - 1, columnIndex - 1);
    for (Handler handler : actionHandlers) {
        for (Action action : handler.getActions(column, spreadsheet)) {
            String key = actionMapper.key(action);
            spreadsheet.setResource(key, action.getIcon());
            SpreadsheetActionDetails spreadsheetActionDetails = new SpreadsheetActionDetails();
            spreadsheetActionDetails.caption = action.getCaption();
            spreadsheetActionDetails.key = key;
            spreadsheetActionDetails.type = 2;
            actions.add(spreadsheetActionDetails);
        }
    }
    return actions;
}