src/Pure/GUI/tree_view.scala
changeset 81329 1775fdc7274e
parent 81326 403203217493
child 81330 2239495a64f6
--- a/src/Pure/GUI/tree_view.scala	Sun Nov 03 20:23:19 2024 +0100
+++ b/src/Pure/GUI/tree_view.scala	Sun Nov 03 20:53:12 2024 +0100
@@ -7,19 +7,32 @@
 package isabelle
 
 import javax.swing.JTree
-import javax.swing.tree.{DefaultMutableTreeNode, DefaultTreeModel, TreeSelectionModel}
+import javax.swing.tree.{MutableTreeNode, DefaultMutableTreeNode, DefaultTreeModel,
+  TreeSelectionModel}
 
 
+object Tree_View {
+  type Node = DefaultMutableTreeNode
+
+  object Node {
+    def apply(obj: AnyRef = null): Node =
+      if (obj == null) new DefaultMutableTreeNode else new DefaultMutableTreeNode(obj)
+
+    def unapply(tree_node: MutableTreeNode): Option[AnyRef] =
+      tree_node match {
+        case node: Node => Some(node.getUserObject)
+        case _ => None
+      }
+  }
+}
+
 class Tree_View(
-  val root: DefaultMutableTreeNode = new DefaultMutableTreeNode,
+  val root: Tree_View.Node = Tree_View.Node(),
   single_selection_mode: Boolean = false
 ) extends JTree(root) {
   def get_selection[A](which: PartialFunction[AnyRef, A]): Option[A] =
     getLastSelectedPathComponent match {
-      case node: DefaultMutableTreeNode =>
-        val obj = node.getUserObject
-        if (obj != null && which.isDefinedAt(obj)) Some(which(obj))
-        else None
+      case Tree_View.Node(obj) if obj != null && which.isDefinedAt(obj) => Some(which(obj))
       case _ => None
     }