src/Tools/Graphview/popups.scala
author wenzelm
Thu, 01 Jan 2015 11:37:09 +0100
changeset 59218 eadd82d440b0
parent 59202 711c2446dc9d
child 59221 f779f83ef4ec
permissions -rw-r--r--
tuned whitespace;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59202
711c2446dc9d clarified source location;
wenzelm
parents: 55618
diff changeset
     1
/*  Title:      Tools/Graphview/popups.scala
49557
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
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     4
PopupMenu generation for graph components.
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
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     9
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    10
import isabelle._
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    11
import isabelle.graphview.Mutators._
55618
995162143ef4 tuned imports;
wenzelm
parents: 50475
diff changeset
    12
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    13
import javax.swing.JPopupMenu
49558
af7b652180d5 minimal component and build setup for graphview;
wenzelm
parents: 49557
diff changeset
    14
import scala.swing.{Action, Menu, MenuItem, Separator}
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    15
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    16
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
    17
object Popups
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
    18
{
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    19
  def apply(panel: Graph_Panel, under_mouse: Option[String], selected: List[String]): JPopupMenu =
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    20
  {
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50472
diff changeset
    21
    val visualizer = panel.visualizer
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
    22
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50472
diff changeset
    23
    val add_mutator = visualizer.model.Mutators.add _
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50472
diff changeset
    24
    val curr = visualizer.model.current
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
    25
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    26
    def filter_context(ls: List[String], reverse: Boolean, caption: String, edges: Boolean) =
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    27
      new Menu(caption) {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    28
        contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    29
          new MenuItem(new Action("This") {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    30
            def apply =
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    31
              add_mutator(Mutators.create(visualizer, Node_List(ls, reverse, false, false)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    32
          })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    33
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    34
        contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    35
          new MenuItem(new Action("Family") {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    36
            def apply =
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    37
              add_mutator(Mutators.create(visualizer, Node_List(ls, reverse, true, true)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    38
          })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    39
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    40
        contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    41
          new MenuItem(new Action("Parents") {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    42
            def apply =
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    43
              add_mutator(Mutators.create(visualizer, Node_List(ls, reverse, false, true)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    44
          })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    45
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    46
        contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    47
          new MenuItem(new Action("Children") {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    48
            def apply =
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    49
              add_mutator(Mutators.create(visualizer, Node_List(ls, reverse, true, false)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    50
          })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    51
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    52
        if (edges) {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    53
          val outs =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    54
            ls.map(l => (l, curr.imm_succs(l)))  // FIXME iterator
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    55
              .filter(_._2.size > 0).sortBy(_._1)
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    56
          val ins =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    57
            ls.map(l => (l, curr.imm_preds(l)))  // FIXME iterator
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    58
              .filter(_._2.size > 0).sortBy(_._1)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    59
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    60
          if (outs.nonEmpty || ins.nonEmpty) {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    61
            contents += new Separator()
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    62
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    63
            contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    64
              new Menu("Edge") {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    65
                if (outs.nonEmpty) {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    66
                  contents += new MenuItem("From...") { enabled = false }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    67
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    68
                  outs.map(e => {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    69
                    val (from, tos) = e
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    70
                    contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    71
                      new Menu(from) {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    72
                        contents += new MenuItem("To...") { enabled = false }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    73
  
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    74
                        tos.toList.sorted.distinct.map(to => {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    75
                          contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    76
                            new MenuItem(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    77
                              new Action(to) {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    78
                                def apply =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    79
                                  add_mutator(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    80
                                    Mutators.create(visualizer, Edge_Endpoints(from, to))
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    81
                                  )
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    82
                              })
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    83
                        })
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    84
                      }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    85
                  })
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    86
                }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    87
                if (outs.nonEmpty && ins.nonEmpty) { contents += new Separator() }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    88
                if (ins.nonEmpty) {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    89
                  contents += new MenuItem("To...") { enabled = false }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    90
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    91
                  ins.map(e => {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    92
                    val (to, froms) = e
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    93
                    contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    94
                      new Menu(to) {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    95
                        contents += new MenuItem("From...") { enabled = false }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    96
  
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    97
                        froms.toList.sorted.distinct.map(from => {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    98
                          contents +=
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    99
                            new MenuItem(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   100
                              new Action(from) {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   101
                                def apply =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   102
                                  add_mutator(Mutators.create(visualizer, Edge_Endpoints(from, to)))
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   103
                              })
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   104
                        })
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   105
                      }
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   106
                  })
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   107
                }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   108
              }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   109
          }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   110
        }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   111
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   112
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   113
    val popup = new JPopupMenu()
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   114
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   115
    popup.add(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   116
      new MenuItem(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   117
        new Action("Remove all filters") {
50475
8cc351df4a23 just one class with parameters;
wenzelm
parents: 50472
diff changeset
   118
          def apply = visualizer.model.Mutators(Nil)
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   119
        }).peer)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   120
    popup.add(new JPopupMenu.Separator)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   121
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   122
    if (under_mouse.isDefined) {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   123
      val v = under_mouse.get
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   124
      popup.add(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   125
        new MenuItem("Mouseover: %s".format(visualizer.Caption(v))) { enabled = false }.peer)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   126
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   127
      popup.add(filter_context(List(v), true, "Hide", true).peer)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   128
      popup.add(filter_context(List(v), false, "Show only", false).peer)
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
   129
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
   130
      popup.add(new JPopupMenu.Separator)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   131
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   132
    if (!selected.isEmpty) {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   133
      val text =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   134
        if (selected.length > 1) "Multiple"
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   135
        else visualizer.Caption(selected.head)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   136
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   137
      popup.add(new MenuItem("Selected: %s".format(text)) { enabled = false }.peer)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   138
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   139
      popup.add(filter_context(selected, true, "Hide", true).peer)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   140
      popup.add(filter_context(selected, false, "Show only", false).peer)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   141
      popup.add(new JPopupMenu.Separator)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   142
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   143
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   144
    popup.add(
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   145
      new MenuItem(new Action("Fit to Window") { def apply = panel.fit_to_window() }).peer)
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50463
diff changeset
   146
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   147
    popup
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   148
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   149
}