1/*  Title:      Tools/jEdit/src/isabelle_options.scala
2    Author:     Makarius
3
4Editor pane for plugin options.
5*/
6
7package isabelle.jedit
8
9
10import isabelle._
11
12import org.gjt.sp.jedit.{jEdit, AbstractOptionPane}
13
14
15abstract class Isabelle_Options(name: String) extends AbstractOptionPane(name)
16{
17  protected val components: List[(String, List[Option_Component])]
18
19  override def _init()
20  {
21    val dummy_property = "options.isabelle.dummy"
22
23    for ((s, cs) <- components) {
24      if (s != "") {
25        jEdit.setProperty(dummy_property, s)
26        addSeparator(dummy_property)
27        jEdit.setProperty(dummy_property, null)
28      }
29      cs.foreach(c => addComponent(c.title, c.peer))
30    }
31  }
32
33  override def _save()
34  {
35    for ((_, cs) <- components) cs.foreach(_.save())
36  }
37}
38
39
40class Isabelle_Options1 extends Isabelle_Options("isabelle-general")
41{
42  val options = PIDE.options
43
44  private val predefined =
45    List(JEdit_Sessions.logic_selector(options, false),
46      JEdit_Spell_Checker.dictionaries_selector())
47
48  protected val components =
49    options.make_components(predefined,
50      (for ((name, opt) <- options.value.options.iterator if opt.public) yield name).toSet)
51}
52
53
54class Isabelle_Options2 extends Isabelle_Options("isabelle-rendering")
55{
56  private val predefined =
57    (for {
58      (name, opt) <- PIDE.options.value.options.toList
59      if (name.endsWith("_color") && opt.section == JEdit_Options.RENDERING_SECTION)
60    } yield PIDE.options.make_color_component(opt))
61
62  assert(predefined.nonEmpty)
63
64  protected val components = PIDE.options.make_components(predefined, _ => false)
65}
66
67