more basic tooltips;
authorwenzelm
Mon, 08 Oct 2012 12:02:32 +0200
changeset 50744f53a8f73b40f
parent 50743 74f36dab2b62
child 50745 e0d98ff3c0db
more basic tooltips;
src/Tools/Graphview/lib/Tools/graphview
src/Tools/Graphview/src/floating_dialog.scala
src/Tools/Graphview/src/graph_panel.scala
src/Tools/Graphview/src/graphview.scala
src/Tools/Graphview/src/main_panel.scala
src/Tools/Graphview/src/parameters.scala
src/Tools/Graphview/src/visualizer.scala
     1.1 --- a/src/Tools/Graphview/lib/Tools/graphview	Sun Oct 07 16:26:31 2012 +0200
     1.2 +++ b/src/Tools/Graphview/lib/Tools/graphview	Mon Oct 08 12:02:32 2012 +0200
     1.3 @@ -8,7 +8,6 @@
     1.4  ## sources
     1.5  
     1.6  declare -a SOURCES=(
     1.7 -  "src/floating_dialog.scala"
     1.8    "src/graph_panel.scala"
     1.9    "src/graphview.scala"
    1.10    "src/layout_pendulum.scala"
     2.1 --- a/src/Tools/Graphview/src/floating_dialog.scala	Sun Oct 07 16:26:31 2012 +0200
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,33 +0,0 @@
     2.4 -/*  Title:      Tools/Graphview/src/floating_dialog.scala
     2.5 -    Author:     Markus Kaiser, TU Muenchen
     2.6 -
     2.7 -PopUp Dialog containing node meta-information.
     2.8 -*/
     2.9 -
    2.10 -package isabelle.graphview
    2.11 -
    2.12 -
    2.13 -import isabelle._
    2.14 -
    2.15 -import scala.swing.{Dialog, BorderPanel, Component, TextArea}
    2.16 -import java.awt.{Font, Point, Dimension}
    2.17 -
    2.18 -
    2.19 -class Floating_Dialog(content: XML.Body, _title: String, _location: Point)
    2.20 -extends Dialog
    2.21 -{    
    2.22 -  location = _location
    2.23 -  title = _title
    2.24 -  //No adaptive size because we don't want to resize the Dialog about 1 sec
    2.25 -  //after it is shown.
    2.26 -  preferredSize = new Dimension(300, 300)
    2.27 -  peer.setAlwaysOnTop(true)
    2.28 -
    2.29 -  private val text_font = new Font(Parameters.font_family, Font.PLAIN, Parameters.font_size)
    2.30 -  private val text = new TextArea
    2.31 -  text.peer.setFont(text_font)
    2.32 -  text.editable = false
    2.33 -
    2.34 -  contents = new BorderPanel { add(text, BorderPanel.Position.Center) }
    2.35 -  text.text = Pretty.string_of(content, 76, Pretty.font_metric(text.peer.getFontMetrics(text_font)))
    2.36 -}
     3.1 --- a/src/Tools/Graphview/src/graph_panel.scala	Sun Oct 07 16:26:31 2012 +0200
     3.2 +++ b/src/Tools/Graphview/src/graph_panel.scala	Mon Oct 08 12:02:32 2012 +0200
     3.3 @@ -10,19 +10,30 @@
     3.4  
     3.5  import java.awt.{Dimension, Graphics2D, Point, Rectangle}
     3.6  import java.awt.geom.{AffineTransform, Point2D}
     3.7 -import javax.swing.ToolTipManager
     3.8 +import javax.swing.JScrollPane
     3.9 +
    3.10  import scala.swing.{Panel, ScrollPane}
    3.11  import scala.swing.event._
    3.12  
    3.13  
    3.14 -class Graph_Panel(private val vis: Visualizer) extends ScrollPane {
    3.15 -  this.peer.setWheelScrollingEnabled(false)
    3.16 +class Graph_Panel(vis: Visualizer, make_tooltip: XML.Body => String)
    3.17 +  extends ScrollPane
    3.18 +{
    3.19 +  private val panel = this
    3.20 +
    3.21 +  private var tooltip_content: XML.Body = Nil
    3.22 +
    3.23 +  override lazy val peer: JScrollPane = new JScrollPane with SuperMixin {
    3.24 +    override def getToolTipText(): String = make_tooltip(tooltip_content)
    3.25 +  }
    3.26 +
    3.27 +  peer.setWheelScrollingEnabled(false)
    3.28    focusable = true
    3.29    requestFocus()
    3.30    
    3.31    horizontalScrollBarPolicy = ScrollPane.BarPolicy.Always
    3.32    verticalScrollBarPolicy = ScrollPane.BarPolicy.Always
    3.33 -  
    3.34 +
    3.35    def visualizer = vis
    3.36    
    3.37    def fit_to_window() = {
    3.38 @@ -82,7 +93,6 @@
    3.39    }
    3.40    vis.model.Colors.events += r
    3.41    vis.model.Mutators.events += r
    3.42 -  ToolTipManager.sharedInstance.setDismissDelay(1000*60*60)
    3.43    
    3.44    apply_layout()
    3.45    fit_to_window()
    3.46 @@ -126,7 +136,6 @@
    3.47      }
    3.48    }
    3.49    
    3.50 -  private val panel = this
    3.51    object Interaction {
    3.52      object Keyboard {
    3.53        import scala.swing.event.Key._
    3.54 @@ -203,8 +212,8 @@
    3.55        def moved(at: Point) {
    3.56          val c = Transform.pane_to_graph_coordinates(at)
    3.57          node(c) match {
    3.58 -          case Some(l) => panel.tooltip = vis.Tooltip.text(l, g.getFontMetrics)
    3.59 -          case None => panel.tooltip = null
    3.60 +          case Some(l) => panel.tooltip = ""; panel.tooltip_content = vis.Tooltip.content(l)
    3.61 +          case None => panel.tooltip = null; panel.tooltip_content = Nil
    3.62          }
    3.63        }
    3.64        
    3.65 @@ -254,27 +263,9 @@
    3.66            menu.show(panel.peer, at.x, at.y)
    3.67          }
    3.68          
    3.69 -        def double_click() {
    3.70 -          p match {
    3.71 -            case Some(l) => {
    3.72 -                val p = at.clone.asInstanceOf[Point]
    3.73 -                SwingUtilities.convertPointToScreen(p, panel.peer)
    3.74 -                new Floating_Dialog(
    3.75 -                  vis.Tooltip.content(l),
    3.76 -                  vis.Caption(l),
    3.77 -                  at
    3.78 -                ).open
    3.79 -            }
    3.80 -            
    3.81 -            case None =>
    3.82 -          }          
    3.83 -        }
    3.84 -        
    3.85          if (clicks < 2) {
    3.86            if (SwingUtilities.isRightMouseButton(e.peer)) right_click()
    3.87            else left_click()
    3.88 -        } else if (clicks == 2) {
    3.89 -          if (SwingUtilities.isLeftMouseButton(e.peer)) double_click()
    3.90          }
    3.91        }   
    3.92  
     4.1 --- a/src/Tools/Graphview/src/graphview.scala	Sun Oct 07 16:26:31 2012 +0200
     4.2 +++ b/src/Tools/Graphview/src/graphview.scala	Mon Oct 08 12:02:32 2012 +0200
     4.3 @@ -12,6 +12,7 @@
     4.4  import java.awt.Dimension
     4.5  import scala.swing.{MainFrame, BorderPanel, Window, SwingApplication}
     4.6  import javax.swing.border.EmptyBorder
     4.7 +import javax.swing.ToolTipManager
     4.8  
     4.9  
    4.10  object Graphview extends SwingApplication
    4.11 @@ -24,6 +25,7 @@
    4.12          Platform.init_laf()
    4.13          Isabelle_System.init()
    4.14          Isabelle_System.install_fonts()
    4.15 +        ToolTipManager.sharedInstance.setDismissDelay(1000*60*60)
    4.16  
    4.17          args.toList match {
    4.18            case List(arg) =>
     5.1 --- a/src/Tools/Graphview/src/main_panel.scala	Sun Oct 07 16:26:31 2012 +0200
     5.2 +++ b/src/Tools/Graphview/src/main_panel.scala	Mon Oct 08 12:02:32 2012 +0200
     5.3 @@ -18,14 +18,25 @@
     5.4  import java.io.File
     5.5  
     5.6  
     5.7 -class Main_Panel(graph: Model.Graph) extends BorderPanel
     5.8 +class Main_Panel(graph: Model.Graph)
     5.9 +  extends BorderPanel
    5.10  {
    5.11 +  def make_tooltip(body: XML.Body): String =
    5.12 +  {
    5.13 +    if (body.isEmpty) null
    5.14 +    else {
    5.15 +      val txt = Pretty.string_of(body)
    5.16 +      "<html><pre style=\"font-family: " + Parameters.font_family + "; font-size: " +
    5.17 +          Parameters.tooltip_font_size + "px; \">" + HTML.encode(txt) + "</pre></html>"
    5.18 +    }
    5.19 +  }
    5.20 +
    5.21    focusable = true
    5.22    requestFocus()
    5.23    
    5.24    val model = new Model(graph)
    5.25    val visualizer = new Visualizer(model)
    5.26 -  val graph_panel = new Graph_Panel(visualizer)
    5.27 +  val graph_panel = new Graph_Panel(visualizer, make_tooltip)
    5.28    
    5.29    listenTo(keys)
    5.30    reactions += graph_panel.reactions
     6.1 --- a/src/Tools/Graphview/src/parameters.scala	Sun Oct 07 16:26:31 2012 +0200
     6.2 +++ b/src/Tools/Graphview/src/parameters.scala	Mon Oct 08 12:02:32 2012 +0200
     6.3 @@ -15,6 +15,8 @@
     6.4  {
     6.5    val font_family: String = "IsabelleText"
     6.6    val font_size: Int = 16
     6.7 +  val tooltip_font_size: Int = 10
     6.8 +
     6.9  
    6.10    object Colors {
    6.11      val Filter_Colors = List(
     7.1 --- a/src/Tools/Graphview/src/visualizer.scala	Sun Oct 07 16:26:31 2012 +0200
     7.2 +++ b/src/Tools/Graphview/src/visualizer.scala	Mon Oct 08 12:02:32 2012 +0200
     7.3 @@ -9,6 +9,7 @@
     7.4  import isabelle._
     7.5  
     7.6  import java.awt.{RenderingHints, Graphics2D}
     7.7 +import javax.swing.JComponent
     7.8  
     7.9  
    7.10  class Visualizer(val model: Model) {
    7.11 @@ -143,18 +144,8 @@
    7.12    
    7.13    object Tooltip {
    7.14      def content(name: String): XML.Body = model.complete.get_node(name).content
    7.15 +  }
    7.16  
    7.17 -    def text(name: String, fm: java.awt.FontMetrics): String = // null
    7.18 -    {
    7.19 -      val txt = Pretty.string_of(content(name), 76, Pretty.font_metric(fm))
    7.20 -      if (txt == "") null
    7.21 -      else
    7.22 -        "<html><pre style=\"font-family: " + Parameters.font_family + "; font-size: " +
    7.23 -            Parameters.font_size + "px; \">" +  // FIXME proper scaling (!?)
    7.24 -          HTML.encode(txt) + "</pre></html>"
    7.25 -    }
    7.26 -  }
    7.27 -  
    7.28    object Font {
    7.29      import java.awt.{Font => awtFont}
    7.30