src/Tools/Graphview/src/visualizer.scala
author wenzelm
Tue, 11 Dec 2012 21:28:37 +0100
changeset 50476 1cb983bccb5b
parent 50475 8cc351df4a23
child 55618 995162143ef4
permissions -rw-r--r--
more official graphics context with font metrics;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     1
/*  Title:      Tools/Graphview/src/visualizer.scala
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     2
    Author:     Markus Kaiser, TU Muenchen
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     3
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
     4
Graph visualization parameters and interface state.
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     5
*/
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     6
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     7
package isabelle.graphview
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     8
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
     9
49565
ea4308b7ef0f ML support for generic graph display, with browser and graphview backends (via print modes);
wenzelm
parents: 49557
diff changeset
    10
import isabelle._
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    11
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
    12
50476
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    13
import java.awt.{Font, FontMetrics, Color => JColor, Shape, RenderingHints, Graphics2D}
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    14
import java.awt.image.BufferedImage
49729
f53a8f73b40f more basic tooltips;
wenzelm
parents: 49573
diff changeset
    15
import javax.swing.JComponent
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    16
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    17
50465
wenzelm
parents: 50464
diff changeset
    18
class Visualizer(val model: Model)
wenzelm
parents: 50464
diff changeset
    19
{
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50471
diff changeset
    20
  visualizer =>
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50471
diff changeset
    21
50476
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    22
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    23
  /* font rendering information */
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    24
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    25
  val font_family: String = "IsabelleText"
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    26
  val font_size: Int = 14
50476
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    27
  val font = new Font(font_family, Font.BOLD, font_size)
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    28
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    29
  val rendering_hints =
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    30
    new RenderingHints(
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    31
      RenderingHints.KEY_ANTIALIASING,
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    32
      RenderingHints.VALUE_ANTIALIAS_ON)
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    33
50476
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    34
  val gfx = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB).createGraphics
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    35
  gfx.setFont(font)
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    36
  gfx.setRenderingHints(rendering_hints)
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    37
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    38
  val font_metrics: FontMetrics = gfx.getFontMetrics(font)
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
    39
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    40
  val tooltip_font_size: Int = 10
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    41
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    42
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    43
  /* rendering parameters */
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    44
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    45
  val gap_x = 20
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    46
  val pad_x = 8
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    47
  val pad_y = 5
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    48
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    49
  var arrow_heads = false
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    50
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    51
  object Colors
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    52
  {
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    53
    private val filter_colors = List(
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    54
      new JColor(0xD9, 0xF2, 0xE2), // blue
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    55
      new JColor(0xFF, 0xE7, 0xD8), // orange
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    56
      new JColor(0xFF, 0xFF, 0xE5), // yellow
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    57
      new JColor(0xDE, 0xCE, 0xFF), // lilac
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    58
      new JColor(0xCC, 0xEB, 0xFF), // turquoise
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    59
      new JColor(0xFF, 0xE5, 0xE5), // red
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    60
      new JColor(0xE5, 0xE5, 0xD9)  // green
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    61
    )
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    62
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    63
    private var curr : Int = -1
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    64
    def next(): JColor =
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    65
    {
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    66
      curr = (curr + 1) % filter_colors.length
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    67
      filter_colors(curr)
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    68
    }
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    69
  }
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
    70
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50471
diff changeset
    71
50465
wenzelm
parents: 50464
diff changeset
    72
  object Coordinates
wenzelm
parents: 50464
diff changeset
    73
  {
50470
wenzelm
parents: 50467
diff changeset
    74
    private var layout = Layout_Pendulum.empty_layout
50465
wenzelm
parents: 50464
diff changeset
    75
wenzelm
parents: 50464
diff changeset
    76
    def apply(k: String): (Double, Double) =
50470
wenzelm
parents: 50467
diff changeset
    77
      layout.nodes.get(k) match {
50465
wenzelm
parents: 50464
diff changeset
    78
        case Some(c) => c
wenzelm
parents: 50464
diff changeset
    79
        case None => (0, 0)
wenzelm
parents: 50464
diff changeset
    80
      }
wenzelm
parents: 50464
diff changeset
    81
wenzelm
parents: 50464
diff changeset
    82
    def apply(e: (String, String)): List[(Double, Double)] =
50470
wenzelm
parents: 50467
diff changeset
    83
      layout.dummies.get(e) match {
50465
wenzelm
parents: 50464
diff changeset
    84
        case Some(ds) => ds
wenzelm
parents: 50464
diff changeset
    85
        case None => Nil
wenzelm
parents: 50464
diff changeset
    86
      }
wenzelm
parents: 50464
diff changeset
    87
wenzelm
parents: 50464
diff changeset
    88
    def reposition(k: String, to: (Double, Double))
wenzelm
parents: 50464
diff changeset
    89
    {
50470
wenzelm
parents: 50467
diff changeset
    90
      layout = layout.copy(nodes = layout.nodes + (k -> to))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    91
    }
50465
wenzelm
parents: 50464
diff changeset
    92
wenzelm
parents: 50464
diff changeset
    93
    def reposition(d: ((String, String), Int), to: (Double, Double))
wenzelm
parents: 50464
diff changeset
    94
    {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    95
      val (e, index) = d
50470
wenzelm
parents: 50467
diff changeset
    96
      layout.dummies.get(e) match {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    97
        case None =>
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    98
        case Some(ds) =>
50470
wenzelm
parents: 50467
diff changeset
    99
          layout = layout.copy(dummies =
wenzelm
parents: 50467
diff changeset
   100
            layout.dummies + (e ->
wenzelm
parents: 50467
diff changeset
   101
              (ds.zipWithIndex :\ List.empty[(Double, Double)]) {
wenzelm
parents: 50467
diff changeset
   102
                case ((t, i), n) => if (index == i) to :: n else t :: n
wenzelm
parents: 50467
diff changeset
   103
              }))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   104
      }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   105
    }
50465
wenzelm
parents: 50464
diff changeset
   106
wenzelm
parents: 50464
diff changeset
   107
    def translate(k: String, by: (Double, Double))
wenzelm
parents: 50464
diff changeset
   108
    {
wenzelm
parents: 50464
diff changeset
   109
      val ((x, y), (dx, dy)) = (Coordinates(k), by)
wenzelm
parents: 50464
diff changeset
   110
      reposition(k, (x + dx, y + dy))
wenzelm
parents: 50464
diff changeset
   111
    }
wenzelm
parents: 50464
diff changeset
   112
wenzelm
parents: 50464
diff changeset
   113
    def translate(d: ((String, String), Int), by: (Double, Double))
wenzelm
parents: 50464
diff changeset
   114
    {
wenzelm
parents: 50464
diff changeset
   115
      val ((e, i),(dx, dy)) = (d, by)
wenzelm
parents: 50464
diff changeset
   116
      val (x, y) = apply(e)(i)
wenzelm
parents: 50464
diff changeset
   117
      reposition(d, (x + dx, y + dy))
wenzelm
parents: 50464
diff changeset
   118
    }
wenzelm
parents: 50464
diff changeset
   119
50470
wenzelm
parents: 50467
diff changeset
   120
    def update_layout()
50465
wenzelm
parents: 50464
diff changeset
   121
    {
50474
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   122
      layout =
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   123
        if (model.current.is_empty) Layout_Pendulum.empty_layout
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   124
        else {
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   125
          val max_width =
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   126
            model.current.entries.map({ case (_, (info, _)) =>
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   127
              font_metrics.stringWidth(info.name).toDouble }).max
50476
1cb983bccb5b more official graphics context with font metrics;
wenzelm
parents: 50475
diff changeset
   128
          val box_distance = max_width + pad_x + gap_x
50474
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   129
          def box_height(n: Int): Double =
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
   130
            ((font_metrics.getAscent + font_metrics.getDescent + pad_y) * (5 max n)).toDouble
50474
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   131
          Layout_Pendulum(model.current, box_distance, box_height)
6ee044e2d1a7 initial layout coordinates more like old browser;
wenzelm
parents: 50472
diff changeset
   132
        }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   133
    }
50465
wenzelm
parents: 50464
diff changeset
   134
wenzelm
parents: 50464
diff changeset
   135
    def bounds(): (Double, Double, Double, Double) =
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   136
      model.visible_nodes().toList match {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   137
        case Nil => (0, 0, 0, 0)
50465
wenzelm
parents: 50464
diff changeset
   138
        case nodes =>
wenzelm
parents: 50464
diff changeset
   139
          val X: (String => Double) = (n => apply(n)._1)
wenzelm
parents: 50464
diff changeset
   140
          val Y: (String => Double) = (n => apply(n)._2)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   141
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   142
          (X(nodes.minBy(X)), Y(nodes.minBy(Y)),
50465
wenzelm
parents: 50464
diff changeset
   143
           X(nodes.maxBy(X)), Y(nodes.maxBy(Y)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   144
      }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   145
  }
50465
wenzelm
parents: 50464
diff changeset
   146
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   147
  object Drawer
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   148
  {
50465
wenzelm
parents: 50464
diff changeset
   149
    def apply(g: Graphics2D, n: Option[String])
wenzelm
parents: 50464
diff changeset
   150
    {
wenzelm
parents: 50464
diff changeset
   151
      n match {
wenzelm
parents: 50464
diff changeset
   152
        case None =>
wenzelm
parents: 50464
diff changeset
   153
        case Some(_) => Shapes.Growing_Node.paint(g, visualizer, n)
wenzelm
parents: 50464
diff changeset
   154
      }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   155
    }
50465
wenzelm
parents: 50464
diff changeset
   156
wenzelm
parents: 50464
diff changeset
   157
    def apply(g: Graphics2D, e: (String, String), head: Boolean, dummies: Boolean)
wenzelm
parents: 50464
diff changeset
   158
    {
wenzelm
parents: 50464
diff changeset
   159
      Shapes.Cardinal_Spline_Edge.paint(g, visualizer, e, head, dummies)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   160
    }
50465
wenzelm
parents: 50464
diff changeset
   161
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   162
    def paint_all_visible(g: Graphics2D, dummies: Boolean)
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   163
    {
50465
wenzelm
parents: 50464
diff changeset
   164
      g.setFont(font)
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   165
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   166
      g.setRenderingHints(rendering_hints)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   167
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   168
      model.visible_edges().foreach(e => {
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50474
diff changeset
   169
          apply(g, e, arrow_heads, dummies)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   170
        })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   171
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   172
      model.visible_nodes().foreach(l => {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   173
          apply(g, Some(l))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   174
        })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   175
    }
50465
wenzelm
parents: 50464
diff changeset
   176
wenzelm
parents: 50464
diff changeset
   177
    def shape(g: Graphics2D, n: Option[String]): Shape =
wenzelm
parents: 50464
diff changeset
   178
      n match {
wenzelm
parents: 50464
diff changeset
   179
        case None => Shapes.Dummy.shape(g, visualizer, None)
wenzelm
parents: 50464
diff changeset
   180
        case Some(_) => Shapes.Growing_Node.shape(g, visualizer, n)
wenzelm
parents: 50464
diff changeset
   181
      }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   182
  }
50465
wenzelm
parents: 50464
diff changeset
   183
wenzelm
parents: 50464
diff changeset
   184
  object Selection
wenzelm
parents: 50464
diff changeset
   185
  {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   186
    private var selected: List[String] = Nil
50465
wenzelm
parents: 50464
diff changeset
   187
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   188
    def apply() = selected
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   189
    def apply(s: String) = selected.contains(s)
50465
wenzelm
parents: 50464
diff changeset
   190
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   191
    def add(s: String) { selected = s :: selected }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   192
    def set(ss: List[String]) { selected = ss }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   193
    def clear() { selected = Nil }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   194
  }
50465
wenzelm
parents: 50464
diff changeset
   195
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   196
  object Color
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   197
  {
50465
wenzelm
parents: 50464
diff changeset
   198
    def apply(l: Option[String]): (JColor, JColor, JColor) =
wenzelm
parents: 50464
diff changeset
   199
      l match {
wenzelm
parents: 50464
diff changeset
   200
        case None => (JColor.GRAY, JColor.WHITE, JColor.BLACK)
wenzelm
parents: 50464
diff changeset
   201
        case Some(c) => {
wenzelm
parents: 50464
diff changeset
   202
            if (Selection(c))
wenzelm
parents: 50464
diff changeset
   203
              (JColor.BLUE, JColor.GREEN, JColor.BLACK)
wenzelm
parents: 50464
diff changeset
   204
            else
wenzelm
parents: 50464
diff changeset
   205
              (JColor.BLACK, model.colors.getOrElse(c, JColor.WHITE), JColor.BLACK)
wenzelm
parents: 50464
diff changeset
   206
        }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   207
      }
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   208
50465
wenzelm
parents: 50464
diff changeset
   209
    def apply(e: (String, String)): JColor = JColor.BLACK
wenzelm
parents: 50464
diff changeset
   210
  }
wenzelm
parents: 50464
diff changeset
   211
wenzelm
parents: 50464
diff changeset
   212
  object Caption
50464
37b53813426f tuned signature;
wenzelm
parents: 49736
diff changeset
   213
  {
50471
a5930c929b1e discontinued long names flag -- better done via entity markup, without affecting layout;
wenzelm
parents: 50470
diff changeset
   214
    def apply(key: String) = model.complete.get_node(key).name
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   215
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   216
}