src/Tools/jEdit/src/jedit/ProverSetup.scala
author immler@in.tum.de
Thu, 18 Dec 2008 01:10:20 +0100
changeset 34406 f81cd75ae331
child 34407 aad6834ba380
child 34460 cc5b9f02fbea
permissions -rw-r--r--
restructured: independent provers in different buffers
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34406
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     1
/*
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     2
 * BufferExtension.scala
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     3
 *
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     4
 * To change this template, choose Tools | Template Manager
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     5
 * and open the template in the editor.
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     6
 */
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     7
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     8
package isabelle.jedit
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
     9
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    10
import isabelle.utils.EventSource
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    11
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    12
import isabelle.prover.{ Prover, Command }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    13
import org.w3c.dom.Document
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    14
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    15
import isabelle.IsabelleSystem
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    16
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    17
import org.gjt.sp.jedit.{ jEdit, EBMessage, EBPlugin, Buffer, EditPane, View }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    18
import org.gjt.sp.jedit.buffer.JEditBuffer
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    19
import org.gjt.sp.jedit.msg.{ EditPaneUpdate, PropertiesChanged }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    20
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    21
import javax.swing.{JTextArea, JScrollPane}
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    22
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    23
class ProverSetup(buffer : JEditBuffer) {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    24
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    25
  val prover = new Prover()
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    26
  var theory_view : TheoryView = null
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    27
  
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    28
  private var _selectedState : Command = null
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    29
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    30
  val stateUpdate = new EventSource[Command]
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    31
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    32
  def selectedState = _selectedState
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    33
  def selectedState_=(newState : Command) {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    34
    _selectedState = newState
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    35
    stateUpdate fire newState
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    36
  }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    37
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    38
  val output_text_view = new JTextArea("== Isabelle output ==\n")
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    39
  
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    40
  def activate(view : View) {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    41
    val logic = Plugin.property("logic")
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    42
    prover.start(if (logic == null) logic else "HOL")
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    43
    val buffer = view.getBuffer
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    44
    val dir = buffer.getDirectory()
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    45
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    46
    theory_view = new TheoryView(view.getTextArea)
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    47
    prover.setDocument(theory_view ,
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    48
                       if (dir.startsWith(Plugin.VFS_PREFIX)) dir.substring(Plugin.VFS_PREFIX.length) else dir)
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    49
    theory_view.activate
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    50
    prover.outputInfo.add( text => {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    51
        output_text_view.append(text)
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    52
        val dockable = view.getDockableWindowManager.getDockable("Isabelle_output")
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    53
        //link process output if dockable is active
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    54
        if(dockable != null) {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    55
          val output_dockable = dockable.asInstanceOf[OutputDockable]
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    56
          if(output_dockable.getComponent(0) != output_text_view ) {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    57
            output_dockable.asInstanceOf[OutputDockable].removeAll
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    58
            output_dockable.asInstanceOf[OutputDockable].add(new JScrollPane(output_text_view))
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    59
            output_dockable.revalidate
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    60
          }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    61
        }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    62
      })
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    63
    
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    64
    //register for state-view
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    65
    stateUpdate.add(state => {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    66
      val state_view = view.getDockableWindowManager.getDockable("Isabelle_state")
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    67
      val state_panel = if(state_view != null) state_view.asInstanceOf[StateViewDockable].panel else null
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    68
      if(state_panel != null){
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    69
        if (state == null)
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    70
          state_panel.setDocument(null : Document)
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    71
        else
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    72
          state_panel.setDocument(state.results_xml, UserAgent.baseURL)
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    73
      }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    74
    })
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    75
 
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    76
    //register for theory-view
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    77
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    78
    // could also use this:
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    79
    // prover.commandInfo.add(c => Plugin.theory_view.repaint(c.command))
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    80
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    81
  }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    82
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    83
  def deactivate {
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    84
    //TODO: clean up!
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    85
  }
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    86
f81cd75ae331 restructured: independent provers in different buffers
immler@in.tum.de
parents:
diff changeset
    87
}