src/Tools/Graphview/mutator_event.scala
author wenzelm
Sat, 23 May 2015 17:19:37 +0200
changeset 60299 5ae2a2e74c93
parent 59442 9f45b95d3543
child 61590 94ab348eaab2
permissions -rw-r--r--
clarified NEWS: document_files are officially required since Isabelle2014, but the absence was tolerated as legacy feature;

/*  Title:      Tools/Graphview/mutator_event.scala
    Author:     Markus Kaiser, TU Muenchen
    Author:     Makarius

Events for dialog synchronization.
*/

package isabelle.graphview


import isabelle._


object Mutator_Event
{
  sealed abstract class Message
  case class Add(m: Mutator.Info) extends Message
  case class New_List(m: List[Mutator.Info]) extends Message

  type Receiver = PartialFunction[Message, Unit]

  class Bus
  {
    private val receivers = Synchronized(List.empty[Receiver])

    def += (r: Receiver) { receivers.change(Library.insert(r)) }
    def -= (r: Receiver) { receivers.change(Library.remove(r)) }
    def event(x: Message) { receivers.value.reverse.foreach(r => r(x)) }
  }
}