src/Tools/jEdit/src/jedit/output_dockable.scala
changeset 37067 31093f3687b5
parent 37048 d014976dd690
child 37129 4c83696b340e
equal deleted inserted replaced
37066:28e6cd90c1ea 37067:31093f3687b5
    12 import scala.actors.Actor._
    12 import scala.actors.Actor._
    13 
    13 
    14 import scala.swing.{FlowPanel, Button, CheckBox}
    14 import scala.swing.{FlowPanel, Button, CheckBox}
    15 import scala.swing.event.ButtonClicked
    15 import scala.swing.event.ButtonClicked
    16 
    16 
    17 import javax.swing.JPanel
    17 import java.awt.BorderLayout
    18 import java.awt.{BorderLayout, Dimension}
       
    19 import java.awt.event.{ComponentEvent, ComponentAdapter}
    18 import java.awt.event.{ComponentEvent, ComponentAdapter}
    20 
    19 
    21 import org.gjt.sp.jedit.View
    20 import org.gjt.sp.jedit.View
    22 import org.gjt.sp.jedit.gui.DockableWindowManager
       
    23 
    21 
    24 
    22 
    25 
    23 class Output_Dockable(view: View, position: String) extends Dockable(view, position)
    26 class Output_Dockable(view: View, position: String) extends JPanel(new BorderLayout)
       
    27 {
    24 {
    28   if (position == DockableWindowManager.FLOATING)
       
    29     setPreferredSize(new Dimension(500, 250))
       
    30 
       
    31   val html_panel = new HTML_Panel(Isabelle.system, scala.math.round(Isabelle.font_size()))
    25   val html_panel = new HTML_Panel(Isabelle.system, scala.math.round(Isabelle.font_size()))
    32   add(html_panel, BorderLayout.CENTER)
    26   add(html_panel, BorderLayout.CENTER)
    33 
    27 
    34 
    28 
    35   /* controls */
    29   /* controls */
    79       Document_Model(view.getBuffer) match {
    73       Document_Model(view.getBuffer) match {
    80         case Some(model) =>
    74         case Some(model) =>
    81           val document = model.recent_document
    75           val document = model.recent_document
    82           document.command_at(view.getTextArea.getCaretPosition) match {
    76           document.command_at(view.getTextArea.getCaretPosition) match {
    83             case Some((cmd, _)) =>
    77             case Some((cmd, _)) =>
    84               output_actor ! Render(filtered_results(document, cmd))
    78               main_actor ! Render(filtered_results(document, cmd))
    85             case None =>
    79             case None =>
    86           }
    80           }
    87         case None =>
    81         case None =>
    88       }
    82       }
    89     }
    83     }
    95     Swing_Thread.now {
    89     Swing_Thread.now {
    96       html_panel.resize(scala.math.round(Isabelle.font_size() * zoom_factor / 100))
    90       html_panel.resize(scala.math.round(Isabelle.font_size() * zoom_factor / 100))
    97     }
    91     }
    98 
    92 
    99 
    93 
   100   /* actor wiring */
    94   /* main actor */
   101 
    95 
   102   private val output_actor = actor {
    96   private val main_actor = actor {
   103     loop {
    97     loop {
   104       react {
    98       react {
   105         case Session.Global_Settings => handle_resize()
    99         case Session.Global_Settings => handle_resize()
   106         case Render(body) => html_panel.render(body)
   100         case Render(body) => html_panel.render(body)
   107 
   101 
   112             case None =>
   106             case None =>
   113             case Some(model) =>
   107             case Some(model) =>
   114               html_panel.render(filtered_results(model.recent_document, cmd))
   108               html_panel.render(filtered_results(model.recent_document, cmd))
   115           }
   109           }
   116 
   110 
   117         case bad => System.err.println("output_actor: ignoring bad message " + bad)
   111         case bad => System.err.println("Output_Dockable: ignoring bad message " + bad)
   118       }
   112       }
   119     }
   113     }
   120   }
   114   }
   121 
   115 
   122   override def addNotify()
   116   override def init()
   123   {
   117   {
   124     super.addNotify()
   118     Isabelle.session.results += main_actor
   125     Isabelle.session.results += output_actor
   119     Isabelle.session.global_settings += main_actor
   126     Isabelle.session.global_settings += output_actor
       
   127   }
   120   }
   128 
   121 
   129   override def removeNotify()
   122   override def exit()
   130   {
   123   {
   131     Isabelle.session.results -= output_actor
   124     Isabelle.session.results -= main_actor
   132     Isabelle.session.global_settings -= output_actor
   125     Isabelle.session.global_settings -= main_actor
   133     super.removeNotify()
       
   134   }
   126   }
   135 
   127 
   136 
   128 
   137   /* resize */
   129   /* resize */
   138 
   130