111 PIDE.options_changed() |
111 PIDE.options_changed() |
112 PIDE.editor.flush() |
112 PIDE.editor.flush() |
113 } |
113 } |
114 } |
114 } |
115 |
115 |
116 def node_perspective(doc_blobs: Document.Blobs): (Boolean, Document.Node.Perspective_Text) = |
116 def node_perspective(hidden: Boolean, doc_blobs: Document.Blobs): (Boolean, Document.Node.Perspective_Text) = |
117 { |
117 { |
118 GUI_Thread.require {} |
118 GUI_Thread.require {} |
119 |
119 |
120 if (Isabelle.continuous_checking && is_theory) { |
120 if (Isabelle.continuous_checking && is_theory) { |
121 val snapshot = this.snapshot() |
121 val snapshot = this.snapshot() |
138 |
138 |
139 val reparse = snapshot.node.load_commands.exists(_.blobs_changed(doc_blobs)) |
139 val reparse = snapshot.node.load_commands.exists(_.blobs_changed(doc_blobs)) |
140 |
140 |
141 (reparse, |
141 (reparse, |
142 Document.Node.Perspective(node_required, |
142 Document.Node.Perspective(node_required, |
143 Text.Perspective(document_view_ranges ::: load_ranges), |
143 Text.Perspective(if (hidden) Nil else document_view_ranges ::: load_ranges), |
144 PIDE.editor.node_overlays(node_name))) |
144 PIDE.editor.node_overlays(node_name))) |
145 } |
145 } |
146 else (false, Document.Node.no_perspective_text) |
146 else (false, Document.Node.no_perspective_text) |
147 } |
147 } |
148 |
148 |
230 private var last_perspective = Document.Node.no_perspective_text |
230 private var last_perspective = Document.Node.no_perspective_text |
231 |
231 |
232 def is_pending(): Boolean = synchronized { pending_clear || pending.nonEmpty } |
232 def is_pending(): Boolean = synchronized { pending_clear || pending.nonEmpty } |
233 def snapshot(): List[Text.Edit] = synchronized { pending.toList } |
233 def snapshot(): List[Text.Edit] = synchronized { pending.toList } |
234 |
234 |
235 def flushed_edits(doc_blobs: Document.Blobs): List[Document.Edit_Text] = synchronized |
235 def flushed_edits(hidden: Boolean, doc_blobs: Document.Blobs): List[Document.Edit_Text] = |
236 { |
236 synchronized { |
237 GUI_Thread.require {} |
237 GUI_Thread.require {} |
238 |
238 |
239 val clear = pending_clear |
239 val clear = pending_clear |
240 val edits = snapshot() |
240 val edits = snapshot() |
241 val (reparse, perspective) = node_perspective(doc_blobs) |
241 val (reparse, perspective) = node_perspective(hidden, doc_blobs) |
242 if (clear || reparse || edits.nonEmpty || last_perspective != perspective) { |
242 if (clear || reparse || edits.nonEmpty || last_perspective != perspective) { |
243 pending_clear = false |
243 pending_clear = false |
244 pending.clear |
244 pending.clear |
245 last_perspective = perspective |
245 last_perspective = perspective |
246 node_edits(clear, edits, perspective) |
246 node_edits(clear, edits, perspective) |
247 } |
247 } |
248 else Nil |
248 else Nil |
249 } |
249 } |
250 |
250 |
251 def edit(clear: Boolean, e: Text.Edit): Unit = synchronized |
251 def edit(clear: Boolean, e: Text.Edit): Unit = synchronized |
252 { |
252 { |
253 GUI_Thread.require {} |
253 GUI_Thread.require {} |
254 |
254 |
270 def is_stable(): Boolean = !pending_edits.is_pending(); |
270 def is_stable(): Boolean = !pending_edits.is_pending(); |
271 |
271 |
272 def snapshot(): Document.Snapshot = |
272 def snapshot(): Document.Snapshot = |
273 session.snapshot(node_name, pending_edits.snapshot()) |
273 session.snapshot(node_name, pending_edits.snapshot()) |
274 |
274 |
275 def flushed_edits(doc_blobs: Document.Blobs): List[Document.Edit_Text] = |
275 def flushed_edits(hidden: Boolean, doc_blobs: Document.Blobs): List[Document.Edit_Text] = |
276 pending_edits.flushed_edits(doc_blobs) |
276 pending_edits.flushed_edits(hidden, doc_blobs) |
277 |
277 |
278 |
278 |
279 /* buffer listener */ |
279 /* buffer listener */ |
280 |
280 |
281 private val buffer_listener: BufferListener = new BufferAdapter |
281 private val buffer_listener: BufferListener = new BufferAdapter |