List of usage examples for org.apache.poi.ss.util CellRangeAddress CellRangeAddress
public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
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; }