src/Tools/Graphview/src/mutator_event.scala
author blanchet
Mon, 26 Nov 2012 13:35:05 +0100
changeset 50222 40e3c3be6bca
parent 49733 38a68e6593be
child 56662 f373fb77e0a4
permissions -rw-r--r--
added file headers

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

Events for dialog synchronization.
*/

package isabelle.graphview


import isabelle._

import scala.collection.mutable

import java.awt.Color


object Mutator_Event
{
  type Mutator_Markup = (Boolean, Color, Mutator)

  sealed abstract class Message
  case class Add(m: Mutator_Markup) extends Message
  case class NewList(m: List[Mutator_Markup]) extends Message

  type Receiver = PartialFunction[Message, Unit]

  class Bus
  {
    private val receivers = new mutable.ListBuffer[Receiver]

    def += (r: Receiver) { Swing_Thread.require(); receivers += r }
    def -= (r: Receiver) { Swing_Thread.require(); receivers -= r }
    def event(x: Message) { Swing_Thread.require(); receivers.foreach(r => r(x)) }
  }
}