src/Tools/jEdit/src/document_dockable.scala
author wenzelm
Thu, 01 Sep 2022 10:54:12 +0200
changeset 76035 97060c904a08
parent 76034 dda3c117f13c
child 76036 181bf8567f41
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/document_dockable.scala
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     3
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     4
Dockable window for document build support.
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     5
*/
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     6
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     8
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
     9
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    10
import isabelle._
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    11
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    12
import java.awt.BorderLayout
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    13
import java.awt.event.{ComponentEvent, ComponentAdapter}
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    14
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    15
import scala.swing.{ScrollPane, TextArea, Label, TabbedPane, BorderPanel, Component}
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    16
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    17
import org.gjt.sp.jedit.{jEdit, View}
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    18
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    19
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    20
object Document_Dockable {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    21
  def document_output(): Path =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    22
    Path.explode("$ISABELLE_HOME_USER/document/root.pdf")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    23
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    24
  object Status extends Enumeration {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    25
    val WAITING = Value("waiting")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    26
    val RUNNING = Value("running")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    27
    val FINISHED = Value("finished")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    28
  }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    29
76026
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
    30
  sealed case class Result(output: List[XML.Tree] = Nil) {
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
    31
    def failed: Boolean = output.exists(Protocol.is_error)
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
    32
  }
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    33
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    34
  object State {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    35
    val empty: State = State()
76026
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
    36
    def finish(result: Result): State = State(output = result.output)
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    37
  }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    38
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    39
  sealed case class State(
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    40
    progress: Progress = new Progress,
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    41
    process: Future[Unit] = Future.value(()),
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    42
    output: List[XML.Tree] = Nil,
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    43
    status: Status.Value = Status.FINISHED
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    44
  )
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    45
}
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    46
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    47
class Document_Dockable(view: View, position: String) extends Dockable(view, position) {
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    48
  GUI_Thread.require {}
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    49
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    50
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    51
  /* component state -- owned by GUI thread */
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    52
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    53
  private val current_state = Synchronized(Document_Dockable.State.empty)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    54
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    55
  private val process_indicator = new Process_Indicator
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    56
  private val pretty_text_area = new Pretty_Text_Area(view)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    57
  private val message_pane = new TabbedPane
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    58
76034
dda3c117f13c clarified GUI behaviour;
wenzelm
parents: 76026
diff changeset
    59
  private def show_state(): Unit = GUI_Thread.later {
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    60
    val st = current_state.value
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    61
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    62
    pretty_text_area.update(Document.Snapshot.init, Command.Results.empty, st.output)
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    63
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    64
    st.status match {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    65
      case Document_Dockable.Status.WAITING =>
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    66
        process_indicator.update("Waiting for PIDE document content ...", 5)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    67
      case Document_Dockable.Status.RUNNING =>
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    68
        process_indicator.update("Running document build process ...", 15)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    69
      case Document_Dockable.Status.FINISHED =>
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    70
        process_indicator.update(null, 0)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    71
    }
76034
dda3c117f13c clarified GUI behaviour;
wenzelm
parents: 76026
diff changeset
    72
  }
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    73
76034
dda3c117f13c clarified GUI behaviour;
wenzelm
parents: 76026
diff changeset
    74
  private def show_page(page: TabbedPane.Page): Unit = GUI_Thread.later {
dda3c117f13c clarified GUI behaviour;
wenzelm
parents: 76026
diff changeset
    75
    message_pane.selection.page = page
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    76
  }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    77
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    78
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    79
  /* text area with zoom/resize */
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    80
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    81
  override def detach_operation: Option[() => Unit] = pretty_text_area.detach_operation
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
    82
76021
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    83
  private val zoom = new Font_Info.Zoom { override def changed(): Unit = handle_resize() }
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    84
  private def handle_resize(): Unit = GUI_Thread.require { pretty_text_area.zoom(zoom) }
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    85
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    86
  private val delay_resize: Delay =
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    87
    Delay.first(PIDE.options.seconds("editor_update_delay"), gui = true) { handle_resize() }
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    88
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    89
  addComponentListener(new ComponentAdapter {
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    90
    override def componentResized(e: ComponentEvent): Unit = delay_resize.invoke()
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    91
    override def componentShown(e: ComponentEvent): Unit = delay_resize.invoke()
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    92
  })
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
    93
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    94
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    95
  /* progress log */
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    96
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    97
  private val log_area = new TextArea {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    98
    editable = false
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
    99
    columns = 60
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   100
    rows = 24
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   101
  }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   102
  log_area.font = GUI.copy_font((new Label).font)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   103
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   104
  private val scroll_log_area = new ScrollPane(log_area)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   105
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   106
  private def init_progress() = {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   107
    GUI_Thread.later { log_area.text = "" }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   108
    new Progress {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   109
      override def echo(txt: String): Unit =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   110
        GUI_Thread.later {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   111
          log_area.append(txt + "\n")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   112
          val vertical = scroll_log_area.peer.getVerticalScrollBar
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   113
          vertical.setValue(vertical.getMaximum)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   114
        }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   115
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   116
      override def theory(theory: Progress.Theory): Unit = echo(theory.message)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   117
    }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   118
  }
76021
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
   119
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   120
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   121
  /* document build process */
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   122
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   123
  private def cancel(): Unit =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   124
    current_state.change { st => st.process.cancel(); st }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   125
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   126
  private def build_document(): Unit = {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   127
    current_state.change { st =>
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   128
      if (st.process.is_finished) {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   129
        val progress = init_progress()
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   130
        val process =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   131
          Future.thread[Unit](name = "document_build") {
76034
dda3c117f13c clarified GUI behaviour;
wenzelm
parents: 76026
diff changeset
   132
            show_page(log_page)
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   133
            val res =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   134
              Exn.capture {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   135
                progress.echo("Start " + Date.now())
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   136
                Time.seconds(2.0).sleep()
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   137
                progress.echo("Stop " + Date.now())
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   138
              }
76026
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
   139
            val msg =
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   140
              res match {
76026
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
   141
                case Exn.Res(_) => Protocol.make_message(XML.string("OK"))
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
   142
                case Exn.Exn(exn) => Protocol.error_message(XML.string(Exn.message(exn)))
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   143
              }
76026
614a8feea80c clarified GUI update;
wenzelm
parents: 76025
diff changeset
   144
            val result = Document_Dockable.Result(output = List(msg))
76035
wenzelm
parents: 76034
diff changeset
   145
            current_state.change(_ => Document_Dockable.State.finish(result))
wenzelm
parents: 76034
diff changeset
   146
            show_state()
wenzelm
parents: 76034
diff changeset
   147
            show_page(output_page)
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   148
          }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   149
        st.copy(progress = progress, process = process, status = Document_Dockable.Status.RUNNING)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   150
      }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   151
      else st
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   152
    }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   153
    show_state()
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   154
  }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   155
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   156
  private def view_document(): Unit = {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   157
    val path = Document_Dockable.document_output()
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   158
    if (path.is_file) Isabelle_System.pdf_viewer(path)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   159
  }
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   160
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   161
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   162
  /* controls */
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   163
76021
752425c69577 clarified component structure, concerning initialization order;
wenzelm
parents: 75853
diff changeset
   164
  private val document_session: GUI.Selector[String] =
75839
29441f2bfe81 clarified signature: more explicit types;
wenzelm
parents: 75830
diff changeset
   165
    new GUI.Selector(JEdit_Sessions.sessions_structure().build_topological_order.sorted) {
75830
b054f22efd0d more GUI elements;
wenzelm
parents: 75816
diff changeset
   166
      val title = "Session"
b054f22efd0d more GUI elements;
wenzelm
parents: 75816
diff changeset
   167
    }
b054f22efd0d more GUI elements;
wenzelm
parents: 75816
diff changeset
   168
75853
f981111768ec clarified signature;
wenzelm
parents: 75839
diff changeset
   169
  private val build_button =
f981111768ec clarified signature;
wenzelm
parents: 75839
diff changeset
   170
    new GUI.Button("<html><b>Build</b></html>") {
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   171
      tooltip = "Build document"
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   172
      override def clicked(): Unit = build_document()
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   173
    }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   174
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   175
  private val cancel_button =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   176
    new GUI.Button("Cancel") {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   177
      tooltip = "Cancel build process"
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   178
      override def clicked(): Unit = cancel()
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   179
    }
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   180
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   181
  private val view_button =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   182
    new GUI.Button("View") {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   183
      tooltip = "View document"
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   184
      override def clicked(): Unit = view_document()
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   185
    }
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   186
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   187
  private val controls =
75830
b054f22efd0d more GUI elements;
wenzelm
parents: 75816
diff changeset
   188
    Wrap_Panel(List(document_session, process_indicator.component, build_button,
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   189
      view_button, cancel_button))
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   190
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   191
  add(controls.peer, BorderLayout.NORTH)
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   192
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   193
  override def focusOnDefaultComponent(): Unit = build_button.requestFocus()
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   194
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   195
76023
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   196
  /* message pane with pages */
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   197
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   198
  private val output_controls =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   199
    Wrap_Panel(List(pretty_text_area.search_label, pretty_text_area.search_field, zoom))
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   200
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   201
  private val output_page =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   202
    new TabbedPane.Page("Output", new BorderPanel {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   203
      layout(output_controls) = BorderPanel.Position.North
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   204
      layout(Component.wrap(pretty_text_area)) = BorderPanel.Position.Center
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   205
    }, "Output from build process")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   206
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   207
  private val log_page =
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   208
    new TabbedPane.Page("Log", new BorderPanel {
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   209
      layout(log_area) = BorderPanel.Position.Center
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   210
    }, "Raw log of build process")
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   211
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   212
  message_pane.pages ++= List(output_page, log_page)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   213
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   214
  set_content(message_pane)
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   215
c7fed2fd52f5 more GUI functionality;
wenzelm
parents: 76021
diff changeset
   216
75816
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   217
  /* main */
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   218
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   219
  private val main =
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   220
    Session.Consumer[Session.Global_Options](getClass.getName) {
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   221
      case _: Session.Global_Options =>
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   222
        GUI_Thread.later { handle_resize() }
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   223
    }
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   224
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   225
  override def init(): Unit = {
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   226
    PIDE.session.global_options += main
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   227
    handle_resize()
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   228
  }
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   229
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   230
  override def exit(): Unit = {
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   231
    PIDE.session.global_options -= main
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   232
    delay_resize.revoke()
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   233
  }
91f02f224b80 basic setup for document build panel;
wenzelm
parents:
diff changeset
   234
}