Skip to content

Commit 999a1a0

Browse files
committed
Streamlined JSKeyEvent; adds keyLocation
1 parent 38ee1f9 commit 999a1a0

File tree

3 files changed

+46
-134
lines changed

3 files changed

+46
-134
lines changed

sources/net.sf.j2s.java.core/src/swingjs/JSKeyEvent.java

Lines changed: 42 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -8,94 +8,75 @@
88

99
/**
1010
* Handle the conversion between JavaScript and Java key events.
11+
*
12+
* used by plaf/JSListUI and plaf/JSTextUI; should be implemented for all
13+
* components?
1114
*
1215
* @author Bob Hanson
16+
* @author Trai Nguyen
1317
*
1418
*/
1519
@SuppressWarnings({"serial", "unused"})
1620
public class JSKeyEvent extends KeyEvent {
1721

18-
// used currently only by plaf/JSListUI
19-
20-
21-
//Alphanumeric keys
22-
// VK_0, VK_1, ..., VK_9, VK_A, VK_B, ..., VK_Z
23-
//Java: pressed/typed/released (typed has charCode 0; pressed has UCASE keyCode but true-case keyChar
24-
//JavaScript: down/pressed/up
22+
public static JSKeyEvent newJSKeyEvent(JComponent source, Object jQueryEvent) {
2523

26-
//Control keys
27-
// VK_ENTER, VK_BACKSPACE, VK_TAB, VK_ESCAPE
28-
//Java: pressed/typed/released (typed has charCode 0; pressed has UCASE keyCode but true-case keyChar
29-
//JavaScript: down/pressed/up
30-
31-
//Function keys
32-
// VK_F1, VK_F2, VK_F3, VK_F4 VK_F5, VK_F6, VK_F7, VK_F8, VK_F9, VK_F10, VK_F11, VK_F12,
33-
// VK_SCROLL_LOCK, VK_PRINTSCREEN, VK_PAUSE,
34-
// VK_DELETE, VK_INSERT,
35-
// VK_PAGE_UP, VK_PAGE_DOWN, VK_HOME, VK_END
36-
//Java: pressed/released only, with keyChar 0xFFFF
37-
// DEL: adds 0 127 typed
38-
// INS: code is 155
39-
//JavaScript: down/pressed/up; only up for printScreen
40-
// DEL: code is 46
41-
// INS: code is 45
24+
// JavaScript: keydown keypress keyup
25+
// Java: KEY_PRESSED KEY_TYPED* KEY_RELEASED
26+
// Java code/char 0/char code/char
27+
//
28+
// *KEY_TYPED only when keyChar not CHAR_UNDEFINED (0xFFFF)
4229

43-
//Arrow keys
44-
// VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN
45-
//Java: pressed/released 38/0xFFFF
46-
//JavaScript: down/pressed/up 38/"ArrowUp"
30+
String evType = null, jskey = null;
31+
int jskeyCode = 0, jskeyLocation = 0;
32+
Object ev = jQueryEvent;
4733

48-
Object jqEvent;
49-
private boolean ignore;
34+
/**
35+
* @j2sNative
36+
*
37+
* evType = ev.type; jskey = ev.key;
38+
* jskeyCode = ev.keyCode || ev.which;
39+
* jskeyLocation = ev.originalEvent.location || 0;
40+
* if (evType == "keypress")
41+
* ev.originalEvent.preventDefault();
42+
*/
5043

51-
public JSKeyEvent(JComponent source, Object jQueryEvent) {
52-
super();
53-
this.source = source;
54-
when = System.currentTimeMillis();
55-
keyLocation = KeyEvent.KEY_LOCATION_UNKNOWN;
56-
Object ev = this.jqEvent = jQueryEvent;
57-
// JavaScript information:
58-
String evType = null;
59-
String jskey = "";
60-
int jskeyCode = 0;
44+
int id = (evType == "keydown" ? KEY_PRESSED
45+
: evType == "keypress" ? KEY_TYPED
46+
: evType == "keyup" ? KEY_RELEASED
47+
: 0);
48+
int keyCode = getJavaKeyCode(jskeyCode, jskey);
49+
char keyChar = getJavaKeyChar(keyCode, jskey);
50+
return (id == 0 || keyChar == CHAR_UNDEFINED && id == KEY_TYPED ? null
51+
: new JSKeyEvent(source, jQueryEvent, id,
52+
(id == KEY_TYPED ? JSKeyEvent.VK_UNDEFINED : keyCode),
53+
keyChar,
54+
(id == KEY_TYPED ? KEY_LOCATION_UNKNOWN : jskeyLocation + 1))
55+
);
56+
}
57+
58+
private JSKeyEvent(JComponent source, Object ev, int id, int keyCode, char keyChar, int location) {
59+
super(source, id, System.currentTimeMillis(), 0, keyCode, keyChar, location);
6160
boolean shift = false, ctrl = false, meta = false, alt = false, altGraph = false;
6261
/**
6362
* @j2sNative
6463
*
65-
* evType = ev.type;
66-
* jskey = ev.key;
67-
* jskeyCode = ev.keyCode || ev.which;
68-
* if (evType == "keypress")
69-
* ev.originalEvent.preventDefault();
7064
* shift = ev.shiftKey;
7165
* ctrl = ev.ctrlKey;
7266
* alt = ev.altKey;
7367
* meta = ev.metaKey;
7468
* altGraph = ev.altGraphKey;
7569
*/
76-
7770
modifiers = JSKeyEvent.getModifiers(shift, ctrl, alt, meta, altGraph);
78-
79-
// JavaScript: keydown keypress keyup
80-
// Java: KEY_PRESSED KEY_TYPED KEY_RELEASED
81-
82-
id = (evType == "keydown" ? KEY_PRESSED : evType == "keypress" ? KEY_TYPED : evType == "keyup" ? KEY_RELEASED : 0);
83-
keyCode = getJavaKeyCode(jskeyCode, jskey);
84-
keyChar = getJavaKeyChar(keyCode, jskey);
85-
ignore = (keyChar == CHAR_UNDEFINED && id == KEY_TYPED);
86-
if (id == KEY_TYPED)
87-
keyCode = 0;
8871
}
8972

9073
private static int getJavaKeyCode(int jskeyCode, String jskey) {
91-
9274
// see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values
93-
94-
// enter is special
95-
if (jskeyCode == 13)
96-
return VK_ENTER;
9775
if (jskeyCode <= 40) {
98-
// 0-40 is same
76+
// enter is special
77+
if (jskeyCode == 13)
78+
return VK_ENTER;
79+
// other 0-40 is same
9980
return jskeyCode;
10081
}
10182
if (jskey.length() == 1) {
@@ -113,7 +94,6 @@ private static int getJavaKeyCode(int jskeyCode, String jskey) {
11394
case 244: // Kanji
11495
return VK_KANJI;
11596
}
116-
11797
String keyName = "VK_" + jskey.toUpperCase();
11898
try {
11999
// get the Java code from AWTKeyStroke by name, if possible
@@ -178,72 +158,4 @@ private static int getModifiers(boolean shift, boolean ctrl, boolean alt, boolea
178158
return 0;
179159
}
180160

181-
public JSKeyEvent(JComponent jc, int eventType, long currentTimeMillis, int modifiers, int keyCode, char keyChar,
182-
Object jQueryEvent) {
183-
184-
// switch (eventType) {
185-
// case KeyEvent.KEY_PRESSED:
186-
// // note that events are bundled here into one eventType
187-
// int keyCode = 0;
188-
// int modifiers = JSUtil.J2S._getKeyModifiers(jQueryEvent);
189-
// char keyChar = '\0';
190-
// String type = null;
191-
// /**
192-
// * @j2sNative
193-
// *
194-
// * keyCode = jQueryEvent.keyCode;
195-
// * keyChar = jQueryEvent.key;
196-
// * type = jQueryEvent.type;
197-
// *
198-
// */
199-
// switch (type) {
200-
// case "keydown":
201-
// eventType = KeyEvent.KEY_PRESSED;
202-
// break;
203-
// case "keypress":
204-
// // igonred by Java for
205-
//
206-
//
207-
//// Control keys
208-
//// VK_ENTER, VK_BACKSPACE, VK_TAB, VK_ESCAPE
209-
//// Function keys
210-
//// VK_F1, VK_F2, VK_F3, VK_F4 VK_F5, VK_F6, VK_F7, VK_F8, VK_F9, VK_F10, VK_F11, VK_F12,
211-
//// VK_SCROLL_LOCK, VK_PRINTSCREEN, VK_PAUSE,
212-
//// VK_DELETE, VK_INSERT,
213-
//// VK_PAGE_UP, VK_PAGE_DOWN, VK_HOME, VK_END
214-
//// Java: pressed/released only, with keyChar 0xFFFF
215-
//// DEL: adds 0 127 typed
216-
//// INS: code is 155
217-
//// JavaScript: down/pressed/up; but only up for printScreen
218-
//// PRINTSCREEN code is 44
219-
//// INS: code is 45
220-
//// DEL: code is 46
221-
////
222-
//// Arrow keys
223-
//// VK_LEFT, VK_RIGHT, VK_UP, VK_DOWN
224-
//// Java: pressed/released 38/0xFFFF
225-
////
226-
////
227-
//
228-
// // TODO: generate this for BACKSPACE and what other keys?
229-
// eventType = KeyEvent.KEY_TYPED;
230-
// keyChar = (char) keyCode;
231-
// keyCode = KeyEvent.VK_UNDEFINED;
232-
// break;
233-
// case "keyup":
234-
// eventType = KeyEvent.KEY_RELEASED;
235-
// break;
236-
// }
237-
238-
239-
super(jc, eventType, currentTimeMillis, modifiers, keyCode, keyChar);
240-
jqEvent = jQueryEvent;
241-
// TODO Auto-generated constructor stub
242-
}
243-
244-
public boolean doIgnore() {
245-
// some TYPE events are ignored
246-
return ignore;
247-
}
248-
249161
}

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSListUI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,8 +138,8 @@ protected DOMNode updateDOMNode() {
138138
public boolean handleJSEvent(Object target, int eventType, Object jQueryEvent) {
139139
switch (eventType) {
140140
case KeyEvent.KEY_PRESSED:
141-
JSKeyEvent keyEvent = new JSKeyEvent(jc, jQueryEvent);
142-
if (!keyEvent.doIgnore())
141+
JSKeyEvent keyEvent = JSKeyEvent.newJSKeyEvent(jc, jQueryEvent);
142+
if (keyEvent != null)
143143
jc.dispatchEvent(keyEvent);
144144
break;
145145
}

sources/net.sf.j2s.java.core/src/swingjs/plaf/JSTextUI.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,8 @@ public boolean handleJSEvent(Object target, int eventType, Object jQueryEvent) {
224224
switch (eventType) {
225225
case KeyEvent.KEY_PRESSED:
226226
// note that events are bundled here into one eventType
227-
JSKeyEvent keyEvent = new JSKeyEvent(jc, jQueryEvent);
228-
if (keyEvent.doIgnore())
227+
JSKeyEvent keyEvent = JSKeyEvent.newJSKeyEvent(jc, jQueryEvent);
228+
if (keyEvent == null)
229229
return true;
230230
jc.dispatchEvent(keyEvent);
231231
if (keyEvent.isConsumed()) {

0 commit comments

Comments
 (0)