Skip to content

Commit fe8c864

Browse files
committed
Mouse click selects in ListView
- Add binding to click and select item from index if it's in bounds. - Relates spring-projects#806
1 parent d4bfe61 commit fe8c864

File tree

2 files changed

+24
-1
lines changed
  • spring-shell-core/src

2 files changed

+24
-1
lines changed

spring-shell-core/src/main/java/org/springframework/shell/component/view/control/ListView.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ protected void initInternal() {
103103

104104
registerMouseBinding(MouseEvent.Type.Wheel | MouseEvent.Button.WheelUp, () -> up());
105105
registerMouseBinding(MouseEvent.Type.Wheel | MouseEvent.Button.WheelDown, () -> down());
106-
registerMouseBinding(MouseEvent.Type.Released | MouseEvent.Button.Button1, () -> {});
106+
registerMouseBinding(MouseEvent.Type.Released | MouseEvent.Button.Button1, event -> click(event));
107107
}
108108

109109
private void up() {
@@ -121,6 +121,13 @@ private void enter() {
121121
dispatch(ShellMessageBuilder.ofView(this, ListViewOpenSelectedItemEvent.of(this, selectedItem())));
122122
}
123123

124+
private void click(MouseEvent event) {
125+
int index = event.y() - getInnerRect().y();
126+
if (index > -1 && index < items.size()) {
127+
setSelected(index);
128+
}
129+
}
130+
124131
public void setSelected(int selected) {
125132
if (this.selected != selected) {
126133
this.selected = selected;

spring-shell-core/src/test/java/org/springframework/shell/component/view/control/ListViewTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,22 @@ void mouseWheelMoveSelection() {
9494
assertThat(selected(view)).isEqualTo(0);
9595
}
9696

97+
@Test
98+
void mouseClickMoveSelection() {
99+
ListView<String> view = new ListView<>();
100+
configure(view);
101+
view.setRect(0, 0, 80, 24);
102+
view.setItems(Arrays.asList("item1", "item2"));
103+
assertThat(selected(view)).isEqualTo(-1);
104+
105+
MouseEvent event00 = mouseClick(0, 0);
106+
MouseEvent event01 = mouseClick(0, 1);
107+
view.getMouseHandler().handle(MouseHandler.argsOf(event00));
108+
assertThat(selected(view)).isEqualTo(0);
109+
view.getMouseHandler().handle(MouseHandler.argsOf(event01));
110+
assertThat(selected(view)).isEqualTo(1);
111+
}
112+
97113
static int selected(ListView<?> view) {
98114
return (int) ReflectionTestUtils.getField(view, "selected");
99115
}

0 commit comments

Comments
 (0)