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 }