src/Tools/Graphview/mutator_event.scala
author wenzelm
Mon, 20 May 2024 15:43:51 +0200
changeset 80182 29f2b8ff84f3
parent 78616 9acd819db33a
permissions -rw-r--r--
proper support for "isabelle update -D DIR": avoid accidental exclusion of select_dirs (amending e5dafe9e120f);

/*  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 {
  enum Message {
    case Add(m: Mutator.Info) extends Message
    case New_List(m: List[Mutator.Info]) extends Message
  }

  type Receiver = Message => Unit

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

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