author | haftmann |
Mon, 30 Oct 2017 13:18:41 +0000 | |
changeset 66936 | cf8d8fc23891 |
parent 66094 | 24658c9d7c78 |
child 67129 | 0262a378d5d6 |
permissions | -rw-r--r-- |
57612
990ffb84489b
clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents:
56773
diff
changeset
|
1 |
/* Title: Pure/GUI/gui_thread.scala |
29202 | 2 |
Author: Makarius |
3 |
||
57613 | 4 |
Evaluation within the GUI thread (for AWT/Swing). |
29202 | 5 |
*/ |
6 |
||
7 |
package isabelle |
|
8 |
||
55618 | 9 |
|
56773 | 10 |
import javax.swing.SwingUtilities |
31942
63466160ff27
renamed Delay to Swing_Thread.delay (action is executed within AWT thread!);
wenzelm
parents:
31862
diff
changeset
|
11 |
|
29202 | 12 |
|
57612
990ffb84489b
clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents:
56773
diff
changeset
|
13 |
object GUI_Thread |
29202 | 14 |
{ |
56773 | 15 |
/* context check */ |
32494 | 16 |
|
66094 | 17 |
def assert[A](body: => A): A = |
52859 | 18 |
{ |
19 |
Predef.assert(SwingUtilities.isEventDispatchThread()) |
|
20 |
body |
|
21 |
} |
|
32494 | 22 |
|
66094 | 23 |
def require[A](body: => A): A = |
52859 | 24 |
{ |
25 |
Predef.require(SwingUtilities.isEventDispatchThread()) |
|
26 |
body |
|
27 |
} |
|
52477 | 28 |
|
32494 | 29 |
|
56773 | 30 |
/* event dispatch queue */ |
31942
63466160ff27
renamed Delay to Swing_Thread.delay (action is executed within AWT thread!);
wenzelm
parents:
31862
diff
changeset
|
31 |
|
34026 | 32 |
def now[A](body: => A): A = |
33 |
{ |
|
48000
880f1693299a
further attempts to simplify/robustify Swing_Thread.now, to avoid spurious physical race conditions on Java 6 / Mac OS X;
wenzelm
parents:
47989
diff
changeset
|
34 |
if (SwingUtilities.isEventDispatchThread()) body |
880f1693299a
further attempts to simplify/robustify Swing_Thread.now, to avoid spurious physical race conditions on Java 6 / Mac OS X;
wenzelm
parents:
47989
diff
changeset
|
35 |
else { |
56662
f373fb77e0a4
avoid "Adaptation of argument list by inserting ()" -- deprecated in scala-2.11.0;
wenzelm
parents:
55618
diff
changeset
|
36 |
lazy val result = { assert { Exn.capture(body) } } |
48000
880f1693299a
further attempts to simplify/robustify Swing_Thread.now, to avoid spurious physical race conditions on Java 6 / Mac OS X;
wenzelm
parents:
47989
diff
changeset
|
37 |
SwingUtilities.invokeAndWait(new Runnable { def run = result }) |
880f1693299a
further attempts to simplify/robustify Swing_Thread.now, to avoid spurious physical race conditions on Java 6 / Mac OS X;
wenzelm
parents:
47989
diff
changeset
|
38 |
Exn.release(result) |
880f1693299a
further attempts to simplify/robustify Swing_Thread.now, to avoid spurious physical race conditions on Java 6 / Mac OS X;
wenzelm
parents:
47989
diff
changeset
|
39 |
} |
29649
8b0c1397868e
more robust treatment of SwingUtilities.isEventDispatchThread;
wenzelm
parents:
29202
diff
changeset
|
40 |
} |
29202 | 41 |
|
34299
68716caa7745
Swing_Thread.future: plain Future.value if this is already Swing;
wenzelm
parents:
34217
diff
changeset
|
42 |
def later(body: => Unit) |
68716caa7745
Swing_Thread.future: plain Future.value if this is already Swing;
wenzelm
parents:
34217
diff
changeset
|
43 |
{ |
32494 | 44 |
if (SwingUtilities.isEventDispatchThread()) body |
29649
8b0c1397868e
more robust treatment of SwingUtilities.isEventDispatchThread;
wenzelm
parents:
29202
diff
changeset
|
45 |
else SwingUtilities.invokeLater(new Runnable { def run = body }) |
8b0c1397868e
more robust treatment of SwingUtilities.isEventDispatchThread;
wenzelm
parents:
29202
diff
changeset
|
46 |
} |
31942
63466160ff27
renamed Delay to Swing_Thread.delay (action is executed within AWT thread!);
wenzelm
parents:
31862
diff
changeset
|
47 |
|
63466160ff27
renamed Delay to Swing_Thread.delay (action is executed within AWT thread!);
wenzelm
parents:
31862
diff
changeset
|
48 |
|
56770
e160ae47db94
mane delayed events outside of Swing thread -- triggers no longer require Swing_Thread.later;
wenzelm
parents:
56662
diff
changeset
|
49 |
/* delayed events */ |
49195 | 50 |
|
62263 | 51 |
def delay_first(delay: => Time)(event: => Unit): Standard_Thread.Delay = |
52 |
Standard_Thread.delay_first(delay) { later { event } } |
|
49196
1d63ceb0d177
postpone update of text overview panel after incoming session edits, to improve reactivity of editing massive theories like src/HOL/Multivariate_Analysis;
wenzelm
parents:
49195
diff
changeset
|
53 |
|
62263 | 54 |
def delay_last(delay: => Time)(event: => Unit): Standard_Thread.Delay = |
55 |
Standard_Thread.delay_last(delay) { later { event } } |
|
29202 | 56 |
} |