src/Tools/jEdit/src/syslog_dockable.scala
author wenzelm
Mon, 28 Apr 2014 16:17:07 +0200
changeset 56775 59f70b89e5fd
parent 56715 52125652e82a
child 57612 990ffb84489b
permissions -rw-r--r--
improved syslog performance -- avoid denial-of-service e.g. with threads_trace = 5 and active Syslog dockable;

/*  Title:      Tools/jEdit/src/syslog_dockable.scala
    Author:     Makarius

Dockable window for syslog.
*/

package isabelle.jedit


import isabelle._

import scala.swing.{TextArea, ScrollPane}

import org.gjt.sp.jedit.View


class Syslog_Dockable(view: View, position: String) extends Dockable(view, position)
{
  /* GUI components */

  private val syslog = new TextArea()

  private def syslog_delay = Swing_Thread.delay_first(PIDE.options.seconds("editor_update_delay"))
  {
    val text = PIDE.session.syslog_content()
    if (text != syslog.text) syslog.text = text
  }

  set_content(new ScrollPane(syslog))


  /* main */

  private val main =
    Session.Consumer[Prover.Output](getClass.getName) { case _ => syslog_delay.invoke() }

  override def init()
  {
    PIDE.session.syslog_messages += main
    syslog_delay.invoke()
  }

  override def exit()
  {
    PIDE.session.syslog_messages -= main
  }
}