src/Pure/System/session.scala
changeset 38222 dac5fa0ac971
parent 38221 e0f00f0945b4
child 38226 9d8848d70b0a
equal deleted inserted replaced
38221:e0f00f0945b4 38222:dac5fa0ac971
   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 }