equal
deleted
inserted
replaced
34 add(html_panel, BorderLayout.CENTER) |
34 add(html_panel, BorderLayout.CENTER) |
35 |
35 |
36 |
36 |
37 /* controls */ |
37 /* controls */ |
38 |
38 |
|
39 private case class Render(body: List[XML.Tree]) |
|
40 |
39 private def handle_update() |
41 private def handle_update() |
40 { |
42 { |
41 Swing_Thread.now { |
43 Swing_Thread.now { |
42 Document_Model(view.getBuffer) match { |
44 Document_Model(view.getBuffer) match { |
43 case Some(model) => |
45 case Some(model) => |
44 model.recent_document.command_at(view.getTextArea.getCaretPosition) match { |
46 val document = model.recent_document |
45 case Some((cmd, _)) => output_actor ! cmd |
47 document.command_at(view.getTextArea.getCaretPosition) match { |
|
48 case Some((cmd, _)) => |
|
49 output_actor ! Render(document.current_state(cmd).map(_.results) getOrElse Nil) |
46 case None => |
50 case None => |
47 } |
51 } |
48 case None => |
52 case None => |
49 } |
53 } |
50 } |
54 } |
52 |
56 |
53 private val update = new Button("Update") { |
57 private val update = new Button("Update") { |
54 reactions += { case ButtonClicked(_) => handle_update() } |
58 reactions += { case ButtonClicked(_) => handle_update() } |
55 } |
59 } |
56 |
60 |
57 private val freeze = new ToggleButton("Freeze") |
61 val follow = new ToggleButton("Follow") |
|
62 follow.selected = true |
58 |
63 |
59 |
64 |
60 /* actor wiring */ |
65 /* actor wiring */ |
61 |
66 |
62 private val output_actor = actor { |
67 private val output_actor = actor { |
63 loop { |
68 loop { |
64 react { |
69 react { |
|
70 case Session.Global_Settings => html_panel.init(Isabelle.font_size()) |
|
71 |
|
72 case Render(body) => html_panel.render(body) |
|
73 |
65 case cmd: Command => |
74 case cmd: Command => |
66 Swing_Thread.now { |
75 Swing_Thread.now { |
67 if (freeze.selected) None else Document_Model(view.getBuffer) |
76 if (follow.selected) Document_Model(view.getBuffer) else None |
68 } match { |
77 } match { |
69 case None => |
78 case None => |
70 case Some(model) => |
79 case Some(model) => |
71 val body = model.recent_document.current_state(cmd).map(_.results) getOrElse Nil |
80 val body = model.recent_document.current_state(cmd).map(_.results) getOrElse Nil |
72 html_panel.render(body) |
81 html_panel.render(body) |
73 } |
82 } |
74 |
|
75 case Session.Global_Settings => html_panel.init(Isabelle.font_size()) |
|
76 |
83 |
77 case bad => System.err.println("output_actor: ignoring bad message " + bad) |
84 case bad => System.err.println("output_actor: ignoring bad message " + bad) |
78 } |
85 } |
79 } |
86 } |
80 } |
87 } |
94 } |
101 } |
95 |
102 |
96 |
103 |
97 /* init controls */ |
104 /* init controls */ |
98 |
105 |
99 controls.contents ++= List(update, freeze) |
106 controls.contents ++= List(update, follow) |
100 handle_update() |
107 handle_update() |
101 } |
108 } |