src/Tools/jEdit/src/document_model.scala
changeset 61728 5f5ff1eab407
parent 61538 bf4969660913
child 62246 d9410066dbd5
equal deleted inserted replaced
61727:6f1a84d78865 61728:5f5ff1eab407
   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