private GridData.Range selectCellMerged(final int rowIndex, final int columnIndex) { //Find affected rows for merged data final List<GridColumn<?>> columns = gridData.getColumns(); final int _columnIndex = columns.get(columnIndex).getIndex(); final int minRowIndex = findMinRowIndex(rowIndex, _columnIndex); final int maxRowIndex = findMaxRowIndex(rowIndex, _columnIndex); //Select all applicable rows' cells selectCellsNotMerged(minRowIndex, columnIndex, 1, maxRowIndex - minRowIndex + 1); return new GridData.Range(minRowIndex, maxRowIndex); }
@Override public void insertRow(final int rowIndex, final GridRow row) { this.rows.add(rowIndex, row); indexManager.onInsertRow(rowIndex); selectionsManager.onInsertRow(rowIndex); }
@Override public void setMerged(final boolean isMerged) { if (this.isMerged == isMerged) { return; } this.isMerged = isMerged; indexManager.onMerge(isMerged); selectionsManager.onMerge(isMerged); }
@Override public void appendColumn(final GridColumn<?> column) { double originalWidth = getWidth(); column.setIndex(columns.size()); columns.add(column); OptionalDouble optionalOriginalWidth = OptionalDouble.of(originalWidth); if (GridColumn.ColumnWidthMode.isAuto(column)) { column.setWidth(calculateInitWidth(column, optionalOriginalWidth)); internalRefreshWidth(true, optionalOriginalWidth); } selectionsManager.onInsertColumn(columns.size() - 1); }
@Override public Range selectCell(final int rowIndex, final int columnIndex) { if (rowIndex < 0 || rowIndex > rows.size() - 1) { return new Range(rowIndex); } if (columnIndex < 0 || columnIndex > columns.size() - 1) { return new Range(rowIndex); } return selectionsManager.onSelectCell(rowIndex, columnIndex); }
@Override public Range selectCells(final int rowIndex, final int columnIndex, final int width, final int height) { if (rowIndex < 0 || rowIndex > rows.size() - 1) { return new Range(rowIndex); } if (columnIndex < 0 || columnIndex > columns.size() - 1) { return new Range(rowIndex); } return selectionsManager.onSelectCells(rowIndex, columnIndex, width, height); }
@Override public Range deleteRow(final int rowIndex) { //Find row that is the "lead" in a merged collapsed block GridRow row; int minRowIndex = rowIndex; int maxRowIndex = rowIndex; while ((row = rows.get(minRowIndex)).isMerged() && row.isCollapsed() && minRowIndex > 0) { minRowIndex--; } //Find last row in a merged collapsed block do { maxRowIndex++; } while (maxRowIndex < rows.size() && rows.get(maxRowIndex).isCollapsed()); maxRowIndex--; final Range range = new Range(minRowIndex, maxRowIndex); for (int _rowIndex = minRowIndex; _rowIndex <= maxRowIndex; _rowIndex++) { rows.remove(minRowIndex); } indexManager.onDeleteRow(range); selectionsManager.onDeleteRow(range); return range; }
@Override public void deleteColumn(final GridColumn<?> column) { final int index = column.getIndex(); for (GridColumn<?> c : columns) { if (c.getIndex() > index) { c.setIndex(c.getIndex() - 1); } } //Destroy column if (column.getColumnRenderer() instanceof HasDOMElementResources) { ((HasDOMElementResources) column.getColumnRenderer()).destroyResources(); } removeColumn(column); //Destroy column data for (GridRow row : rows) { ((BaseGridRow) row).deleteCell(index); final Map<Integer, GridCell<?>> clone = new HashMap<Integer, GridCell<?>>(row.getCells()); for (Map.Entry<Integer, GridCell<?>> e : clone.entrySet()) { if (e.getKey() > index) { ((BaseGridRow) row).deleteCell(e.getKey()); ((BaseGridRow) row).setCell(e.getKey() - 1, e.getValue()); } } } internalRefreshWidth(true, OptionalDouble.empty()); selectionsManager.onDeleteColumn(index); }
@Override public void moveRowsTo(final int index, final List<GridRow> rows) { if (rows == null || rows.isEmpty()) { return; } //Get extent of block being moved final int oldBlockStart = this.rows.indexOf(rows.get(0)); final int oldBlockEnd = this.rows.indexOf(rows.get(rows.size() - 1)); //If we're attempting to move it to its current index just exit if (index == oldBlockStart) { return; } this.rows.removeAll(rows); if (index < oldBlockStart) { this.rows.addAll(index, rows); } else if (index > oldBlockStart) { this.rows.addAll(index - rows.size() + 1, rows); } final Range oldBlockExtent = new Range(oldBlockStart, oldBlockEnd); indexManager.onMoveRows(rows, oldBlockExtent); selectionsManager.onMoveRows(rows, oldBlockExtent); }
@Override public void appendColumn(final GridColumn<?> column) { double originalWidth = getWidth(); column.setIndex(columns.size()); columns.add(column); OptionalDouble optionalOriginalWidth = OptionalDouble.of(originalWidth); if (GridColumn.ColumnWidthMode.isAuto(column)) { column.setWidth(calculateInitWidth(column, optionalOriginalWidth)); internalRefreshWidth(true, optionalOriginalWidth); } selectionsManager.onInsertColumn(columns.size() - 1); }
@Override public Range selectCell(final int rowIndex, final int columnIndex) { if (rowIndex < 0 || rowIndex > rows.size() - 1) { return new Range(rowIndex); } if (columnIndex < 0 || columnIndex > columns.size() - 1) { return new Range(rowIndex); } return selectionsManager.onSelectCell(rowIndex, columnIndex); }
@Override public Range selectCells(final int rowIndex, final int columnIndex, final int width, final int height) { if (rowIndex < 0 || rowIndex > rows.size() - 1) { return new Range(rowIndex); } if (columnIndex < 0 || columnIndex > columns.size() - 1) { return new Range(rowIndex); } return selectionsManager.onSelectCells(rowIndex, columnIndex, width, height); }
@Override public Range deleteRow(final int rowIndex) { //Find row that is the "lead" in a merged collapsed block GridRow row; int minRowIndex = rowIndex; int maxRowIndex = rowIndex; while ((row = rows.get(minRowIndex)).isMerged() && row.isCollapsed() && minRowIndex > 0) { minRowIndex--; } //Find last row in a merged collapsed block do { maxRowIndex++; } while (maxRowIndex < rows.size() && rows.get(maxRowIndex).isCollapsed()); maxRowIndex--; final Range range = new Range(minRowIndex, maxRowIndex); for (int _rowIndex = minRowIndex; _rowIndex <= maxRowIndex; _rowIndex++) { rows.remove(minRowIndex); } indexManager.onDeleteRow(range); selectionsManager.onDeleteRow(range); return range; }
@Override public void deleteColumn(final GridColumn<?> column) { final int index = column.getIndex(); for (GridColumn<?> c : columns) { if (c.getIndex() > index) { c.setIndex(c.getIndex() - 1); } } //Destroy column if (column.getColumnRenderer() instanceof HasDOMElementResources) { ((HasDOMElementResources) column.getColumnRenderer()).destroyResources(); } removeColumn(column); //Destroy column data for (GridRow row : rows) { ((BaseGridRow) row).deleteCell(index); final Map<Integer, GridCell<?>> clone = new HashMap<Integer, GridCell<?>>(row.getCells()); for (Map.Entry<Integer, GridCell<?>> e : clone.entrySet()) { if (e.getKey() > index) { ((BaseGridRow) row).deleteCell(e.getKey()); ((BaseGridRow) row).setCell(e.getKey() - 1, e.getValue()); } } } internalRefreshWidth(true, OptionalDouble.empty()); selectionsManager.onDeleteColumn(index); }
@Override public void moveRowsTo(final int index, final List<GridRow> rows) { if (rows == null || rows.isEmpty()) { return; } //Get extent of block being moved final int oldBlockStart = this.rows.indexOf(rows.get(0)); final int oldBlockEnd = this.rows.indexOf(rows.get(rows.size() - 1)); //If we're attempting to move it to its current index just exit if (index == oldBlockStart) { return; } this.rows.removeAll(rows); if (index < oldBlockStart) { this.rows.addAll(index, rows); } else if (index > oldBlockStart) { this.rows.addAll(index - rows.size() + 1, rows); } final Range oldBlockExtent = new Range(oldBlockStart, oldBlockEnd); indexManager.onMoveRows(rows, oldBlockExtent); selectionsManager.onMoveRows(rows, oldBlockExtent); }
private GridData.Range selectCellMerged(final int rowIndex, final int columnIndex) { //Find affected rows for merged data final List<GridColumn<?>> columns = gridData.getColumns(); final int _columnIndex = columns.get(columnIndex).getIndex(); final int minRowIndex = findMinRowIndex(rowIndex, _columnIndex); final int maxRowIndex = findMaxRowIndex(rowIndex, _columnIndex); //Select all applicable rows' cells selectCellsNotMerged(minRowIndex, columnIndex, 1, maxRowIndex - minRowIndex + 1); return new GridData.Range(minRowIndex, maxRowIndex); }
@Override public void insertColumn(final int index, final GridColumn<?> column) { double originalWidth = getWidth(); column.setIndex(columns.size()); columns.add(index, column); OptionalDouble optionalOriginalWidth = OptionalDouble.of(originalWidth); if (GridColumn.ColumnWidthMode.isAuto(column)) { column.setWidth(calculateInitWidth(column, optionalOriginalWidth)); internalRefreshWidth(true, optionalOriginalWidth); } selectionsManager.onInsertColumn(index); }
public void onInsertColumn(final int index) { final List<GridData.SelectedCell> selectedCells = gridData.getSelectedCells(); final List<Integer> rowsWithASelection = selectedCells.stream() .filter(sc -> { final int ri = sc.getRowIndex(); final int ci = sc.getColumnIndex(); final int _ci = ColumnIndexUtilities.findUiColumnIndex(gridData.getColumns(), ci); final GridCell<?> cell = gridData.getCell(ri, _ci); return cell != null && cell.getSelectionStrategy() instanceof RowSelectionStrategy; }) .map(GridData.SelectedCell::getRowIndex) .collect(Collectors.toList()); rowsWithASelection.forEach(rowIndex -> onSelectCell(rowIndex, index)); }
@Override public void insertRow(final int rowIndex, final GridRow row) { this.rows.add(rowIndex, row); indexManager.onInsertRow(rowIndex); selectionsManager.onInsertRow(rowIndex); }
@Override public void setMerged(final boolean isMerged) { if (this.isMerged == isMerged) { return; } this.isMerged = isMerged; indexManager.onMerge(isMerged); selectionsManager.onMerge(isMerged); }