src/Tools/jEdit/src/output_dockable.scala
author wenzelm
Wed, 07 Sep 2011 21:38:48 +0200
changeset 44805 48a5c104d434
parent 44608 76c2e3ddc183
child 45666 d83797ef0d2d
permissions -rw-r--r--
clarified terminology;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43282
5d294220ca43 moved sources -- eliminated Netbeans artifact of jedit package directory;
wenzelm
parents: 42978
diff changeset
     1
/*  Title:      Tools/jEdit/src/output_dockable.scala
36760
b82a698ef6c9 tuned headers;
wenzelm
parents: 36015
diff changeset
     2
    Author:     Makarius
b82a698ef6c9 tuned headers;
wenzelm
parents: 36015
diff changeset
     3
b82a698ef6c9 tuned headers;
wenzelm
parents: 36015
diff changeset
     4
Dockable window with result message output.
b82a698ef6c9 tuned headers;
wenzelm
parents: 36015
diff changeset
     5
*/
34408
ad7b6c4813c8 added some headers and comments;
wenzelm
parents: 34406
diff changeset
     6
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
     8
34760
dc7f5e0d9d27 misc modernization of names;
wenzelm
parents: 34759
diff changeset
     9
36015
6111de7c916a adapted to Scala 2.8.0 Beta 1;
wenzelm
parents: 34871
diff changeset
    10
import isabelle._
6111de7c916a adapted to Scala 2.8.0 Beta 1;
wenzelm
parents: 34871
diff changeset
    11
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
    12
import scala.actors.Actor._
34760
dc7f5e0d9d27 misc modernization of names;
wenzelm
parents: 34759
diff changeset
    13
37017
cf6625012282 try CheckBox instead of ToggleButton, which is visually confusing without window focus, e.g. in a floating instance (problem of MacOS look-and-feel);
wenzelm
parents: 37014
diff changeset
    14
import scala.swing.{FlowPanel, Button, CheckBox}
36988
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
    15
import scala.swing.event.ButtonClicked
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
    16
43520
cec9b95fa35d explicit import java.lang.System to prevent odd scope problems;
wenzelm
parents: 43419
diff changeset
    17
import java.lang.System
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
    18
import java.awt.BorderLayout
37014
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
    19
import java.awt.event.{ComponentEvent, ComponentAdapter}
34748
a2ed621f5f52 reduced logging;
wenzelm
parents: 34747
diff changeset
    20
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    21
import org.gjt.sp.jedit.View
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
    22
34765
63ba7f0931e2 generic HTML_Panel -- specific Results_Dockable;
wenzelm
parents: 34760
diff changeset
    23
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
    24
class Output_Dockable(view: View, position: String) extends Dockable(view, position)
34760
dc7f5e0d9d27 misc modernization of names;
wenzelm
parents: 34759
diff changeset
    25
{
38223
2a368e8e0a80 more explicit treatment of Swing thread context;
wenzelm
parents: 38152
diff changeset
    26
  Swing_Thread.require()
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    27
39592
5638fe4f0843 tuned signature;
wenzelm
parents: 39518
diff changeset
    28
  private val html_panel =
43661
39fdbd814c7f quasi-static Isabelle_System -- reduced tendency towards "functorial style";
wenzelm
parents: 43520
diff changeset
    29
    new HTML_Panel(Isabelle.font_family(), scala.math.round(Isabelle.font_size()))
42978
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    30
  {
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    31
    override val handler: PartialFunction[HTML_Panel.Event, Unit] = {
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    32
      case HTML_Panel.Mouse_Click(elem, event) if elem.getClassName() == "sendback" =>
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    33
        val text = elem.getFirstChild().getNodeValue()
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    34
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    35
        Document_View(view.getTextArea) match {
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    36
          case Some(doc_view) =>
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    37
            val cmd = current_command.get
43419
6ed49c52d463 flush snapshot on falling edge of is_outdated -- recover effect of former buffer.propertiesChanged on text area (cf. f0770743b7ec);
wenzelm
parents: 43282
diff changeset
    38
            val start_ofs = doc_view.update_snapshot().node.command_start(cmd).get
42978
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    39
            val buffer = view.getBuffer
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    40
            buffer.beginCompoundEdit()
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    41
            buffer.remove(start_ofs, cmd.length)
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    42
            buffer.insert(start_ofs, text)
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    43
            buffer.endCompoundEdit()
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    44
          case None =>
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    45
        }
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    46
    }       
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    47
  }
6b41a075251f adhoc event handler to insert 'sendback' text into the buffer, replacing the original command
krauss
parents: 39592
diff changeset
    48
39518
wenzelm
parents: 39513
diff changeset
    49
  set_content(html_panel)
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
    50
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
    51
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    52
  /* component state -- owned by Swing thread */
36988
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
    53
37019
8f747cee4e27 zoom font size;
wenzelm
parents: 37017
diff changeset
    54
  private var zoom_factor = 100
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    55
  private var show_tracing = false
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    56
  private var follow_caret = true
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    57
  private var current_command: Option[Command] = None
37019
8f747cee4e27 zoom font size;
wenzelm
parents: 37017
diff changeset
    58
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    59
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    60
  private def handle_resize()
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    61
  {
37019
8f747cee4e27 zoom font size;
wenzelm
parents: 37017
diff changeset
    62
    Swing_Thread.now {
37164
8b4617ad1593 reuse main view.font from jEdit;
wenzelm
parents: 37132
diff changeset
    63
      html_panel.resize(Isabelle.font_family(),
8b4617ad1593 reuse main view.font from jEdit;
wenzelm
parents: 37132
diff changeset
    64
        scala.math.round(Isabelle.font_size() * zoom_factor / 100))
37019
8f747cee4e27 zoom font size;
wenzelm
parents: 37017
diff changeset
    65
    }
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    66
  }
36988
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
    67
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    68
  private def handle_perspective(): Boolean =
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    69
    Swing_Thread.now {
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    70
      Document_View(view.getTextArea) match {
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    71
        case Some(doc_view) =>
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    72
          val cmd = doc_view.selected_command()
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    73
          if (current_command == cmd) false
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    74
          else { current_command = cmd; true }
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    75
        case None => false
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    76
      }
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
    77
    }
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    78
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    79
  private def handle_update(restriction: Option[Set[Command]] = None)
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    80
  {
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    81
    Swing_Thread.now {
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
    82
      if (follow_caret) handle_perspective()
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    83
      Document_View(view.getTextArea) match {
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    84
        case Some(doc_view) =>
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    85
          current_command match {
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    86
            case Some(cmd) if !restriction.isDefined || restriction.get.contains(cmd) =>
43419
6ed49c52d463 flush snapshot on falling edge of is_outdated -- recover effect of former buffer.propertiesChanged on text area (cf. f0770743b7ec);
wenzelm
parents: 43282
diff changeset
    87
              val snapshot = doc_view.update_snapshot()
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    88
              val filtered_results =
44582
479c07072992 tuned signature;
wenzelm
parents: 43661
diff changeset
    89
                snapshot.command_state(cmd).results.iterator.map(_._2) filter {
39513
fce2202892c4 discontinued Output.debug, which belongs to early PGIP experiments (b6788dbd2ef9) and causes just too many problems (like spamming the message channel if it is used by more than one module);
wenzelm
parents: 38872
diff changeset
    90
                  case XML.Elem(Markup(Markup.TRACING, _), _) => show_tracing  // FIXME not scalable
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    91
                  case _ => true
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    92
                }
38872
26c505765024 Command.results: ordered by serial number;
wenzelm
parents: 38360
diff changeset
    93
              html_panel.render(filtered_results.toList)
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    94
            case _ =>
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    95
          }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    96
        case None =>
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    97
      }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    98
    }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
    99
  }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   100
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   101
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
   102
  /* main actor */
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   103
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
   104
  private val main_actor = actor {
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   105
    loop {
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   106
      react {
37019
8f747cee4e27 zoom font size;
wenzelm
parents: 37017
diff changeset
   107
        case Session.Global_Settings => handle_resize()
44608
76c2e3ddc183 tuned Commands_Changed: cover nodes as well;
wenzelm
parents: 44582
diff changeset
   108
        case changed: Session.Commands_Changed => handle_update(Some(changed.commands))
44805
48a5c104d434 clarified terminology;
wenzelm
parents: 44608
diff changeset
   109
        case Session.Caret_Focus => if (follow_caret && handle_perspective()) handle_update()
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
   110
        case bad => System.err.println("Output_Dockable: ignoring bad message " + bad)
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   111
      }
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   112
    }
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   113
  }
34428
d69fd18f37f9 basic setup of anti-aliasing, according to jEdit property;
wenzelm
parents: 34424
diff changeset
   114
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
   115
  override def init()
34777
91d6089cef88 class Session models full session, with or without prover process (cf. heaps, browser_info);
wenzelm
parents: 34775
diff changeset
   116
  {
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
   117
    Isabelle.session.global_settings += main_actor
37129
4c83696b340e Command.toString: include id for debugging;
wenzelm
parents: 37067
diff changeset
   118
    Isabelle.session.commands_changed += main_actor
44805
48a5c104d434 clarified terminology;
wenzelm
parents: 44608
diff changeset
   119
    Isabelle.session.caret_focus += main_actor
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   120
  }
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   121
37067
31093f3687b5 simplified dockables using class Dockable;
wenzelm
parents: 37048
diff changeset
   122
  override def exit()
34777
91d6089cef88 class Session models full session, with or without prover process (cf. heaps, browser_info);
wenzelm
parents: 34775
diff changeset
   123
  {
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
   124
    Isabelle.session.global_settings -= main_actor
37129
4c83696b340e Command.toString: include id for debugging;
wenzelm
parents: 37067
diff changeset
   125
    Isabelle.session.commands_changed -= main_actor
44805
48a5c104d434 clarified terminology;
wenzelm
parents: 44608
diff changeset
   126
    Isabelle.session.caret_focus -= main_actor
34768
d8d321af1478 back to low-level JPanel, required for addNotify/removeNotify;
wenzelm
parents: 34765
diff changeset
   127
  }
36988
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
   128
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
   129
37014
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   130
  /* resize */
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   131
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   132
  addComponentListener(new ComponentAdapter {
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
   133
    val delay = Swing_Thread.delay_last(Isabelle.session.update_delay) { handle_resize() }
37014
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   134
    override def componentResized(e: ComponentEvent) { delay() }
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   135
  })
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   136
1af0f718ffdc handle component resize for output / HTML panel;
wenzelm
parents: 36993
diff changeset
   137
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   138
  /* controls */
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   139
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   140
  private val zoom = new Library.Zoom_Box(factor => { zoom_factor = factor; handle_resize() })
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   141
  zoom.tooltip = "Zoom factor for basic font size"
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   142
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   143
  private val tracing = new CheckBox("Tracing") {
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   144
    reactions += { case ButtonClicked(_) => show_tracing = this.selected; handle_update() }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   145
  }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   146
  tracing.selected = show_tracing
37372
babe498016e8 tuned tooltips;
wenzelm
parents: 37164
diff changeset
   147
  tracing.tooltip = "Indicate output of tracing messages"
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   148
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
   149
  private val auto_update = new CheckBox("Auto update") {
37130
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   150
    reactions += { case ButtonClicked(_) => follow_caret = this.selected; handle_update() }
7f18edbbf618 more reactive message handling, notably for follow_caret mode;
wenzelm
parents: 37129
diff changeset
   151
  }
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
   152
  auto_update.selected = follow_caret
37372
babe498016e8 tuned tooltips;
wenzelm
parents: 37164
diff changeset
   153
  auto_update.tooltip = "Indicate automatic update following cursor movement"
36988
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
   154
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
   155
  private val update = new Button("Update") {
37849
4f9de312cc23 Session: predefined real time parameters;
wenzelm
parents: 37372
diff changeset
   156
    reactions += { case ButtonClicked(_) => handle_perspective(); handle_update() }
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
   157
  }
37372
babe498016e8 tuned tooltips;
wenzelm
parents: 37164
diff changeset
   158
  update.tooltip = "Update display according to the command at cursor position"
37131
d4697a30bd02 clarified auto_update vs. update;
wenzelm
parents: 37130
diff changeset
   159
39592
5638fe4f0843 tuned signature;
wenzelm
parents: 39518
diff changeset
   160
  private val controls = new FlowPanel(FlowPanel.Alignment.Right)(zoom, tracing, auto_update, update)
37039
d01da9438170 added checkboxes for debug/tracing filter;
wenzelm
parents: 37037
diff changeset
   161
  add(controls.peer, BorderLayout.NORTH)
d01da9438170 added checkboxes for debug/tracing filter;
wenzelm
parents: 37037
diff changeset
   162
36988
fd641bc85222 basic controls to freeze/update prover results;
wenzelm
parents: 36817
diff changeset
   163
  handle_update()
34318
c13e168a8ae6 original sources from Johannes Hölzl a48e0c6ab1aea77c52d596f7efc007a543d3d10c with minor modifications of directory layout;
wenzelm
parents:
diff changeset
   164
}