basic controls to freeze/update prover results;
authorwenzelm
Wed, 19 May 2010 21:18:02 +0200
changeset 37003fd641bc85222
parent 37002 8af34e160968
child 37004 aaa7cac3e54a
basic controls to freeze/update prover results;
src/Tools/jEdit/src/jedit/output_dockable.scala
     1.1 --- a/src/Tools/jEdit/src/jedit/output_dockable.scala	Wed May 19 18:05:34 2010 +0200
     1.2 +++ b/src/Tools/jEdit/src/jedit/output_dockable.scala	Wed May 19 21:18:02 2010 +0200
     1.3 @@ -11,6 +11,9 @@
     1.4  
     1.5  import scala.actors.Actor._
     1.6  
     1.7 +import scala.swing.{FlowPanel, Button, ToggleButton}
     1.8 +import scala.swing.event.ButtonClicked
     1.9 +
    1.10  import javax.swing.JPanel
    1.11  import java.awt.{BorderLayout, Dimension}
    1.12  
    1.13 @@ -24,17 +27,45 @@
    1.14    if (position == DockableWindowManager.FLOATING)
    1.15      setPreferredSize(new Dimension(500, 250))
    1.16  
    1.17 +  val controls = new FlowPanel(FlowPanel.Alignment.Right)()
    1.18 +  add(controls.peer, BorderLayout.NORTH)
    1.19 +
    1.20    val html_panel = new HTML_Panel(Isabelle.system, Isabelle.font_size(), null)
    1.21    add(html_panel, BorderLayout.CENTER)
    1.22  
    1.23  
    1.24 +  /* controls */
    1.25 +
    1.26 +  private def handle_update()
    1.27 +  {
    1.28 +    Swing_Thread.now {
    1.29 +      Document_Model(view.getBuffer) match {
    1.30 +        case Some(model) =>
    1.31 +          model.recent_document.command_at(view.getTextArea.getCaretPosition) match {
    1.32 +            case Some((cmd, _)) => output_actor ! cmd
    1.33 +            case None =>
    1.34 +          }
    1.35 +        case None =>
    1.36 +      }
    1.37 +    }
    1.38 +  }
    1.39 +
    1.40 +  private val update = new Button("Update") {
    1.41 +    reactions += { case ButtonClicked(_) => handle_update() }
    1.42 +  }
    1.43 +
    1.44 +  private val freeze = new ToggleButton("Freeze")
    1.45 +
    1.46 +
    1.47    /* actor wiring */
    1.48  
    1.49    private val output_actor = actor {
    1.50      loop {
    1.51        react {
    1.52          case cmd: Command =>
    1.53 -          Swing_Thread.now { Document_Model(view.getBuffer) } match {
    1.54 +          Swing_Thread.now {
    1.55 +            if (freeze.selected) None else Document_Model(view.getBuffer)
    1.56 +          } match {
    1.57              case None =>
    1.58              case Some(model) =>
    1.59                val body = model.recent_document.current_state(cmd).map(_.results) getOrElse Nil
    1.60 @@ -42,7 +73,7 @@
    1.61            }
    1.62  
    1.63          case Session.Global_Settings => html_panel.init(Isabelle.font_size())
    1.64 -          
    1.65 +
    1.66          case bad => System.err.println("output_actor: ignoring bad message " + bad)
    1.67        }
    1.68      }
    1.69 @@ -61,4 +92,10 @@
    1.70      Isabelle.session.global_settings -= output_actor
    1.71      super.removeNotify()
    1.72    }
    1.73 +
    1.74 +
    1.75 +  /* init controls */
    1.76 +
    1.77 +  controls.contents ++= List(update, freeze)
    1.78 +  handle_update()
    1.79  }