1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.vectomatic.svg.edit.client.gxt.widget;
26
27 import com.extjs.gxt.ui.client.GXT;
28 import com.extjs.gxt.ui.client.event.BaseEvent;
29 import com.extjs.gxt.ui.client.event.ComponentEvent;
30 import com.extjs.gxt.ui.client.event.EventType;
31 import com.extjs.gxt.ui.client.event.Events;
32 import com.extjs.gxt.ui.client.event.Listener;
33 import com.extjs.gxt.ui.client.widget.Component;
34 import com.google.gwt.dom.client.Element;
35
36
37
38
39
40 public class KeyNavExt<E extends ComponentEvent> implements Listener<E> {
41 public static final int KEY_F2 = 113;
42 private static EventType keyPressEvent;
43 private Component component;
44
45 static {
46 if (GXT.isIE || GXT.isGecko || GXT.isWebKit) {
47 keyPressEvent = Events.OnKeyDown;
48 } else {
49 keyPressEvent = Events.OnKeyPress;
50 }
51 }
52
53
54
55
56
57
58 public static EventType getKeyEvent() {
59 return keyPressEvent;
60 }
61
62
63
64
65
66 public KeyNavExt() {
67
68 }
69
70
71
72
73
74
75 public KeyNavExt(Component target) {
76 bind(target);
77 }
78
79
80
81
82
83 public void bind(final Component target) {
84 if (this.component != null) {
85 this.component.removeListener(keyPressEvent, this);
86 this.component.removeListener(Events.OnKeyUp, this);
87 }
88 if (target != null) {
89 target.addListener(keyPressEvent, this);
90 target.addListener(Events.OnKeyUp, this);
91 target.sinkEvents(keyPressEvent.getEventCode());
92 target.sinkEvents(Events.OnKeyUp.getEventCode());
93 }
94 this.component = target;
95 }
96
97
98
99
100
101
102 public Component getComponent() {
103 return component;
104 }
105
106 @SuppressWarnings("unchecked")
107 public void handleEvent(ComponentEvent ce) {
108 EventType type = ce.getType();
109 if (type == keyPressEvent || type == Events.OnKeyUp) {
110 if (component.getElement() != (Element) ce.getEvent().getCurrentEventTarget().cast()) {
111 return;
112 }
113
114 E e = (E) ce;
115
116 if (type == keyPressEvent) {
117 onKeyPress(e);
118 } else {
119 onKeyUp(e);
120 }
121 }
122 }
123
124 public void onKeyPress(E ce) {
125 }
126
127 public void onKeyUp(E ce) {
128 }
129 }