src/Tools/jEdit/src/active.scala
author wenzelm
Fri, 23 Dec 2016 16:20:42 +0100
changeset 64664 951507563033
parent 63681 d2448471ffba
child 64882 c3b42ac0cf81
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50450
358b6020f8b6 generalized notion of active area, where sendback is just one application;
wenzelm
parents: 50341
diff changeset
     1
/*  Title:      Tools/jEdit/src/active.scala
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     3
50450
358b6020f8b6 generalized notion of active area, where sendback is just one application;
wenzelm
parents: 50341
diff changeset
     4
Active areas within the document.
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     5
*/
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     6
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     8
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
     9
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    10
import isabelle._
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    11
49493
db58490a68ac more realistic sendback: pick exec_id from message position and text from buffer;
wenzelm
parents: 49492
diff changeset
    12
import org.gjt.sp.jedit.View
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    13
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    14
50450
358b6020f8b6 generalized notion of active area, where sendback is just one application;
wenzelm
parents: 50341
diff changeset
    15
object Active
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    16
{
50450
358b6020f8b6 generalized notion of active area, where sendback is just one application;
wenzelm
parents: 50341
diff changeset
    17
  def action(view: View, text: String, elem: XML.Elem)
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    18
  {
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 57594
diff changeset
    19
    GUI_Thread.require {}
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    20
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    21
    Document_View(view.getTextArea) match {
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    22
      case Some(doc_view) =>
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    23
        doc_view.rich_text_area.robust_body() {
50215
97959912840a more general sendback properties;
wenzelm
parents: 50195
diff changeset
    24
          val text_area = doc_view.text_area
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    25
          val model = doc_view.model
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    26
          val buffer = model.buffer
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    27
          val snapshot = model.snapshot()
49493
db58490a68ac more realistic sendback: pick exec_id from message position and text from buffer;
wenzelm
parents: 49492
diff changeset
    28
50164
77668b522ffe some support for implicit senback, meaning that it uses the caret position instead of explicit command exec_id;
wenzelm
parents: 49493
diff changeset
    29
          if (!snapshot.is_outdated) {
50715
8cfd585b9162 prefer old graph browser in Isabelle/jEdit, which still produces better layout;
wenzelm
parents: 50500
diff changeset
    30
            // FIXME avoid hard-wired stuff
50450
358b6020f8b6 generalized notion of active area, where sendback is just one application;
wenzelm
parents: 50341
diff changeset
    31
            elem match {
50715
8cfd585b9162 prefer old graph browser in Isabelle/jEdit, which still produces better layout;
wenzelm
parents: 50500
diff changeset
    32
              case XML.Elem(Markup(Markup.BROWSER, _), body) =>
61557
f6387515f951 prefer ad-hoc non-worker threads;
wenzelm
parents: 60992
diff changeset
    33
                Standard_Thread.fork("browser") {
56729
1da2272a06a4 prefer Isabelle/Scala operations;
wenzelm
parents: 56662
diff changeset
    34
                  val graph_file = Isabelle_System.tmp_file("graph")
1da2272a06a4 prefer Isabelle/Scala operations;
wenzelm
parents: 56662
diff changeset
    35
                  File.write(graph_file, XML.content(body))
62609
wenzelm
parents: 62589
diff changeset
    36
                  Isabelle_System.bash("isabelle browser -c " + File.bash_path(graph_file) + " &")
56729
1da2272a06a4 prefer Isabelle/Scala operations;
wenzelm
parents: 56662
diff changeset
    37
                }
50715
8cfd585b9162 prefer old graph browser in Isabelle/jEdit, which still produces better layout;
wenzelm
parents: 50500
diff changeset
    38
8cfd585b9162 prefer old graph browser in Isabelle/jEdit, which still produces better layout;
wenzelm
parents: 50500
diff changeset
    39
              case XML.Elem(Markup(Markup.GRAPHVIEW, _), body) =>
61557
f6387515f951 prefer ad-hoc non-worker threads;
wenzelm
parents: 60992
diff changeset
    40
                Standard_Thread.fork("graphview") {
56729
1da2272a06a4 prefer Isabelle/Scala operations;
wenzelm
parents: 56662
diff changeset
    41
                  val graph =
59245
be4180f3c236 more formal Graph_Display.Node (with ordering) and Graph_Display.Edge;
wenzelm
parents: 58525
diff changeset
    42
                    Exn.capture { Graph_Display.decode_graph(body).transitive_reduction_acyclic }
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 57594
diff changeset
    43
                  GUI_Thread.later { Graphview_Dockable(view, snapshot, graph) }
56729
1da2272a06a4 prefer Isabelle/Scala operations;
wenzelm
parents: 56662
diff changeset
    44
                }
50450
358b6020f8b6 generalized notion of active area, where sendback is just one application;
wenzelm
parents: 50341
diff changeset
    45
63681
d2448471ffba active jEdit actions;
wenzelm
parents: 63508
diff changeset
    46
              case XML.Elem(Markup(Markup.JEDIT_ACTION, _), body) =>
d2448471ffba active jEdit actions;
wenzelm
parents: 63508
diff changeset
    47
                GUI_Thread.later {
d2448471ffba active jEdit actions;
wenzelm
parents: 63508
diff changeset
    48
                  view.getInputHandler.invokeAction(XML.content(body))
d2448471ffba active jEdit actions;
wenzelm
parents: 63508
diff changeset
    49
                }
d2448471ffba active jEdit actions;
wenzelm
parents: 63508
diff changeset
    50
57878
51a2f9140175 follow link to originating command, to ensure that Simplifier_Trace_Dockable displays its results (via current_command);
wenzelm
parents: 57612
diff changeset
    51
              case XML.Elem(Markup(Markup.SIMP_TRACE_PANEL, props), _) =>
51a2f9140175 follow link to originating command, to ensure that Simplifier_Trace_Dockable displays its results (via current_command);
wenzelm
parents: 57612
diff changeset
    52
                val link =
51a2f9140175 follow link to originating command, to ensure that Simplifier_Trace_Dockable displays its results (via current_command);
wenzelm
parents: 57612
diff changeset
    53
                  props match {
64664
wenzelm
parents: 63681
diff changeset
    54
                    case Position.Id(id) => PIDE.editor.hyperlink_command(true, snapshot, id)
57878
51a2f9140175 follow link to originating command, to ensure that Simplifier_Trace_Dockable displays its results (via current_command);
wenzelm
parents: 57612
diff changeset
    55
                    case _ => None
51a2f9140175 follow link to originating command, to ensure that Simplifier_Trace_Dockable displays its results (via current_command);
wenzelm
parents: 57612
diff changeset
    56
                  }
57612
990ffb84489b clarified module name: facilitate alternative GUI frameworks;
wenzelm
parents: 57594
diff changeset
    57
                GUI_Thread.later {
57878
51a2f9140175 follow link to originating command, to ensure that Simplifier_Trace_Dockable displays its results (via current_command);
wenzelm
parents: 57612
diff changeset
    58
                  link.foreach(_.follow(view))
57594
037f3b251df5 regular message to refer to Simplifier Trace panel (unused);
wenzelm
parents: 57593
diff changeset
    59
                  view.getDockableWindowManager.showDockableWindow("isabelle-simplifier-trace")
037f3b251df5 regular message to refer to Simplifier Trace panel (unused);
wenzelm
parents: 57593
diff changeset
    60
                }
037f3b251df5 regular message to refer to Simplifier Trace panel (unused);
wenzelm
parents: 57593
diff changeset
    61
50500
c94bba7906d2 identify dialogs via official serial and maintain as result message;
wenzelm
parents: 50498
diff changeset
    62
              case XML.Elem(Markup(Markup.SENDBACK, props), _) =>
58525
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    63
                if (buffer.isEditable) {
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    64
                  props match {
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    65
                    case Position.Id(id) =>
63508
348599644887 more structured edit, including indentation;
wenzelm
parents: 62609
diff changeset
    66
                      Isabelle.edit_command(snapshot, text_area,
60215
5fb4990dfc73 misc tuning, based on warnings by IntelliJ IDEA;
wenzelm
parents: 59245
diff changeset
    67
                        props.contains(Markup.PADDING_COMMAND), id, text)
58525
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    68
                    case _ =>
60215
5fb4990dfc73 misc tuning, based on warnings by IntelliJ IDEA;
wenzelm
parents: 59245
diff changeset
    69
                      if (props.contains(Markup.PADDING_LINE))
58525
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    70
                        Isabelle.insert_line_padding(text_area, text)
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    71
                      else text_area.setSelectedText(text)
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    72
                  }
f008ceb3b046 more buffer.isEditable checks;
wenzelm
parents: 57878
diff changeset
    73
                  text_area.requestFocus
50500
c94bba7906d2 identify dialogs via official serial and maintain as result message;
wenzelm
parents: 50498
diff changeset
    74
                }
c94bba7906d2 identify dialogs via official serial and maintain as result message;
wenzelm
parents: 50498
diff changeset
    75
52081
29566b6810f7 discontinued odd workaround for scala-2.9.2, which is hopefully obsolete in scala-2.10.x;
wenzelm
parents: 50715
diff changeset
    76
              case Protocol.Dialog(id, serial, result) =>
29566b6810f7 discontinued odd workaround for scala-2.9.2, which is hopefully obsolete in scala-2.10.x;
wenzelm
parents: 50715
diff changeset
    77
                model.session.dialog_result(id, serial, result)
29566b6810f7 discontinued odd workaround for scala-2.9.2, which is hopefully obsolete in scala-2.10.x;
wenzelm
parents: 50715
diff changeset
    78
50215
97959912840a more general sendback properties;
wenzelm
parents: 50195
diff changeset
    79
              case _ =>
50164
77668b522ffe some support for implicit senback, meaning that it uses the caret position instead of explicit command exec_id;
wenzelm
parents: 49493
diff changeset
    80
            }
49492
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    81
          }
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    82
        }
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    83
      case None =>
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    84
    }
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    85
  }
2e3e7ea5ce8e some support for hovering and sendback area;
wenzelm
parents:
diff changeset
    86
}