/** * Retrieve the <code>GridColumn</code> of a <code>GridWidget</code> at a given point x. * It returns <code>null</code> if none is present at that position. * @param gridWidget * @param cx * @return */ public static GridColumn<?> getGridColumn(GridWidget gridWidget, double cx) { //Get column information final BaseGridRendererHelper rendererHelper = gridWidget.getRendererHelper(); final BaseGridRendererHelper.RenderingInformation ri = rendererHelper.getRenderingInformation(); if (ri == null) { return null; } final BaseGridRendererHelper.ColumnInformation ci = rendererHelper.getColumnInformation(cx); return ci.getColumn(); }
private BaseGridRendererHelper.ColumnInformation getBodyColumnInformation(final int uiColumnIndex) { final GridColumn<?> column = gridModel.getColumns().get(uiColumnIndex); final BaseGridRendererHelper rendererHelper = gridWidget.getRendererHelper(); final BaseGridRendererHelper.RenderingInformation renderingInformation = rendererHelper.getRenderingInformation(); final BaseGridRendererHelper.RenderingBlockInformation bodyBlockInformation = renderingInformation.getBodyBlockInformation(); final List<GridColumn<?>> bodyColumns = bodyBlockInformation.getColumns(); if (!bodyColumns.contains(column)) { return null; } return new BaseGridRendererHelper.ColumnInformation(column, uiColumnIndex, bodyBlockInformation.getX() + rendererHelper.getColumnOffset(bodyColumns, bodyColumns.indexOf(column))); }
BiFunction<SelectedRange, Integer, Double> getBodySelectionYOffsetStrategy() { return (selectedRange, minVisibleUiRowIndex) -> { final double uiRowOffset = rendererHelper.getRowOffset(selectedRange.getUiRowIndex()); final double uiMinVisibleRowOffset = rendererHelper.getRowOffset(minVisibleUiRowIndex); return uiRowOffset - uiMinVisibleRowOffset; }; }
private boolean isGridWidgetRendered(final GridWidget gridWidget) { final BaseGridRendererHelper rendererHelper = gridWidget.getRendererHelper(); final BaseGridRendererHelper.RenderingInformation renderingInformation = rendererHelper.getRenderingInformation(); return renderingInformation != null; }
public static void editSelectedCell(final GridWidget gridWidget) { final GridData gridModel = gridWidget.getModel(); if (gridModel.getSelectedHeaderCells().size() > 0) { final GridData.SelectedCell selectedCell = gridModel.getSelectedHeaderCells().get(0); final int uiHeaderRowIndex = selectedCell.getRowIndex(); final int uiColumnIndex = ColumnIndexUtilities.findUiColumnIndex(gridModel.getColumns(), selectedCell.getColumnIndex()); final GridColumn<?> column = gridModel.getColumns().get(uiColumnIndex); final GridColumn.HeaderMetaData headerMetaData = column.getHeaderMetaData().get(uiHeaderRowIndex); final BaseGridRendererHelper rendererHelper = gridWidget.getRendererHelper(); final BaseGridRendererHelper.RenderingInformation ri = rendererHelper.getRenderingInformation(); final double columnXCoordinate = rendererHelper.getColumnOffset(column) + column.getWidth() / 2; final BaseGridRendererHelper.ColumnInformation ci = rendererHelper.getColumnInformation(columnXCoordinate); final GridBodyCellEditContext context = CellContextUtilities.makeRenderContext(gridWidget, ri, ci, null, uiHeaderRowIndex); headerMetaData.edit(context); } else if (gridModel.getSelectedCells().size() > 0) { final GridData.SelectedCell origin = gridModel.getSelectedCellsOrigin(); if (origin == null) { return; } gridWidget.startEditingCell(origin.getRowIndex(), ColumnIndexUtilities.findUiColumnIndex(gridModel.getColumns(), origin.getColumnIndex())); } }
@Test public void selectVisibleGridHeaderNonLinkedColumn() { when(gridWidget.isVisible()).thenReturn(true); when(event.getX()).thenReturn(100); when(event.getY()).thenReturn(100); when(gridWidget.getLocation()).thenReturn(new Point2D(100, 100)); when(uiColumn.isLinked()).thenReturn(false); final BaseGridRendererHelper.ColumnInformation ci = new BaseGridRendererHelper.ColumnInformation(uiColumn, 0, 0); when(helper.getColumnInformation(any(Double.class))).thenReturn(ci); handler.onNodeMouseEvent(gridWidget, relativeLocation, Optional.of(0), Optional.of(0), Optional.empty(), Optional.empty(), event); verify(handler, times(1)).handleHeaderCell(eq(gridWidget), eq(relativeLocation), eq(0), eq(0), eq(event)); verify(selectionManager, never()).select(any(GridWidget.class)); verify(selectionManager, never()).selectLinkedColumn(eq(uiColumn)); }
@SuppressWarnings("unchecked") private void mockGridRendering(final double expectedHeaderYOffset, final double headerHeight, final int numberOfRows) { final List<Double> rowOffsets = new ArrayList<>(); for (int i = 0; i < numberOfRows; i++) { rowOffsets.add(i * ROW_HEIGHT); model.appendRow(new BaseGridRow(ROW_HEIGHT)); when(rendererHelper.getRowOffset(i)).thenReturn(rowOffsets.get(i)); } final BaseGridRendererHelper.RenderingInformation ri = makeRenderingInformation(model, rowOffsets, BaseGridWidgetRenderingTestUtils.HEADER_HEIGHT + expectedHeaderYOffset); when(rendererHelper.getRenderingInformation()).thenReturn(ri); when(renderer.getHeaderHeight()).thenReturn(headerHeight); final GridColumn<String> column = new BaseGridColumn<>(Arrays.asList(new BaseHeaderMetaData("row1"), new BaseHeaderMetaData("row2")), mock(GridColumnRenderer.class), 100.0); model.appendColumn(column); final Context2D context2D = mock(Context2D.class); final BoundingBox boundingBox = mock(BoundingBox.class); gridWidget.drawWithTransforms(context2D, 1.0, boundingBox); }
final Bounds bounds = getVisibleBounds(); final List<GridColumn<?>> allColumns = new ArrayList<GridColumn<?>>(); final List<GridColumn<?>> bodyColumns = new ArrayList<GridColumn<?>>(); final double vpWidth = bounds.getWidth(); final double vpHeight = bounds.getHeight(); final double headerOffsetY = getHeaderOffsetY(); final GridRenderer renderer = view.getRenderer(); double clipBottom = vpY - view.getAbsoluteY() - renderer.getHeaderHeight() + vpHeight - getRowOffset(minVisibleRowIndex); while ((row = model.getRow(maxVisibleRowIndex)).getHeight() < clipBottom && maxVisibleRowIndex < model.getRowCount() - 1) { clipBottom = clipBottom - row.getHeight(); for (GridColumn<?> column : model.getColumns()) { allColumns.add(column); final double floatingColumnsWidth = getWidth(floatingColumns); if (view.getAbsoluteX() + x + column.getWidth() >= vpX + floatingColumnsWidth) { if (view.getAbsoluteX() + x < vpX + vpWidth) { if (view.getAbsoluteX() + x - vpX < getWidth(floatingColumns)) { allColumns.clear(); bodyColumns.clear(); final double bodyOffsetY = getRowOffset(minVisibleRowIndex) + renderer.getHeaderHeight(); final double offsetX = (bodyColumns.size() > 0 ? getColumnOffset(bodyColumns.get(0)) : 0); final double floatingOffsetX = getFloatingColumnOffset(); headerOffsetY, bodyOffsetY,
@Test public void testEditWhenHeaderCellSelected() { final GridColumn.HeaderMetaData headerMetaDataC1 = mock(GridColumn.HeaderMetaData.class); final GridColumn.HeaderMetaData headerMetaDataC2 = mock(GridColumn.HeaderMetaData.class); final GridColumn<?> gridColumnOne = mockGridColumn(100.0, Arrays.asList(headerMetaDataC1)); final GridColumn<?> gridColumnTwo = mockGridColumn(100.0, Arrays.asList(headerMetaDataC2)); doReturn(0).when(gridColumnOne).getIndex(); doReturn(1).when(gridColumnTwo).getIndex(); final double secondColumnXCoordinate = gridColumnOne.getWidth() + gridColumnTwo.getWidth() / 2; doReturn(ci).when(gridRendererHelper).getColumnInformation(secondColumnXCoordinate); doReturn(gridColumnOne.getWidth()).when(gridRendererHelper).getColumnOffset(gridColumnTwo); doReturn(gridColumnTwo).when(ci).getColumn(); doReturn(0.0).when(ci).getOffsetX(); doReturn(1).when(ci).getUiColumnIndex(); doReturn(Arrays.asList(gridColumnOne, gridColumnTwo)).when(ri).getAllColumns(); gridWidget.getModel().appendColumn(gridColumnOne); gridWidget.getModel().appendColumn(gridColumnTwo); gridWidget.getModel().selectHeaderCell(0, 1); CellContextUtilities.editSelectedCell(gridWidget); verify(headerMetaDataC1, never()).edit(any(GridBodyCellEditContext.class)); verify(headerMetaDataC2).edit(gridBodyCellEditContextCaptor.capture()); final GridBodyCellEditContext gridBodyCellEditContext = gridBodyCellEditContextCaptor.getValue(); assertThat(gridBodyCellEditContext) .hasFieldOrPropertyWithValue("columnIndex", 1) .hasFieldOrPropertyWithValue("rowIndex", 0); verify(gridWidget, never()).startEditingCell(anyInt(), anyInt()); verify(gridWidget, never()).startEditingCell(any(Point2D.class)); }
final BaseGridRendererHelper.ColumnInformation ci = rendererHelper.getColumnInformation(cx); final double offsetX = ci.getOffsetX(); uiColumnIndex); final double cellX = cx - offsetX; final double cellY = cy - rendererHelper.getRowOffset(uiRowIndex) - renderer.getHeaderHeight(); if (!gridWidget.onGroupingToggle(cellX, cellY,
/** * Get the x-offset for a given Column in the model relative to zero. * @param column The GridColumn. * @return */ public double getColumnOffset(final GridColumn<?> column) { final GridData model = view.getModel(); final int columnIndex = model.getColumns().indexOf(column); if (columnIndex == -1) { return 0; } return getColumnOffset(columnIndex); }
@Override public double getWidth() { return rendererHelper.getWidth(model.getColumns()); }
Rectangle makeRowHighlight(final int _rowIndex, final int _visibleRowIndex, final GridData model, final GridBodyRenderContext context, final BaseGridRendererHelper rendererHelper) { final Rectangle r = new Rectangle(0, 0).setAlpha(0.3).setFillColor(ColorName.ORANGE).setListening(false); r.setY(rendererHelper.getRowOffset(_visibleRowIndex)); r.setWidth(rendererHelper.getWidth(context.getBlockColumns())); r.setHeight(model.getRow(_rowIndex).getHeight()); switch (rowHighlightSeverity) { case NOTE: r.setFillColor(ColorName.LIGHTBLUE); break; case WARNING: r.setFillColor(ColorName.ORANGE); break; case ERROR: r.setFillColor(ColorName.RED); break; } return r; } }
protected BaseGridRendererHelper getBaseGridRendererHelper() { return new BaseGridRendererHelper(this); }
private boolean isGridWidgetRendered(final GridWidget gridWidget) { final BaseGridRendererHelper rendererHelper = gridWidget.getRendererHelper(); final BaseGridRendererHelper.RenderingInformation renderingInformation = rendererHelper.getRenderingInformation(); return renderingInformation != null; }
public static void editSelectedCell(final GridWidget gridWidget) { final GridData gridModel = gridWidget.getModel(); if (gridModel.getSelectedHeaderCells().size() > 0) { final GridData.SelectedCell selectedCell = gridModel.getSelectedHeaderCells().get(0); final int uiHeaderRowIndex = selectedCell.getRowIndex(); final int uiColumnIndex = ColumnIndexUtilities.findUiColumnIndex(gridModel.getColumns(), selectedCell.getColumnIndex()); final GridColumn<?> column = gridModel.getColumns().get(uiColumnIndex); final GridColumn.HeaderMetaData headerMetaData = column.getHeaderMetaData().get(uiHeaderRowIndex); final BaseGridRendererHelper rendererHelper = gridWidget.getRendererHelper(); final BaseGridRendererHelper.RenderingInformation ri = rendererHelper.getRenderingInformation(); final double columnXCoordinate = rendererHelper.getColumnOffset(column) + column.getWidth() / 2; final BaseGridRendererHelper.ColumnInformation ci = rendererHelper.getColumnInformation(columnXCoordinate); final GridBodyCellEditContext context = CellContextUtilities.makeRenderContext(gridWidget, ri, ci, null, uiHeaderRowIndex); headerMetaData.edit(context); } else if (gridModel.getSelectedCells().size() > 0) { final GridData.SelectedCell origin = gridModel.getSelectedCellsOrigin(); if (origin == null) { return; } gridWidget.startEditingCell(origin.getRowIndex(), ColumnIndexUtilities.findUiColumnIndex(gridModel.getColumns(), origin.getColumnIndex())); } }
@Test public void selectVisibleGridHeaderNonLinkedColumn() { when(gridWidget.isVisible()).thenReturn(true); when(event.getX()).thenReturn(100); when(event.getY()).thenReturn(100); when(gridWidget.getLocation()).thenReturn(new Point2D(100, 100)); when(uiColumn.isLinked()).thenReturn(false); final BaseGridRendererHelper.ColumnInformation ci = new BaseGridRendererHelper.ColumnInformation(uiColumn, 0, 0); when(helper.getColumnInformation(any(Double.class))).thenReturn(ci); handler.onNodeMouseEvent(gridWidget, relativeLocation, Optional.of(0), Optional.of(0), Optional.empty(), Optional.empty(), event); verify(handler, times(1)).handleHeaderCell(eq(gridWidget), eq(relativeLocation), eq(0), eq(0), eq(event)); verify(selectionManager, never()).select(any(GridWidget.class)); verify(selectionManager, never()).selectLinkedColumn(eq(uiColumn)); }
@SuppressWarnings("unchecked") private void mockGridRendering(final double expectedHeaderYOffset, final double headerHeight, final int numberOfRows) { final List<Double> rowOffsets = new ArrayList<>(); for (int i = 0; i < numberOfRows; i++) { rowOffsets.add(i * ROW_HEIGHT); model.appendRow(new BaseGridRow(ROW_HEIGHT)); when(rendererHelper.getRowOffset(i)).thenReturn(rowOffsets.get(i)); } final BaseGridRendererHelper.RenderingInformation ri = makeRenderingInformation(model, rowOffsets, BaseGridWidgetRenderingTestUtils.HEADER_HEIGHT + expectedHeaderYOffset); when(rendererHelper.getRenderingInformation()).thenReturn(ri); when(renderer.getHeaderHeight()).thenReturn(headerHeight); final GridColumn<String> column = new BaseGridColumn<>(Arrays.asList(new BaseHeaderMetaData("row1"), new BaseHeaderMetaData("row2")), mock(GridColumnRenderer.class), 100.0); model.appendColumn(column); final Context2D context2D = mock(Context2D.class); final BoundingBox boundingBox = mock(BoundingBox.class); gridWidget.drawWithTransforms(context2D, 1.0, boundingBox); }
final Bounds bounds = getVisibleBounds(); final List<GridColumn<?>> allColumns = new ArrayList<GridColumn<?>>(); final List<GridColumn<?>> bodyColumns = new ArrayList<GridColumn<?>>(); final double vpWidth = bounds.getWidth(); final double vpHeight = bounds.getHeight(); final double headerOffsetY = getHeaderOffsetY(); final GridRenderer renderer = view.getRenderer(); double clipBottom = vpY - view.getAbsoluteY() - renderer.getHeaderHeight() + vpHeight - getRowOffset(minVisibleRowIndex); while ((row = model.getRow(maxVisibleRowIndex)).getHeight() < clipBottom && maxVisibleRowIndex < model.getRowCount() - 1) { clipBottom = clipBottom - row.getHeight(); for (GridColumn<?> column : model.getColumns()) { allColumns.add(column); final double floatingColumnsWidth = getWidth(floatingColumns); if (view.getAbsoluteX() + x + column.getWidth() >= vpX + floatingColumnsWidth) { if (view.getAbsoluteX() + x < vpX + vpWidth) { if (view.getAbsoluteX() + x - vpX < getWidth(floatingColumns)) { allColumns.clear(); bodyColumns.clear(); final double bodyOffsetY = getRowOffset(minVisibleRowIndex) + renderer.getHeaderHeight(); final double offsetX = (bodyColumns.size() > 0 ? getColumnOffset(bodyColumns.get(0)) : 0); final double floatingOffsetX = getFloatingColumnOffset(); headerOffsetY, bodyOffsetY,
@Test public void testEditWhenHeaderCellSelected() { final GridColumn.HeaderMetaData headerMetaDataC1 = mock(GridColumn.HeaderMetaData.class); final GridColumn.HeaderMetaData headerMetaDataC2 = mock(GridColumn.HeaderMetaData.class); final GridColumn<?> gridColumnOne = mockGridColumn(100.0, Arrays.asList(headerMetaDataC1)); final GridColumn<?> gridColumnTwo = mockGridColumn(100.0, Arrays.asList(headerMetaDataC2)); doReturn(0).when(gridColumnOne).getIndex(); doReturn(1).when(gridColumnTwo).getIndex(); final double secondColumnXCoordinate = gridColumnOne.getWidth() + gridColumnTwo.getWidth() / 2; doReturn(ci).when(gridRendererHelper).getColumnInformation(secondColumnXCoordinate); doReturn(gridColumnOne.getWidth()).when(gridRendererHelper).getColumnOffset(gridColumnTwo); doReturn(gridColumnTwo).when(ci).getColumn(); doReturn(0.0).when(ci).getOffsetX(); doReturn(1).when(ci).getUiColumnIndex(); doReturn(Arrays.asList(gridColumnOne, gridColumnTwo)).when(ri).getAllColumns(); gridWidget.getModel().appendColumn(gridColumnOne); gridWidget.getModel().appendColumn(gridColumnTwo); gridWidget.getModel().selectHeaderCell(0, 1); CellContextUtilities.editSelectedCell(gridWidget); verify(headerMetaDataC1, never()).edit(any(GridBodyCellEditContext.class)); verify(headerMetaDataC2).edit(gridBodyCellEditContextCaptor.capture()); final GridBodyCellEditContext gridBodyCellEditContext = gridBodyCellEditContextCaptor.getValue(); assertThat(gridBodyCellEditContext) .hasFieldOrPropertyWithValue("columnIndex", 1) .hasFieldOrPropertyWithValue("rowIndex", 0); verify(gridWidget, never()).startEditingCell(anyInt(), anyInt()); verify(gridWidget, never()).startEditingCell(any(Point2D.class)); }