Mouse click selects in ListView
- Add binding to click and select item from index if it's in bounds. - Relates #806
This commit is contained in:
@@ -103,7 +103,7 @@ public class ListView<T> extends BoxView {
|
||||
|
||||
registerMouseBinding(MouseEvent.Type.Wheel | MouseEvent.Button.WheelUp, () -> up());
|
||||
registerMouseBinding(MouseEvent.Type.Wheel | MouseEvent.Button.WheelDown, () -> down());
|
||||
registerMouseBinding(MouseEvent.Type.Released | MouseEvent.Button.Button1, () -> {});
|
||||
registerMouseBinding(MouseEvent.Type.Released | MouseEvent.Button.Button1, event -> click(event));
|
||||
}
|
||||
|
||||
private void up() {
|
||||
@@ -121,6 +121,13 @@ public class ListView<T> extends BoxView {
|
||||
dispatch(ShellMessageBuilder.ofView(this, ListViewOpenSelectedItemEvent.of(this, selectedItem())));
|
||||
}
|
||||
|
||||
private void click(MouseEvent event) {
|
||||
int index = event.y() - getInnerRect().y();
|
||||
if (index > -1 && index < items.size()) {
|
||||
setSelected(index);
|
||||
}
|
||||
}
|
||||
|
||||
public void setSelected(int selected) {
|
||||
if (this.selected != selected) {
|
||||
this.selected = selected;
|
||||
|
||||
@@ -94,6 +94,22 @@ class ListViewTests extends AbstractViewTests {
|
||||
assertThat(selected(view)).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
void mouseClickMoveSelection() {
|
||||
ListView<String> view = new ListView<>();
|
||||
configure(view);
|
||||
view.setRect(0, 0, 80, 24);
|
||||
view.setItems(Arrays.asList("item1", "item2"));
|
||||
assertThat(selected(view)).isEqualTo(-1);
|
||||
|
||||
MouseEvent event00 = mouseClick(0, 0);
|
||||
MouseEvent event01 = mouseClick(0, 1);
|
||||
view.getMouseHandler().handle(MouseHandler.argsOf(event00));
|
||||
assertThat(selected(view)).isEqualTo(0);
|
||||
view.getMouseHandler().handle(MouseHandler.argsOf(event01));
|
||||
assertThat(selected(view)).isEqualTo(1);
|
||||
}
|
||||
|
||||
static int selected(ListView<?> view) {
|
||||
return (int) ReflectionTestUtils.getField(view, "selected");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user