src/Tools/jEdit/src/jedit/TheoryView.scala
changeset 34650 d7ba607bf684
parent 34649 70759ca6bb87
child 34651 23271beee68a
--- a/src/Tools/jEdit/src/jedit/TheoryView.scala	Wed Jul 08 13:29:43 2009 +0200
+++ b/src/Tools/jEdit/src/jedit/TheoryView.scala	Wed Jul 08 13:29:44 2009 +0200
@@ -54,6 +54,8 @@
 
 
   private var col: Text.Change = null
+  private var doc_id: IsarDocument.Document_ID = prover.document(null).id
+  def current_document() = prover.document(doc_id)
 
   private val col_timer = new Timer(300, new ActionListener() {
     override def actionPerformed(e: ActionEvent) = commit
@@ -70,7 +72,7 @@
 
   private val selected_state_controller = new CaretListener {
     override def caretUpdate(e: CaretEvent) = {
-      val doc = prover.document
+      val doc = current_document()
       val cmd = doc.find_command_at(e.getDot)
       if (cmd != null && doc.token_start(cmd.tokens.first) <= e.getDot &&
           Isabelle.prover_setup(buffer).get.selected_state != cmd)
@@ -85,12 +87,9 @@
     buffer.setTokenMarker(new DynamicTokenMarker(buffer, prover))
     buffer.addBufferListener(this)
 
-    val MAX = TheoryView.MAX_CHANGE_LENGTH
-    for (i <- 0 to buffer.getLength / MAX) {
-      prover ! new isabelle.proofdocument.Text.Change(
-        Isabelle.system.id(), i * MAX,
-        buffer.getText(i * MAX, MAX min buffer.getLength - i * MAX), "")
-    }
+    col = Text.Change(doc_id, Isabelle.system.id(), 0,
+      buffer.getText(0, buffer.getLength), "")
+    commit
   }
 
   def deactivate() {
@@ -124,7 +123,7 @@
   def _from_current(to_id: String, changes: List[Text.Change], pos: Int): Int =
     changes match {
       case Nil => pos
-      case Text.Change(id, start, added, removed) :: rest_changes => {
+      case Text.Change(_, id, start, added, removed) :: rest_changes => {
         val shifted =
           if (start <= pos)
             if (pos < start + added.length) start
@@ -138,7 +137,7 @@
   def _to_current(from_id: String, changes: List[Text.Change], pos: Int): Int =
     changes match {
       case Nil => pos
-      case Text.Change(id, start, added, removed) :: rest_changes => {
+      case Text.Change(_, id, start, added, removed) :: rest_changes => {
         val shifted = _to_current(from_id, rest_changes, pos)
         if (id == from_id) pos
         else if (start <= shifted) {
@@ -159,7 +158,7 @@
 
   def repaint(cmd: Command) =
   {
-    val document = prover.document
+    val document = current_document()
     if (text_area != null) {
       val start = text_area.getLineOfOffset(to_current(document.id, cmd.start(document)))
       val stop = text_area.getLineOfOffset(to_current(document.id, cmd.stop(document)) - 1)
@@ -202,7 +201,7 @@
   override def paintValidLine(gfx: Graphics2D,
     screen_line: Int, physical_line: Int, start: Int, end: Int, y: Int)
   {
-    val document = prover.document
+    val document = current_document()
     def from_current(pos: Int) = this.from_current(document.id, pos)
     def to_current(pos: Int) = this.to_current(document.id, pos)
     val saved_color = gfx.getColor
@@ -222,7 +221,7 @@
   }
 
   override def getToolTipText(x: Int, y: Int) = {
-    val document = prover.document
+    val document = current_document()
     val offset = from_current(document.id, text_area.xyToOffset(x, y))
     val cmd = document.find_command_at(offset)
     if (cmd != null) {
@@ -240,12 +239,13 @@
       def split_changes(c: Text.Change): List[Text.Change] = {
         val MAX = TheoryView.MAX_CHANGE_LENGTH
         if (c.added.length <= MAX) List(c)
-        else Text.Change(c.id, c.start, c.added.substring(0, MAX), c.removed) ::
-          split_changes(new Text.Change(id(), c.start + MAX, c.added.substring(MAX), c.removed))
+        else Text.Change(c.base_id, c.id, c.start, c.added.substring(0, MAX), c.removed) ::
+          split_changes(new Text.Change(c.id, id(), c.start + MAX, c.added.substring(MAX), ""))
       }
       val new_changes = split_changes(col)
       changes = new_changes.reverse ::: changes
       new_changes map (document_actor ! _)
+      doc_id = new_changes.last.id
     }
     col = null
     if (col_timer.isRunning())
@@ -271,12 +271,12 @@
   {
     val text = buffer.getText(offset, length)
     if (col == null)
-      col = new Text.Change(id(), offset, text, "")
+      col = new Text.Change(doc_id, id(), offset, text, "")
     else if (col.start <= offset && offset <= col.start + col.added.length)
-      col = new Text.Change(col.id, col.start, col.added + text, col.removed)
+      col = new Text.Change(doc_id, col.id, col.start, col.added + text, col.removed)
     else {
       commit
-      col = new Text.Change(id(), offset, text, "")
+      col = new Text.Change(doc_id, id(), offset, text, "")
     }
     delay_commit
   }
@@ -286,10 +286,10 @@
   {
     val removed = buffer.getText(start, removed_length)
     if (col == null)
-      col = new Text.Change(id(), start, "", removed)
+      col = new Text.Change(doc_id, id(), start, "", removed)
     else if (col.start > start + removed_length || start > col.start + col.added.length) {
       commit
-      col = new Text.Change(id(), start, "", removed)
+      col = new Text.Change(doc_id, id(), start, "", removed)
     }
     else {
 /*      val offset = start - col.start
@@ -301,7 +301,7 @@
           (diff - (offset min 0), offset min 0)
       col = new Text.Changed(start min col.start, added, col.removed - add_removed)*/
       commit
-      col = new Text.Change(id(), start, "", removed)
+      col = new Text.Change(doc_id, id(), start, "", removed)
     }
     delay_commit
   }