src/Tools/jEdit/src/documentation_dockable.scala
author wenzelm
Tue, 25 Jun 2013 16:55:10 +0200
changeset 52445 18a720984855
child 52447 9a74000426e2
permissions -rw-r--r--
dockable window for Isabelle documentation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52445
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     1
/*  Title:      Tools/jEdit/src/documentation_dockable.scala
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     3
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     4
Dockable window for Isabelle documentation.
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     5
*/
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     6
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     7
package isabelle.jedit
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     8
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
     9
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    10
import isabelle._
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    11
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    12
import java.awt.{Dimension, GridLayout}
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    13
import javax.swing.{JTree, JScrollPane}
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    14
import javax.swing.tree.{DefaultMutableTreeNode, TreeSelectionModel}
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    15
import javax.swing.event.{TreeSelectionEvent, TreeSelectionListener}
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    16
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    17
import org.gjt.sp.jedit.{View, OperatingSystem}
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    18
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    19
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    20
class Documentation_Dockable(view: View, position: String) extends Dockable(view, position)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    21
{
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    22
  Swing_Thread.require()
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    23
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    24
  private val docs = Doc.contents()
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    25
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    26
  private case class Documentation(name: String, title: String)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    27
  {
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    28
    override def toString =
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    29
      "<html><b>" + HTML.encode(name) + "</b>:  " + HTML.encode(title) + "</html>"
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    30
  }
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    31
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    32
  private val root = new DefaultMutableTreeNode
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    33
  docs foreach {
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    34
    case Doc.Section(text) =>
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    35
      root.add(new DefaultMutableTreeNode(text))
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    36
    case Doc.Doc(name, title) =>
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    37
      root.getLastChild.asInstanceOf[DefaultMutableTreeNode]
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    38
        .add(new DefaultMutableTreeNode(Documentation(name, title)))
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    39
  }
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    40
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    41
  private val tree = new JTree(root)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    42
  if (!OperatingSystem.isMacOSLF)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    43
    tree.putClientProperty("JTree.lineStyle", "Angled")
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    44
  tree.getSelectionModel.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    45
  tree.addTreeSelectionListener(
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    46
    new TreeSelectionListener {
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    47
      override def valueChanged(e: TreeSelectionEvent)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    48
      {
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    49
        tree.getLastSelectedPathComponent match {
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    50
          case node: DefaultMutableTreeNode =>
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    51
            node.getUserObject match {
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    52
              case Documentation(name, _) => Doc.view(name)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    53
              case _ =>
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    54
            }
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    55
          case _ =>
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    56
        }
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    57
      }
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    58
    })
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    59
  tree.setRootVisible(false)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    60
  tree.setVisibleRowCount(docs.length)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    61
  (0 until docs.length).foreach(tree.expandRow)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    62
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    63
  private val tree_view = new JScrollPane(tree)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    64
  tree_view.setMinimumSize(new Dimension(100, 50))
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    65
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    66
  set_content(tree_view)
18a720984855 dockable window for Isabelle documentation;
wenzelm
parents:
diff changeset
    67
}