JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / java / awt / EventQueue.js
1 Clazz.declarePackage ("java.awt");\r
2 Clazz.load (["java.lang.Thread"], ["java.awt.EventQueueItem", "$.EventQueue", "$.Queue"], ["java.lang.Error", "java.lang.reflect.InvocationTargetException", "java.util.EmptyStackException", "java.awt.ActiveEvent", "$.Component", "$.EventDispatchThread", "$.SentEvent", "$.SequencedEvent", "$.Toolkit", "java.awt.event.ActionEvent", "$.FocusEvent", "$.InputEvent", "$.InputMethodEvent", "$.InvocationEvent", "$.KeyEvent", "$.MouseEvent", "$.PaintEvent", "$.WindowEvent", "jssun.awt.AWTAutoShutdown", "$.AppContext", "$.PeerEvent", "$.SunToolkit", "swingjs.JSToolkit"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.queues = null;\r
5 this.nextQueue = null;\r
6 this.previousQueue = null;\r
7 this.dispatchThread = null;\r
8 this.threadGroup = null;\r
9 this.mostRecentEventTime = 0;\r
10 this.currentEvent = null;\r
11 this.waitForID = 0;\r
12 this.name = null;\r
13 Clazz.instantialize (this, arguments);\r
14 }, java.awt, "EventQueue");\r
15 Clazz.prepareFields (c$, function () {\r
16 this.queues =  new Array (4);\r
17 this.threadGroup = Thread.currentThread ().getThreadGroup ();\r
18 this.mostRecentEventTime = System.currentTimeMillis ();\r
19 this.name = "AWT-EventQueue-" + java.awt.EventQueue.nextThreadNum ();\r
20 });\r
21 c$.nextThreadNum = Clazz.defineMethod (c$, "nextThreadNum", \r
22  function () {\r
23 return java.awt.EventQueue.threadInitNumber++;\r
24 });\r
25 c$.noEvents = Clazz.defineMethod (c$, "noEvents", \r
26 function (eventQueue) {\r
27 return eventQueue.noEvents ();\r
28 }, "java.awt.EventQueue");\r
29 c$.getNextQueue = Clazz.defineMethod (c$, "getNextQueue", \r
30 function (eventQueue) {\r
31 return eventQueue.nextQueue;\r
32 }, "java.awt.EventQueue");\r
33 c$.removeSourceEvents = Clazz.defineMethod (c$, "removeSourceEvents", \r
34 function (eventQueue, source, removeAllEvents) {\r
35 eventQueue.removeSourceEvents (source, removeAllEvents);\r
36 }, "java.awt.EventQueue,~O,~B");\r
37 Clazz.makeConstructor (c$, \r
38 function () {\r
39 for (var i = 0; i < 4; i++) {\r
40 this.queues[i] =  new java.awt.Queue ();\r
41 }\r
42 });\r
43 Clazz.defineMethod (c$, "postEvent", \r
44 function (event) {\r
45 jssun.awt.SunToolkit.flushPendingEvents ();\r
46 this.postEventPrivate (event);\r
47 }, "java.awt.AWTEvent");\r
48 Clazz.defineMethod (c$, "postEventPrivate", \r
49 function (theEvent) {\r
50 theEvent.isPosted = true;\r
51 {\r
52 if (this.dispatchThread == null && this.nextQueue == null) {\r
53 if (theEvent.getSource () === jssun.awt.AWTAutoShutdown.getInstance ()) {\r
54 return;\r
55 } else {\r
56 this.initDispatchThread ();\r
57 }}if (this.nextQueue != null) {\r
58 this.nextQueue.postEventPrivate (theEvent);\r
59 return;\r
60 }this.postEventNow (theEvent, java.awt.EventQueue.getPriority (theEvent));\r
61 }}, "java.awt.AWTEvent");\r
62 c$.getPriority = Clazz.defineMethod (c$, "getPriority", \r
63  function (theEvent) {\r
64 if (Clazz.instanceOf (theEvent, jssun.awt.PeerEvent)) {\r
65 var flags = (theEvent).getFlags ();\r
66 if ((flags & 2) != 0) return 3;\r
67 if ((flags & 1) != 0) return 2;\r
68 if ((flags & 4) != 0) return 0;\r
69 }switch (theEvent.getID ()) {\r
70 case 1201:\r
71 case 800:\r
72 case 801:\r
73 return 0;\r
74 default:\r
75 return 1;\r
76 }\r
77 }, "java.awt.AWTEvent");\r
78 Clazz.defineMethod (c$, "postEventNow", \r
79  function (theEvent, priority) {\r
80 if (this.coalesceEvent (theEvent, priority)) {\r
81 return;\r
82 }var newItem =  new java.awt.EventQueueItem (theEvent);\r
83 this.cacheEQItem (newItem);\r
84 if (this.queues[priority].head == null) {\r
85 var shouldNotify = this.noEvents ();\r
86 this.queues[priority].head = this.queues[priority].tail = newItem;\r
87 if (shouldNotify) {\r
88 if (theEvent.getSource () !== jssun.awt.AWTAutoShutdown.getInstance ()) {\r
89 jssun.awt.AWTAutoShutdown.getInstance ().notifyThreadBusy (this.dispatchThread);\r
90 }}} else {\r
91 this.queues[priority].tail.next = newItem;\r
92 this.queues[priority].tail = newItem;\r
93 }}, "java.awt.AWTEvent,~N");\r
94 Clazz.defineMethod (c$, "coalescePaintEvent", \r
95  function (e) {\r
96 var sourcePeer = (e.getSource ()).peer;\r
97 if (sourcePeer != null) {\r
98 sourcePeer.coalescePaintEvent (e);\r
99 }var cache = (e.getSource ()).eventCache;\r
100 if (cache == null) {\r
101 return false;\r
102 }var index = java.awt.EventQueue.eventToCacheIndex (e);\r
103 if (index != -1 && cache[index] != null) {\r
104 var merged = this.mergePaintEvents (e, cache[index].event);\r
105 if (merged != null) {\r
106 cache[index].event = merged;\r
107 return true;\r
108 }}return false;\r
109 }, "java.awt.event.PaintEvent");\r
110 Clazz.defineMethod (c$, "mergePaintEvents", \r
111  function (a, b) {\r
112 var aRect = a.getUpdateRect ();\r
113 var bRect = b.getUpdateRect ();\r
114 if (bRect.contains (aRect)) {\r
115 return b;\r
116 }if (aRect.contains (bRect)) {\r
117 return a;\r
118 }return null;\r
119 }, "java.awt.event.PaintEvent,java.awt.event.PaintEvent");\r
120 Clazz.defineMethod (c$, "coalesceMouseEvent", \r
121  function (e) {\r
122 var cache = (e.getSource ()).eventCache;\r
123 if (cache == null) {\r
124 return false;\r
125 }var index = java.awt.EventQueue.eventToCacheIndex (e);\r
126 if (index != -1 && cache[index] != null) {\r
127 cache[index].event = e;\r
128 return true;\r
129 }return false;\r
130 }, "java.awt.event.MouseEvent");\r
131 Clazz.defineMethod (c$, "coalescePeerEvent", \r
132  function (e) {\r
133 var cache = (e.getSource ()).eventCache;\r
134 if (cache == null) {\r
135 return false;\r
136 }var index = java.awt.EventQueue.eventToCacheIndex (e);\r
137 if (index != -1 && cache[index] != null) {\r
138 e = e.coalesceEvents (cache[index].event);\r
139 if (e != null) {\r
140 cache[index].event = e;\r
141 return true;\r
142 } else {\r
143 cache[index] = null;\r
144 }}return false;\r
145 }, "jssun.awt.PeerEvent");\r
146 Clazz.defineMethod (c$, "coalesceOtherEvent", \r
147  function (e, priority) {\r
148 var id = e.getID ();\r
149 var source = e.getSource ();\r
150 for (var entry = this.queues[priority].head; entry != null; entry = entry.next) {\r
151 if (entry.event.getSource () === source && entry.id == id) {\r
152 var coalescedEvent = source.coalesceEvents (entry.event, e);\r
153 if (coalescedEvent != null) {\r
154 entry.event = coalescedEvent;\r
155 return true;\r
156 }}}\r
157 return false;\r
158 }, "java.awt.AWTEvent,~N");\r
159 Clazz.defineMethod (c$, "coalesceEvent", \r
160  function (e, priority) {\r
161 if (!(Clazz.instanceOf (e.getSource (), java.awt.Component))) {\r
162 return false;\r
163 }if (Clazz.instanceOf (e, jssun.awt.PeerEvent)) {\r
164 return this.coalescePeerEvent (e);\r
165 }if ((e.getSource ()).isCoalescingEnabled () && this.coalesceOtherEvent (e, priority)) {\r
166 return true;\r
167 }if (Clazz.instanceOf (e, java.awt.event.PaintEvent)) {\r
168 return this.coalescePaintEvent (e);\r
169 }if (Clazz.instanceOf (e, java.awt.event.MouseEvent)) {\r
170 return this.coalesceMouseEvent (e);\r
171 }return false;\r
172 }, "java.awt.AWTEvent,~N");\r
173 Clazz.defineMethod (c$, "cacheEQItem", \r
174  function (entry) {\r
175 var index = java.awt.EventQueue.eventToCacheIndex (entry.event);\r
176 if (index != -1 && Clazz.instanceOf (entry.event.getSource (), java.awt.Component)) {\r
177 var source = entry.event.getSource ();\r
178 if (source.eventCache == null) {\r
179 source.eventCache =  new Array (5);\r
180 }source.eventCache[index] = entry;\r
181 }}, "java.awt.EventQueueItem");\r
182 Clazz.defineMethod (c$, "uncacheEQItem", \r
183  function (entry) {\r
184 var index = java.awt.EventQueue.eventToCacheIndex (entry.event);\r
185 if (index != -1 && Clazz.instanceOf (entry.event.getSource (), java.awt.Component)) {\r
186 var source = entry.event.getSource ();\r
187 if (source.eventCache == null) {\r
188 return;\r
189 }source.eventCache[index] = null;\r
190 }}, "java.awt.EventQueueItem");\r
191 c$.eventToCacheIndex = Clazz.defineMethod (c$, "eventToCacheIndex", \r
192  function (e) {\r
193 switch (e.getID ()) {\r
194 case 800:\r
195 return 0;\r
196 case 801:\r
197 return 1;\r
198 case 503:\r
199 return 2;\r
200 case 506:\r
201 return 3;\r
202 default:\r
203 return -1;\r
204 }\r
205 }, "java.awt.AWTEvent");\r
206 Clazz.defineMethod (c$, "noEvents", \r
207  function () {\r
208 for (var i = 0; i < 4; i++) {\r
209 if (this.queues[i].head != null) {\r
210 return false;\r
211 }}\r
212 return true;\r
213 });\r
214 Clazz.defineMethod (c$, "getNextEvent", \r
215 function () {\r
216 jssun.awt.SunToolkit.flushPendingEvents ();\r
217 {\r
218 for (var i = 3; i >= 0; i--) {\r
219 if (this.queues[i].head != null) {\r
220 var entry = this.queues[i].head;\r
221 this.queues[i].head = entry.next;\r
222 if (entry.next == null) {\r
223 this.queues[i].tail = null;\r
224 }this.uncacheEQItem (entry);\r
225 return entry.event;\r
226 }}\r
227 jssun.awt.AWTAutoShutdown.getInstance ().notifyThreadFree (this.dispatchThread);\r
228 }return null;\r
229 });\r
230 Clazz.defineMethod (c$, "getNextEventForID", \r
231 function (id) {\r
232 jssun.awt.SunToolkit.flushPendingEvents ();\r
233 {\r
234 for (var i = 0; i < 4; i++) {\r
235 for (var entry = this.queues[i].head, prev = null; entry != null; prev = entry, entry = entry.next) {\r
236 if (entry.id == id) {\r
237 if (prev == null) {\r
238 this.queues[i].head = entry.next;\r
239 } else {\r
240 prev.next = entry.next;\r
241 }if (this.queues[i].tail === entry) {\r
242 this.queues[i].tail = prev;\r
243 }this.uncacheEQItem (entry);\r
244 return entry.event;\r
245 }}\r
246 }\r
247 this.waitForID = id;\r
248 this.waitForID = 0;\r
249 }return null;\r
250 }, "~N");\r
251 Clazz.defineMethod (c$, "peekEvent", \r
252 function () {\r
253 for (var i = 3; i >= 0; i--) {\r
254 if (this.queues[i].head != null) {\r
255 return this.queues[i].head.event;\r
256 }}\r
257 return null;\r
258 });\r
259 Clazz.defineMethod (c$, "peekEvent", \r
260 function (id) {\r
261 for (var i = 3; i >= 0; i--) {\r
262 var q = this.queues[i].head;\r
263 for (; q != null; q = q.next) {\r
264 if (q.id == id) {\r
265 return q.event;\r
266 }}\r
267 }\r
268 return null;\r
269 }, "~N");\r
270 Clazz.defineMethod (c$, "dispatchEvent", \r
271 function (event) {\r
272 var src = event.getSource ();\r
273 this.dispatchEventImpl (event, src, false);\r
274 }, "java.awt.AWTEvent");\r
275 Clazz.defineMethod (c$, "dispatchEventAndWait", \r
276 function (event, src) {\r
277 this.dispatchEventImpl (event, src, true);\r
278 }, "java.awt.AWTEvent,~O");\r
279 Clazz.defineMethod (c$, "dispatchEventImpl", \r
280  function (event, src, andWait) {\r
281 event.isPosted = true;\r
282 if (Clazz.instanceOf (event, java.awt.ActiveEvent)) {\r
283 this.setCurrentEventAndMostRecentTimeImpl (event);\r
284 swingjs.JSToolkit.dispatchEvent (event, null, andWait);\r
285 } else if (Clazz.instanceOf (src, java.awt.Component)) {\r
286 swingjs.JSToolkit.dispatchEvent (event, src, andWait);\r
287 event.dispatched ();\r
288 } else if (Clazz.instanceOf (src, jssun.awt.AWTAutoShutdown)) {\r
289 if (this.noEvents ()) {\r
290 this.dispatchThread.stopDispatching ();\r
291 }} else {\r
292 System.err.println ("unable to dispatch event: " + event);\r
293 }}, "java.awt.AWTEvent,~O,~B");\r
294 c$.getMostRecentEventTime = Clazz.defineMethod (c$, "getMostRecentEventTime", \r
295 function () {\r
296 return 0;\r
297 });\r
298 Clazz.defineMethod (c$, "getMostRecentEventTimeEx", \r
299 function () {\r
300 return this.mostRecentEventTime;\r
301 });\r
302 c$.getCurrentEvent = Clazz.defineMethod (c$, "getCurrentEvent", \r
303 function () {\r
304 return java.awt.Toolkit.getEventQueue ().getCurrentEventImpl ();\r
305 });\r
306 Clazz.defineMethod (c$, "getCurrentEventImpl", \r
307  function () {\r
308 return (swingjs.JSToolkit.isDispatchThread () ? (this.currentEvent) : null);\r
309 });\r
310 Clazz.defineMethod (c$, "push", \r
311 function (newEventQueue) {\r
312 if (this.nextQueue != null) {\r
313 this.nextQueue.push (newEventQueue);\r
314 return;\r
315 }{\r
316 while (this.peekEvent () != null) {\r
317 try {\r
318 newEventQueue.postEventPrivate (this.getNextEvent ());\r
319 } catch (ie) {\r
320 if (Clazz.exceptionOf (ie, InterruptedException)) {\r
321 } else {\r
322 throw ie;\r
323 }\r
324 }\r
325 }\r
326 newEventQueue.previousQueue = this;\r
327 }if (this.dispatchThread != null) {\r
328 this.dispatchThread.stopDispatchingLater ();\r
329 }this.nextQueue = newEventQueue;\r
330 var appContext = jssun.awt.AppContext.getAppContext ();\r
331 if (appContext.get (jssun.awt.AppContext.EVENT_QUEUE_KEY) === this) {\r
332 appContext.put (jssun.awt.AppContext.EVENT_QUEUE_KEY, newEventQueue);\r
333 }}, "java.awt.EventQueue");\r
334 Clazz.defineMethod (c$, "pop", \r
335 function () {\r
336 var prev = this.previousQueue;\r
337 {\r
338 {\r
339 if (this.nextQueue != null) {\r
340 this.nextQueue.pop ();\r
341 return;\r
342 }if (this.previousQueue == null) {\r
343 throw  new java.util.EmptyStackException ();\r
344 }this.previousQueue.nextQueue = null;\r
345 while (this.peekEvent () != null) {\r
346 try {\r
347 this.previousQueue.postEventPrivate (this.getNextEvent ());\r
348 } catch (ie) {\r
349 if (Clazz.exceptionOf (ie, InterruptedException)) {\r
350 } else {\r
351 throw ie;\r
352 }\r
353 }\r
354 }\r
355 var appContext = jssun.awt.AppContext.getAppContext ();\r
356 if (appContext.get (jssun.awt.AppContext.EVENT_QUEUE_KEY) === this) {\r
357 appContext.put (jssun.awt.AppContext.EVENT_QUEUE_KEY, this.previousQueue);\r
358 }this.previousQueue = null;\r
359 }}var dt = this.dispatchThread;\r
360 if (dt != null) {\r
361 dt.stopDispatching ();\r
362 }});\r
363 c$.isDispatchThread = Clazz.defineMethod (c$, "isDispatchThread", \r
364 function () {\r
365 return swingjs.JSToolkit.isDispatchThread ();\r
366 });\r
367 Clazz.defineMethod (c$, "initDispatchThread", \r
368 function () {\r
369 {\r
370 if (this.dispatchThread == null) {\r
371 var t =  new java.awt.EventDispatchThread (this.threadGroup, this.name, this);\r
372 jssun.awt.AWTAutoShutdown.getInstance ().notifyThreadBusy (t);\r
373 this.dispatchThread = t;\r
374 this.dispatchThread.start ();\r
375 }}});\r
376 Clazz.defineMethod (c$, "detachDispatchThread", \r
377 function () {\r
378 this.dispatchThread = null;\r
379 });\r
380 Clazz.defineMethod (c$, "getDispatchThread", \r
381 function () {\r
382 return this.dispatchThread;\r
383 });\r
384 Clazz.defineMethod (c$, "removeSourceEvents", \r
385 function (source, removeAllEvents) {\r
386 jssun.awt.SunToolkit.flushPendingEvents ();\r
387 {\r
388 for (var i = 0; i < 4; i++) {\r
389 var entry = this.queues[i].head;\r
390 var prev = null;\r
391 while (entry != null) {\r
392 if ((entry.event.getSource () === source) && (removeAllEvents || !(Clazz.instanceOf (entry.event, java.awt.SequencedEvent) || Clazz.instanceOf (entry.event, java.awt.SentEvent) || Clazz.instanceOf (entry.event, java.awt.event.FocusEvent) || Clazz.instanceOf (entry.event, java.awt.event.WindowEvent) || Clazz.instanceOf (entry.event, java.awt.event.KeyEvent) || Clazz.instanceOf (entry.event, java.awt.event.InputMethodEvent)))) {\r
393 if (Clazz.instanceOf (entry.event, java.awt.SequencedEvent)) {\r
394 (entry.event).dispose ();\r
395 }if (Clazz.instanceOf (entry.event, java.awt.SentEvent)) {\r
396 (entry.event).dispose ();\r
397 }if (prev == null) {\r
398 this.queues[i].head = entry.next;\r
399 } else {\r
400 prev.next = entry.next;\r
401 }this.uncacheEQItem (entry);\r
402 } else {\r
403 prev = entry;\r
404 }entry = entry.next;\r
405 }\r
406 this.queues[i].tail = prev;\r
407 }\r
408 }}, "~O,~B");\r
409 c$.setCurrentEventAndMostRecentTime = Clazz.defineMethod (c$, "setCurrentEventAndMostRecentTime", \r
410 function (e) {\r
411 java.awt.Toolkit.getEventQueue ().setCurrentEventAndMostRecentTimeImpl (e);\r
412 }, "java.awt.AWTEvent");\r
413 Clazz.defineMethod (c$, "setCurrentEventAndMostRecentTimeImpl", \r
414  function (e) {\r
415 if (swingjs.JSToolkit.isDispatchThread ()) {\r
416 return;\r
417 }this.currentEvent = e;\r
418 var mostRecentEventTime2 = -9223372036854775808;\r
419 if (Clazz.instanceOf (e, java.awt.event.InputEvent)) {\r
420 var ie = e;\r
421 mostRecentEventTime2 = ie.getWhen ();\r
422 } else if (Clazz.instanceOf (e, java.awt.event.InputMethodEvent)) {\r
423 var ime = e;\r
424 mostRecentEventTime2 = ime.getWhen ();\r
425 } else if (Clazz.instanceOf (e, java.awt.event.ActionEvent)) {\r
426 var ae = e;\r
427 mostRecentEventTime2 = ae.getWhen ();\r
428 } else if (Clazz.instanceOf (e, java.awt.event.InvocationEvent)) {\r
429 var ie = e;\r
430 mostRecentEventTime2 = ie.getWhen ();\r
431 }this.mostRecentEventTime = Math.max (this.mostRecentEventTime, mostRecentEventTime2);\r
432 }, "java.awt.AWTEvent");\r
433 c$.invokeLater = Clazz.defineMethod (c$, "invokeLater", \r
434 function (runnable) {\r
435 java.awt.Toolkit.getEventQueue ().postEvent ( new java.awt.event.InvocationEvent (java.awt.Toolkit.getDefaultToolkit (), runnable));\r
436 }, "Runnable");\r
437 c$.invokeAndWait = Clazz.defineMethod (c$, "invokeAndWait", \r
438 function (runnable) {\r
439 java.awt.EventQueue.invokeAndWaitStatic (java.awt.Toolkit.getDefaultToolkit (), runnable);\r
440 }, "Runnable");\r
441 c$.invokeAndWaitStatic = Clazz.defineMethod (c$, "invokeAndWaitStatic", \r
442  function (source, runnable) {\r
443 if (java.awt.EventQueue.isDispatchThread ()) {\r
444 throw  new Error ("Cannot call invokeAndWait from the event dispatcher thread");\r
445 }var event =  new java.awt.event.InvocationEvent (source, runnable, null, true);\r
446 swingjs.JSToolkit.dispatchEvent (event, null, true);\r
447 var eventThrowable = event.getThrowable ();\r
448 if (eventThrowable != null) {\r
449 throw  new java.lang.reflect.InvocationTargetException (eventThrowable);\r
450 }}, "~O,Runnable");\r
451 Clazz.defineMethod (c$, "wakeup", \r
452 function (isShutdown) {\r
453 {\r
454 if (this.nextQueue != null) {\r
455 this.nextQueue.wakeup (isShutdown);\r
456 } else if (this.dispatchThread != null) {\r
457 try {\r
458 this.dispatchThread.start ();\r
459 } catch (e) {\r
460 if (Clazz.exceptionOf (e, IllegalThreadStateException)) {\r
461 this.dispatchThread.run ();\r
462 } else {\r
463 throw e;\r
464 }\r
465 }\r
466 } else if (!isShutdown) {\r
467 this.initDispatchThread ();\r
468 }}}, "~B");\r
469 Clazz.defineStatics (c$,\r
470 "threadInitNumber", 0,\r
471 "LOW_PRIORITY", 0,\r
472 "NORM_PRIORITY", 1,\r
473 "HIGH_PRIORITY", 2,\r
474 "ULTIMATE_PRIORITY", 3,\r
475 "NUM_PRIORITIES", 4,\r
476 "PAINT", 0,\r
477 "UPDATE", 1,\r
478 "MOVE", 2,\r
479 "DRAG", 3,\r
480 "PEER", 4,\r
481 "CACHE_LENGTH", 5);\r
482 c$ = Clazz.decorateAsClass (function () {\r
483 this.head = null;\r
484 this.tail = null;\r
485 Clazz.instantialize (this, arguments);\r
486 }, java.awt, "Queue");\r
487 c$ = Clazz.decorateAsClass (function () {\r
488 this.event = null;\r
489 this.id = 0;\r
490 this.next = null;\r
491 Clazz.instantialize (this, arguments);\r
492 }, java.awt, "EventQueueItem");\r
493 Clazz.makeConstructor (c$, \r
494 function (evt) {\r
495 this.event = evt;\r
496 this.id = evt.getID ();\r
497 }, "java.awt.AWTEvent");\r
498 });\r