162 |
162 |
163 /* actor messages */ |
163 /* actor messages */ |
164 |
164 |
165 private case class Start(timeout: Time, args: List[String]) |
165 private case class Start(timeout: Time, args: List[String]) |
166 private case object Interrupt |
166 private case object Interrupt |
167 private case class Init_Node( |
167 private case class Init_Node(name: String, master_dir: String, |
168 name: String, master_dir: String, header: Document.Node_Header, text: String) |
168 header: Document.Node_Header, perspective: Text.Perspective, text: String) |
169 private case class Edit_Node( |
169 private case class Edit_Node(name: String, master_dir: String, |
170 name: String, master_dir: String, header: Document.Node_Header, edits: List[Text.Edit]) |
170 header: Document.Node_Header, perspective: Text.Perspective, edits: List[Text.Edit]) |
171 private case class Change_Node( |
171 private case class Change_Node( |
172 name: String, |
172 name: String, |
173 doc_edits: List[Document.Edit_Command], |
173 doc_edits: List[Document.Edit_Command], |
174 previous: Document.Version, |
174 previous: Document.Version, |
175 version: Document.Version) |
175 version: Document.Version) |
334 reply(()) |
334 reply(()) |
335 |
335 |
336 case Interrupt if prover.isDefined => |
336 case Interrupt if prover.isDefined => |
337 prover.get.interrupt |
337 prover.get.interrupt |
338 |
338 |
339 case Init_Node(name, master_dir, header, text) if prover.isDefined => |
339 case Init_Node(name, master_dir, header, perspective, text) if prover.isDefined => |
340 // FIXME compare with existing node |
340 // FIXME compare with existing node |
341 handle_edits(name, master_dir, header, |
341 handle_edits(name, master_dir, header, |
342 List(Document.Node.Clear(), Document.Node.Edits(List(Text.Edit.insert(0, text))))) |
342 List(Document.Node.Clear(), |
|
343 Document.Node.Edits(List(Text.Edit.insert(0, text))), |
|
344 Document.Node.Perspective(perspective))) |
343 reply(()) |
345 reply(()) |
344 |
346 |
345 case Edit_Node(name, master_dir, header, text_edits) if prover.isDefined => |
347 case Edit_Node(name, master_dir, header, perspective, text_edits) if prover.isDefined => |
346 handle_edits(name, master_dir, header, List(Document.Node.Edits(text_edits))) |
348 handle_edits(name, master_dir, header, |
|
349 List(Document.Node.Edits(text_edits), |
|
350 Document.Node.Perspective(perspective))) |
347 reply(()) |
351 reply(()) |
348 |
352 |
349 case change: Change_Node if prover.isDefined => |
353 case change: Change_Node if prover.isDefined => |
350 handle_change(change) |
354 handle_change(change) |
351 |
355 |
369 |
373 |
370 def stop() { command_change_buffer !? Stop; session_actor !? Stop } |
374 def stop() { command_change_buffer !? Stop; session_actor !? Stop } |
371 |
375 |
372 def interrupt() { session_actor ! Interrupt } |
376 def interrupt() { session_actor ! Interrupt } |
373 |
377 |
374 def init_node(name: String, master_dir: String, header: Document.Node_Header, text: String) |
378 // FIXME simplify signature |
375 { session_actor !? Init_Node(name, master_dir, header, text) } |
379 def init_node(name: String, master_dir: String, |
376 |
380 header: Document.Node_Header, perspective: Text.Perspective, text: String) |
377 def edit_node(name: String, master_dir: String, header: Document.Node_Header, edits: List[Text.Edit]) |
381 { session_actor !? Init_Node(name, master_dir, header, perspective, text) } |
378 { session_actor !? Edit_Node(name, master_dir, header, edits) } |
382 |
|
383 // FIXME simplify signature |
|
384 def edit_node(name: String, master_dir: String, header: Document.Node_Header, |
|
385 perspective: Text.Perspective, edits: List[Text.Edit]) |
|
386 { session_actor !? Edit_Node(name, master_dir, header, perspective, edits) } |
379 } |
387 } |