From: Teemu Suo-Anttila Date: Tue, 15 Sep 2015 11:21:20 +0000 (+0300) Subject: Add Tab move to next/previous row in Editor (#16841) X-Git-Tag: 7.6.0.alpha6~15 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a11bd16d7aa525b2ab561337e3b2ffb2ad77604b;p=vaadin-framework.git Add Tab move to next/previous row in Editor (#16841) Change-Id: I142d7e70cd226f01905f34440b6ec5096eaa86d7 --- diff --git a/client/src/com/vaadin/client/widget/grid/DefaultEditorEventHandler.java b/client/src/com/vaadin/client/widget/grid/DefaultEditorEventHandler.java index d607701d19..f5ddbccaf4 100644 --- a/client/src/com/vaadin/client/widget/grid/DefaultEditorEventHandler.java +++ b/client/src/com/vaadin/client/widget/grid/DefaultEditorEventHandler.java @@ -158,7 +158,7 @@ public class DefaultEditorEventHandler implements Editor.EventHandler { int colDelta = 0; if (e.getKeyCode() == KEYCODE_MOVE_VERTICAL) { - rowDelta += (e.getShiftKey() ? -1 : +1); + rowDelta = (e.getShiftKey() ? -1 : +1); } else if (e.getKeyCode() == KEYCODE_MOVE_HORIZONTAL) { colDelta = (e.getShiftKey() ? -1 : +1); } @@ -166,8 +166,27 @@ public class DefaultEditorEventHandler implements Editor.EventHandler { final boolean changed = rowDelta != 0 || colDelta != 0; if (changed) { - editRow(event, event.getRowIndex() + rowDelta, - event.getFocusedColumnIndex() + colDelta); + + int columnCount = event.getGrid().getVisibleColumns().size(); + + int colIndex = event.getFocusedColumnIndex() + colDelta; + int rowIndex = event.getRowIndex(); + + // Handle row change with horizontal move when column goes out + // of range. + if (rowDelta == 0) { + if (colIndex >= columnCount + && rowIndex < event.getGrid().getDataSource() + .size() - 1) { + rowDelta = 1; + colIndex = 0; + } else if (colIndex < 0 && rowIndex > 0) { + rowDelta = -1; + colIndex = columnCount - 1; + } + } + + editRow(event, rowIndex + rowDelta, colIndex); // FIXME should be in editRow event.getGrid().fireEvent(new EditorMoveEvent(cell));