src/Tools/Graphview/mutator_dialog.scala
author wenzelm
Fri, 01 Apr 2022 17:06:10 +0200
changeset 75393 87ebf5a50283
parent 73367 77ef8bef0593
child 75394 42267c650205
permissions -rw-r--r--
clarified formatting, for the sake of scala3;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59202
711c2446dc9d clarified source location;
wenzelm
parents: 55618
diff changeset
     1
/*  Title:      Tools/Graphview/mutator_dialog.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
59240
e411afcfaa29 tuned headers;
wenzelm
parents: 59229
diff changeset
     3
    Author:     Makarius
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     4
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     5
Mutator selection and configuration dialog.
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
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     8
package isabelle.graphview
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
     9
55618
995162143ef4 tuned imports;
wenzelm
parents: 50475
diff changeset
    10
49558
af7b652180d5 minimal component and build setup for graphview;
wenzelm
parents: 49557
diff changeset
    11
import isabelle._
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    12
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    13
import java.awt.Color
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    14
import java.awt.FocusTraversalPolicy
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    15
import javax.swing.JColorChooser
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    16
import javax.swing.border.EmptyBorder
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    17
import scala.swing.{Dialog, Button, BoxPanel, Swing, Orientation, ComboBox, Action,
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    18
  Dimension, BorderPanel, ScrollPane, Label, CheckBox, Alignment, Component, TextField}
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    19
import scala.swing.event.ValueChanged
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    20
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    21
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    22
class Mutator_Dialog(
59459
985fc55e9f27 clarified module name;
wenzelm
parents: 59391
diff changeset
    23
    graphview: Graphview,
50472
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50467
diff changeset
    24
    container: Mutator_Container,
bad1a1ca61e1 separate instance of class Parameters for each Main_Panel -- avoid global program state;
wenzelm
parents: 50467
diff changeset
    25
    caption: String,
49733
38a68e6593be prefer synchronous Mutator_Event.Bus on Swing_Thread;
wenzelm
parents: 49565
diff changeset
    26
    reverse_caption: String = "Inverse",
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    27
    show_color_chooser: Boolean = true
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    28
) extends Dialog {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    29
  title = caption
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    30
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    31
  private var _panels: List[Mutator_Panel] = Nil
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    32
  private def panels = _panels
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    33
  private def panels_=(panels: List[Mutator_Panel]): Unit = {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    34
    _panels = panels
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    35
    paint_panels()
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    36
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    37
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    38
  container.events +=
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    39
    {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    40
      case Mutator_Event.Add(m) => add_panel(new Mutator_Panel(m))
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    41
      case Mutator_Event.New_List(ms) => panels = get_panels(ms)
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    42
    }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    43
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    44
  override def open(): Unit = {
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
    45
    if (!visible) panels = get_panels(container())
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73357
diff changeset
    46
    super.open()
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    47
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    48
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    49
  minimumSize = new Dimension(700, 200)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    50
  preferredSize = new Dimension(1000, 300)
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    51
  peer.setFocusTraversalPolicy(Focus_Traveral_Policy)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    52
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
    53
  private def get_panels(m: List[Mutator.Info]): List[Mutator_Panel] =
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
    54
    m.filter({ case Mutator.Info(_, _, Mutator.Identity()) => false case _ => true })
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    55
    .map(m => new Mutator_Panel(m))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    56
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
    57
  private def get_mutators(panels: List[Mutator_Panel]): List[Mutator.Info] =
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
    58
    panels.map(panel => panel.get_mutator)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    59
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    60
  private def movePanelUp(m: Mutator_Panel) = {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    61
    def moveUp(l: List[Mutator_Panel]): List[Mutator_Panel] =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    62
      l match {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    63
        case x :: y :: xs => if (y == m) y :: x :: xs else x :: moveUp(y :: xs)
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    64
        case _ => l
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    65
      }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    66
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    67
    panels = moveUp(panels)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    68
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    69
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    70
  private def movePanelDown(m: Mutator_Panel) = {
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    71
    def moveDown(l: List[Mutator_Panel]): List[Mutator_Panel] =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    72
      l match {
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    73
        case x :: y :: xs => if (x == m) y :: x :: xs else x :: moveDown(y :: xs)
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    74
        case _ => l
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
    75
      }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    76
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    77
    panels = moveDown(panels)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    78
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    79
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    80
  private def removePanel(m: Mutator_Panel): Unit = {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    81
    panels = panels.filter(_ != m).toList
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    82
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    83
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    84
  private def add_panel(m: Mutator_Panel): Unit = {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    85
    panels = panels ::: List(m)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    86
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    87
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
    88
  def paint_panels(): Unit = {
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73357
diff changeset
    89
    Focus_Traveral_Policy.clear()
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73357
diff changeset
    90
    filter_panel.contents.clear()
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    91
    panels.map(x => {
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    92
        filter_panel.contents += x
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    93
        Focus_Traveral_Policy.addAll(x.focusList)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    94
      })
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    95
    filter_panel.contents += Swing.VGlue
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
    96
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    97
    Focus_Traveral_Policy.add(mutator_box.peer.asInstanceOf[java.awt.Component])
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    98
    Focus_Traveral_Policy.add(add_button.peer)
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
    99
    Focus_Traveral_Policy.add(apply_button.peer)
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
   100
    Focus_Traveral_Policy.add(cancel_button.peer)
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73357
diff changeset
   101
    filter_panel.revalidate()
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73357
diff changeset
   102
    filter_panel.repaint()
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   103
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   104
71601
97ccf48c2f0c misc tuning based on hints by IntelliJ IDEA;
wenzelm
parents: 71383
diff changeset
   105
  val filter_panel: BoxPanel = new BoxPanel(Orientation.Vertical) {}
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   106
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   107
  private val mutator_box = new ComboBox[Mutator](container.available)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   108
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
   109
  private val add_button = new Button {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   110
    action = Action("Add") {
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
   111
      add_panel(
73344
f5c147654661 tuned --- fewer warnings;
wenzelm
parents: 73340
diff changeset
   112
        new Mutator_Panel(Mutator.Info(true, graphview.Colors.next(), mutator_box.selection.item)))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   113
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   114
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   115
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   116
  private val apply_button = new Button {
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   117
    action = Action("Apply") { container(get_mutators(panels)) }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   118
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   119
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   120
  private val reset_button = new Button {
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   121
    action = Action("Reset") { panels = get_panels(container()) }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   122
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   123
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   124
  private val cancel_button = new Button {
73367
77ef8bef0593 clarified signature --- fewer warnings;
wenzelm
parents: 73357
diff changeset
   125
    action = Action("Close") { close() }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   126
  }
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   127
  defaultButton = cancel_button
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   128
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   129
  private val botPanel = new BoxPanel(Orientation.Horizontal) {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   130
    border = new EmptyBorder(10, 0, 0, 0)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   131
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   132
    contents += mutator_box
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   133
    contents += Swing.RigidBox(new Dimension(10, 0))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   134
    contents += add_button
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   135
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   136
    contents += Swing.HGlue
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   137
    contents += Swing.RigidBox(new Dimension(30, 0))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   138
    contents += apply_button
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   139
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   140
    contents += Swing.RigidBox(new Dimension(5, 0))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   141
    contents += reset_button
49557
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
    contents += Swing.RigidBox(new Dimension(5, 0))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   144
    contents += cancel_button
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   145
  }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
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
  contents = new BorderPanel {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   148
    border = new EmptyBorder(5, 5, 5, 5)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   149
59391
wenzelm
parents: 59246
diff changeset
   150
    layout(new ScrollPane(filter_panel)) = BorderPanel.Position.Center
wenzelm
parents: 59246
diff changeset
   151
    layout(botPanel) = BorderPanel.Position.South
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   152
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   153
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   154
  private class Mutator_Panel(initials: Mutator.Info)
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   155
  extends BoxPanel(Orientation.Horizontal) {
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   156
    private val inputs: List[(String, Input)] = get_inputs()
50467
wenzelm
parents: 50463
diff changeset
   157
    var focusList = List.empty[java.awt.Component]
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   158
    private val enabledBox = new Check_Box_Input("Enabled", initials.enabled)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   159
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   160
    border = new EmptyBorder(5, 5, 5, 5)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   161
    maximumSize = new Dimension(Integer.MAX_VALUE, 30)
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   162
    background = initials.color
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   163
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   164
    contents += new Label(initials.mutator.name) {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   165
      preferredSize = new Dimension(175, 20)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   166
      horizontalAlignment = Alignment.Left
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   167
      if (initials.mutator.description != "") tooltip = initials.mutator.description
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   168
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   169
    contents += Swing.RigidBox(new Dimension(10, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   170
    contents += enabledBox
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   171
    contents += Swing.RigidBox(new Dimension(5, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   172
    focusList = enabledBox.peer :: focusList
71383
8313dca6dee9 misc tuning, following hint by IntelliJ;
wenzelm
parents: 59459
diff changeset
   173
    inputs.map({
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   174
      case (n, c) =>
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   175
        contents += Swing.RigidBox(new Dimension(10, 0))
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   176
        if (n != "") {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   177
          contents += new Label(n)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   178
          contents += Swing.RigidBox(new Dimension(5, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   179
        }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   180
        contents += c.asInstanceOf[Component]
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
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
        focusList = c.asInstanceOf[Component].peer :: focusList
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   183
    })
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   184
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   185
    {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   186
      val t = this
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   187
      contents += Swing.HGlue
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   188
      contents += Swing.RigidBox(new Dimension(10, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   189
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   190
      if (show_color_chooser) {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   191
        contents += new Button {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   192
          maximumSize = new Dimension(20, 20)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   193
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   194
          action = Action("Color") {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   195
            t.background =
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   196
              JColorChooser.showDialog(t.peer, "Choose new Color", t.background)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   197
          }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   198
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   199
          focusList = this.peer :: focusList
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   200
        }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   201
        contents += Swing.RigidBox(new Dimension(2, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   202
      }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   203
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   204
      contents += new Button {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   205
        maximumSize = new Dimension(20, 20)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   206
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   207
        action = Action("Up") {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   208
          movePanelUp(t)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   209
        }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   210
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   211
        focusList = this.peer :: focusList
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   212
      }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   213
      contents += Swing.RigidBox(new Dimension(2, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   214
      contents += new Button {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   215
        maximumSize = new Dimension(20, 20)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   216
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   217
        action = Action("Down") {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   218
          movePanelDown(t)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   219
        }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   220
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   221
        focusList = this.peer :: focusList
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   222
      }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   223
      contents += Swing.RigidBox(new Dimension(2, 0))
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   224
      contents += new Button {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   225
        maximumSize = new Dimension(20, 20)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   226
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   227
        action = Action("Del") {
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   228
          removePanel(t)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   229
        }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   230
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   231
        focusList = this.peer :: focusList
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   232
      }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   233
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   234
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   235
    focusList = focusList.reverse
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   236
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   237
    def get_mutator: Mutator.Info = {
59459
985fc55e9f27 clarified module name;
wenzelm
parents: 59391
diff changeset
   238
      val model = graphview.model
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   239
      val m =
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   240
        initials.mutator match {
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   241
          case Mutator.Identity() =>
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   242
            Mutator.Identity()
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   243
          case Mutator.Node_Expression(r, _, _, _) =>
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   244
            val r1 = inputs(2)._2.string
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   245
            Mutator.Node_Expression(
59224
wenzelm
parents: 59223
diff changeset
   246
              if (Library.make_regex(r1).isDefined) r1 else r,
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   247
              inputs(3)._2.bool,
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   248
              // "Parents" means "Show parents" or "Matching Children"
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   249
              inputs(1)._2.bool,
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   250
              inputs(0)._2.bool)
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   251
          case Mutator.Node_List(_, _, _, _) =>
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   252
            Mutator.Node_List(
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   253
              for {
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   254
                ident <- space_explode(',', inputs(2)._2.string)
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   255
                node <- model.find_node(ident)
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   256
              } yield node,
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   257
              inputs(3)._2.bool,
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   258
              // "Parents" means "Show parents" or "Matching Children"
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   259
              inputs(1)._2.bool,
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   260
              inputs(0)._2.bool)
59246
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
   261
          case Mutator.Edge_Endpoints(_) =>
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   262
            (model.find_node(inputs(0)._2.string), model.find_node(inputs(1)._2.string)) match {
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   263
              case (Some(node1), Some(node2)) =>
59246
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
   264
                Mutator.Edge_Endpoints((node1, node2))
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   265
              case _ =>
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   266
                Mutator.Identity()
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   267
            }
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   268
          case Mutator.Add_Node_Expression(r) =>
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   269
            val r1 = inputs(0)._2.string
59224
wenzelm
parents: 59223
diff changeset
   270
            Mutator.Add_Node_Expression(if (Library.make_regex(r1).isDefined) r1 else r)
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   271
          case Mutator.Add_Transitive_Closure(_, _) =>
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   272
            Mutator.Add_Transitive_Closure(
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   273
              inputs(0)._2.bool,
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   274
              inputs(1)._2.bool)
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   275
          case _ =>
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   276
            Mutator.Identity()
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   277
        }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   278
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   279
      Mutator.Info(enabledBox.selected, background, m)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   280
    }
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   281
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   282
    private def get_inputs(): List[(String, Input)] =
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   283
      initials.mutator match {
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   284
        case Mutator.Node_Expression(regex, reverse, check_parents, check_children) =>
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   285
          List(
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   286
            ("", new Check_Box_Input("Parents", check_children)),
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   287
            ("", new Check_Box_Input("Children", check_parents)),
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   288
            ("Regex", new Text_Field_Input(regex, x => Library.make_regex(x).isDefined)),
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   289
            ("", new Check_Box_Input(reverse_caption, reverse)))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   290
        case Mutator.Node_List(list, reverse, check_parents, check_children) =>
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   291
          List(
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   292
            ("", new Check_Box_Input("Parents", check_children)),
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   293
            ("", new Check_Box_Input("Children", check_parents)),
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   294
            ("Names", new Text_Field_Input(list.map(_.ident).mkString(","))),
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   295
            ("", new Check_Box_Input(reverse_caption, reverse)))
59246
32903b99c2ef tuned signature;
wenzelm
parents: 59245
diff changeset
   296
        case Mutator.Edge_Endpoints((source, dest)) =>
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   297
          List(
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   298
            ("Source", new Text_Field_Input(source.ident)),
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 59240
diff changeset
   299
            ("Destination", new Text_Field_Input(dest.ident)))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   300
        case Mutator.Add_Node_Expression(regex) =>
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   301
          List(("Regex", new Text_Field_Input(regex, x => Library.make_regex(x).isDefined)))
59221
f779f83ef4ec tuned signature;
wenzelm
parents: 59218
diff changeset
   302
        case Mutator.Add_Transitive_Closure(parents, children) =>
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   303
          List(
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   304
            ("", new Check_Box_Input("Parents", parents)),
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   305
            ("", new Check_Box_Input("Children", children)))
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   306
        case _ => Nil
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   307
      }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   308
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   309
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   310
  private trait Input {
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   311
    def string: String
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   312
    def bool: Boolean
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   313
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   314
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   315
  private class Text_Field_Input(txt: String, check: String => Boolean = (_: String) => true)
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   316
  extends TextField(txt) with Input {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   317
    preferredSize = new Dimension(125, 18)
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   318
59228
56b34fc7a015 more dynamic visualizer -- re-use Isabelle/jEdit options;
wenzelm
parents: 59224
diff changeset
   319
    private val default_foreground = foreground
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   320
    reactions +=
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   321
      {
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   322
        case ValueChanged(_) =>
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   323
          foreground = if (check(text)) default_foreground else graphview.error_color
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   324
      }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   325
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   326
    def string = text
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   327
    def bool = true
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   328
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   329
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   330
  private class Check_Box_Input(txt: String, s: Boolean)
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   331
  extends CheckBox(txt) with Input {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   332
    selected = s
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   333
59229
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   334
    def string = ""
7b4b025b0599 tuned signature;
wenzelm
parents: 59228
diff changeset
   335
    def bool = selected
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   336
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   337
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   338
  private object Focus_Traveral_Policy extends FocusTraversalPolicy {
59222
74798d216b1f tuned signature;
wenzelm
parents: 59221
diff changeset
   339
    private var items = Vector.empty[java.awt.Component]
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   340
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 71601
diff changeset
   341
    def add(c: java.awt.Component): Unit = { items = items :+ c }
73357
31d4274f32de tuned --- fewer warnings;
wenzelm
parents: 73344
diff changeset
   342
    def addAll(cs: IterableOnce[java.awt.Component]): Unit = { items = items ++ cs }
73340
0ffcad1f6130 tuned --- fewer warnings;
wenzelm
parents: 71601
diff changeset
   343
    def clear(): Unit = { items = Vector.empty }
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   344
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   345
    def getComponentAfter(root: java.awt.Container, c: java.awt.Component): java.awt.Component = {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   346
      val i = items.indexOf(c)
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   347
      if (i < 0) getDefaultComponent(root)
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   348
      else items((i + 1) % items.length)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   349
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   350
75393
87ebf5a50283 clarified formatting, for the sake of scala3;
wenzelm
parents: 73367
diff changeset
   351
    def getComponentBefore(root: java.awt.Container, c: java.awt.Component): java.awt.Component = {
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   352
      val i = items.indexOf(c)
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   353
      if (i < 0) getDefaultComponent(root)
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   354
      else items((i - 1) % items.length)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   355
    }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   356
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   357
    def getFirstComponent(root: java.awt.Container): java.awt.Component =
71383
8313dca6dee9 misc tuning, following hint by IntelliJ;
wenzelm
parents: 59459
diff changeset
   358
      if (items.nonEmpty) items(0) else null
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   359
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   360
    def getDefaultComponent(root: java.awt.Container): java.awt.Component =
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   361
      getFirstComponent(root)
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   362
59218
eadd82d440b0 tuned whitespace;
wenzelm
parents: 59202
diff changeset
   363
    def getLastComponent(root: java.awt.Container): java.awt.Component =
71383
8313dca6dee9 misc tuning, following hint by IntelliJ;
wenzelm
parents: 59459
diff changeset
   364
      if (items.nonEmpty) items.last else null
49557
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   365
  }
61988f9df94d added Graphview tool, based on Isabelle/Scala and Swing/Graphics2D;
Markus Kaiser <markus.kaiser@in.tum.de>
parents:
diff changeset
   366
}