equal
deleted
inserted
replaced
8 package isabelle.jedit |
8 package isabelle.jedit |
9 |
9 |
10 |
10 |
11 import isabelle.proofdocument.{Change, Command, Edit, Insert, Remove, Document, Session} |
11 import isabelle.proofdocument.{Change, Command, Edit, Insert, Remove, Document, Session} |
12 |
12 |
13 import scala.actors.Future |
|
14 import scala.actors.Futures._ |
|
15 import scala.actors.Actor, Actor._ |
13 import scala.actors.Actor, Actor._ |
16 import scala.collection.mutable |
14 import scala.collection.mutable |
17 |
15 |
18 import org.gjt.sp.jedit.Buffer |
16 import org.gjt.sp.jedit.Buffer |
19 import org.gjt.sp.jedit.buffer.{BufferAdapter, BufferListener, JEditBuffer} |
17 import org.gjt.sp.jedit.buffer.{BufferAdapter, BufferListener, JEditBuffer} |
60 { |
58 { |
61 /* changes vs. edits */ |
59 /* changes vs. edits */ |
62 |
60 |
63 private val document_0 = session.begin_document(buffer.getName) |
61 private val document_0 = session.begin_document(buffer.getName) |
64 |
62 |
65 private val change_0 = |
63 private val change_0 = new Change(document_0.id, None, Nil, Future.value(document_0, Nil)) |
66 new Change(document_0.id, None, Nil, future { (document_0, Nil) }) // FIXME more robust history start |
|
67 private var _changes = List(change_0) // owned by Swing thread |
64 private var _changes = List(change_0) // owned by Swing thread |
68 def changes = _changes |
65 def changes = _changes |
69 private var current_change = change_0 |
66 private var current_change = change_0 |
70 |
67 |
71 private val edits = new mutable.ListBuffer[Edit] // owned by Swing thread |
68 private val edits = new mutable.ListBuffer[Edit] // owned by Swing thread |
73 private val edits_delay = Swing_Thread.delay_last(300) { |
70 private val edits_delay = Swing_Thread.delay_last(300) { |
74 if (!edits.isEmpty) { |
71 if (!edits.isEmpty) { |
75 val new_id = session.create_id() |
72 val new_id = session.create_id() |
76 val eds = edits.toList |
73 val eds = edits.toList |
77 val change1 = current_change |
74 val change1 = current_change |
78 val result: Future[Document.Result] = future { |
75 val result: Future[Document.Result] = Future.fork { |
79 val old_doc = change1.document |
76 val old_doc = change1.document |
80 Document.text_edits(session, old_doc, new_id, eds) |
77 Document.text_edits(session, old_doc, new_id, eds) |
81 } |
78 } |
82 result() // FIXME !?!?!? |
|
83 val change2 = new Change(new_id, Some(change1), eds, result) |
79 val change2 = new Change(new_id, Some(change1), eds, result) |
84 _changes ::= change2 |
80 _changes ::= change2 |
85 session.input(change2) |
81 session.input(change2) |
86 current_change = change2 |
82 current_change = change2 |
87 edits.clear |
83 edits.clear |
112 /* history of changes */ |
108 /* history of changes */ |
113 |
109 |
114 def recent_document(): Document = |
110 def recent_document(): Document = |
115 { |
111 { |
116 def find(change: Change): Document = |
112 def find(change: Change): Document = |
117 if (change.result.isSet || !change.parent.isDefined) change.document |
113 if (change.result.is_finished || !change.parent.isDefined) change.document |
118 else find(change.parent.get) |
114 else find(change.parent.get) |
119 find(current_change) |
115 find(current_change) |
120 } |
116 } |
121 |
117 |
122 |
118 |