1 package org.vaadin.tokenfield.client.ui;
2
3 import java.util.LinkedList;
4 import java.util.List;
5
6 import com.google.gwt.event.dom.client.KeyCodes;
7 import com.google.gwt.event.dom.client.KeyDownEvent;
8 import com.google.gwt.user.client.ui.TextBox;
9 import com.vaadin.v7.client.ui.VFilterSelect;
10
11 public class VTokenField extends VFilterSelect {
12
13 protected boolean after = false;
14
15 protected List<DeleteListener> listeners = new LinkedList<DeleteListener>();
16
17 public void onKeyDown(KeyDownEvent event) {
18 if (!enabled || readonly) {
19 return;
20 }
21 int kc = event.getNativeKeyCode();
22 if (kc == KeyCodes.KEY_BACKSPACE || kc == KeyCodes.KEY_DELETE) {
23 if (event.getSource() instanceof TextBox
24 && "".equals(((TextBox) event.getSource()).getText())) {
25 if ((kc == KeyCodes.KEY_BACKSPACE && !after)
26 || (kc == KeyCodes.KEY_DELETE && after)) {
27 fireDeleteListeners();
28 return;
29 }
30 }
31 }
32
33 super.onKeyDown(event);
34
35 }
36
37 private void fireDeleteListeners() {
38 for (DeleteListener l : listeners) {
39 l.onDelete();
40 }
41 }
42
43 public void addListener(DeleteListener l) {
44 listeners.add(l);
45 }
46
47 public void removeListener(DeleteListener l) {
48 listeners.remove(l);
49 }
50
51 public interface DeleteListener {
52 public void onDelete();
53 }
54
55 }