src/Tools/jEdit/src/pretty_tooltip.scala
author wenzelm
Thu, 04 Oct 2012 20:14:40 +0200
changeset 49702 696e91c0bc80
child 49703 c89fffb11769
permissions -rw-r--r--
separate module Pretty_Tooltip;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49702
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/pretty_tooltip.scala
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     3
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     4
Enhanced tooltip window based on Pretty_Text_Area.
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     5
*/
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     6
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     8
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
     9
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    10
import isabelle._
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    11
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    12
import java.awt.{Color, Point, BorderLayout}
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    13
import java.awt.event.{WindowEvent, WindowAdapter}
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    14
import javax.swing.{SwingUtilities, JWindow, JPanel}
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    15
import javax.swing.border.LineBorder
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    16
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    17
import org.gjt.sp.jedit.View
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    18
import org.gjt.sp.jedit.textarea.TextArea
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    19
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    20
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    21
class Pretty_Tooltip(
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    22
  view: View,
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    23
  text_area: TextArea,
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    24
  rendering: Isabelle_Rendering,
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    25
  x: Int, y: Int, body: XML.Body) extends JWindow(view)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    26
{
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    27
  private val painter = text_area.getPainter
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    28
  private val fm = painter.getFontMetrics
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    29
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    30
  private val point = {
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    31
    val bounds = painter.getBounds()
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    32
    val point = new Point(bounds.x + x, bounds.y + fm.getHeight + y)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    33
    SwingUtilities.convertPointToScreen(point, painter)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    34
    point
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    35
  }
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    36
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    37
  val pretty_text_area = new Pretty_Text_Area(view)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    38
  pretty_text_area.resize(
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    39
    Isabelle.font_family(), Isabelle.font_size("jedit_tooltip_font_scale").round)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    40
  pretty_text_area.update(rendering.snapshot, body)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    41
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    42
  addWindowFocusListener(new WindowAdapter {
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    43
    override def windowLostFocus(e: WindowEvent) { dispose() }
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    44
  })
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    45
  setContentPane(new JPanel(new BorderLayout) {
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    46
    override def getFocusTraversalKeysEnabled(): Boolean = false
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    47
  })
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    48
  getRootPane.setBorder(new LineBorder(Color.BLACK))
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    49
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    50
  add(pretty_text_area)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    51
  setSize(fm.charWidth(Pretty.spc) * Isabelle.options.int("jedit_tooltip_margin"), 100)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    52
  setLocation(point.x, point.y)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    53
  setVisible(true)
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    54
}
696e91c0bc80 separate module Pretty_Tooltip;
wenzelm
parents:
diff changeset
    55