src/Tools/jEdit/src/isabelle_logic.scala
author wenzelm
Wed, 05 Dec 2012 19:25:57 +0100
changeset 50375 c101127a7f37
parent 50205 788c8263e634
child 50380 b1cb76418760
permissions -rw-r--r--
clarified logic argument: session name, not path name; tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/isabelle_logic.scala
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     3
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     4
Isabellel logic session.
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     5
*/
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     6
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     8
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
     9
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    10
import isabelle._
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    11
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    12
import scala.swing.ComboBox
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    13
import scala.swing.event.SelectionChanged
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    14
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    15
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    16
object Isabelle_Logic
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    17
{
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    18
  private def default_logic(): String =
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    19
  {
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    20
    val logic = Isabelle_System.getenv("JEDIT_LOGIC")
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    21
    if (logic != "") logic
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    22
    else Isabelle_System.getenv_strict("ISABELLE_LOGIC")
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    23
  }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    24
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    25
  private class Logic_Entry(val name: String, val description: String)
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    26
  {
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    27
    override def toString = description
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    28
  }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    29
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    30
  private val option_name = "jedit_logic"
49270
e5d162d15867 some support to organize options in sections;
wenzelm
parents: 49248
diff changeset
    31
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    32
  def logic_selector(autosave: Boolean): Option_Component =
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    33
  {
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    34
    Swing_Thread.require()
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    35
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    36
    val entries =
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    37
      new Logic_Entry("", "default (" + default_logic() + ")") ::
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    38
        Isabelle_System.find_logics().map(name => new Logic_Entry(name, name))
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    39
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    40
    val component = new ComboBox(entries) with Option_Component {
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    41
      name = option_name
49270
e5d162d15867 some support to organize options in sections;
wenzelm
parents: 49248
diff changeset
    42
      val title = "Logic"
49247
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    43
      def load: Unit =
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    44
      {
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    45
        val logic = PIDE.options.string(option_name)
49247
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    46
        entries.find(_.name == logic) match {
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    47
          case Some(entry) => selection.item = entry
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    48
          case None =>
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    49
        }
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    50
      }
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    51
      def save: Unit = PIDE.options.string(option_name) = selection.item.name
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    52
    }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    53
49247
ffd9ad9dc35b more detailed option tooltip;
wenzelm
parents: 49246
diff changeset
    54
    component.load()
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    55
    if (autosave) {
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    56
      component.listenTo(component.selection)
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    57
      component.reactions += { case SelectionChanged(_) => component.save() }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    58
    }
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    59
    component.tooltip = PIDE.options.value.check_name(option_name).print_default
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    60
    component
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    61
  }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    62
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    63
  def session_args(): List[String] =
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    64
  {
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    65
    val modes = space_explode(',', Isabelle_System.getenv("JEDIT_PRINT_MODE")).map("-m" + _)
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    66
    val logic =
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    67
      PIDE.options.string(option_name) match {
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    68
        case "" => default_logic()
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    69
        case logic => logic
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    70
      }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    71
    modes ::: List(logic)
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    72
  }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    73
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    74
  def session_content(inlined_files: Boolean): Build.Session_Content =
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    75
  {
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    76
    val dirs = Path.split(Isabelle_System.getenv("JEDIT_SESSION_DIRS"))
50375
c101127a7f37 clarified logic argument: session name, not path name;
wenzelm
parents: 50205
diff changeset
    77
    val name = session_args().last
49246
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    78
    Build.session_content(inlined_files, dirs, name).check_errors
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    79
  }
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    80
}
248e66e8321f more systematic JEdit_Options.make_component;
wenzelm
parents:
diff changeset
    81