equal
deleted
inserted
replaced
313 (session_actor !? Started(timeout, args)).asInstanceOf[Option[String]] |
313 (session_actor !? Started(timeout, args)).asInstanceOf[Option[String]] |
314 |
314 |
315 def stop() { session_actor ! Stop } |
315 def stop() { session_actor ! Stop } |
316 |
316 |
317 def input(change: Change) { session_actor ! change } |
317 def input(change: Change) { session_actor ! change } |
|
318 |
|
319 |
|
320 |
|
321 /** editor model **/ // FIXME subclass Editor_Session (!?) |
|
322 |
|
323 @volatile private var history = Change.init // owned by Swing thread (!??) |
|
324 def current_change(): Change = history |
|
325 |
|
326 def edit_document(edits: List[Document.Node_Text_Edit]) |
|
327 { |
|
328 Swing_Thread.now { |
|
329 val old_change = current_change() |
|
330 val new_id = create_id() |
|
331 val result: Future[(List[Document.Edit[Command]], Document)] = |
|
332 Future.fork { |
|
333 val old_doc = old_change.join_document |
|
334 old_doc.await_assignment |
|
335 Document.text_edits(this, old_doc, new_id, edits) |
|
336 } |
|
337 val new_change = new Change(new_id, Some(old_change), edits, result) |
|
338 history = new_change |
|
339 new_change.result.map(_ => input(new_change)) |
|
340 } |
|
341 } |
318 } |
342 } |