# HG changeset patch # User wenzelm # Date 1314879052 -7200 # Node ID 5db68864a967eecf825a313e58a5340f7e56b299 # Parent 4beeaf2a226d74777fcf77f1141b3d2a0b2e3c81 more flexible sorting; tuned display; diff -r 4beeaf2a226d -r 5db68864a967 src/Pure/library.ML --- a/src/Pure/library.ML Thu Sep 01 13:39:40 2011 +0200 +++ b/src/Pure/library.ML Thu Sep 01 14:10:52 2011 +0200 @@ -959,7 +959,7 @@ fun sort_distinct ord = quicksort true ord; val sort_strings = sort string_ord; -fun sort_wrt sel xs = sort (string_ord o pairself sel) xs; +fun sort_wrt key xs = sort (string_ord o pairself key) xs; (* items tagged by integer index *) diff -r 4beeaf2a226d -r 5db68864a967 src/Pure/library.scala --- a/src/Pure/library.scala Thu Sep 01 13:39:40 2011 +0200 +++ b/src/Pure/library.scala Thu Sep 01 14:10:52 2011 +0200 @@ -14,6 +14,7 @@ import scala.swing.ComboBox import scala.swing.event.SelectionChanged import scala.collection.mutable +import scala.math.Ordering import scala.util.Sorting @@ -62,13 +63,18 @@ def split_lines(str: String): List[String] = space_explode('\n', str) - def sort_strings(args: Seq[String]): List[String] = + def sort_wrt[A](key: A => String, args: Seq[A]): List[A] = { - val a = args.toArray - Sorting.quickSort(a) + val ordering: Ordering[A] = + new Ordering[A] { def compare(x: A, y: A): Int = key(x) compare key(y) } + val a = (new Array[Any](args.length)).asInstanceOf[Array[A]] + for ((x, i) <- args.iterator zipWithIndex) a(i) = x + Sorting.quickSort[A](a)(ordering) a.toList } + def sort_strings(args: Seq[String]): List[String] = sort_wrt((x: String) => x, args) + /* iterate over chunks (cf. space_explode) */ diff -r 4beeaf2a226d -r 5db68864a967 src/Tools/jEdit/src/session_dockable.scala --- a/src/Tools/jEdit/src/session_dockable.scala Thu Sep 01 13:39:40 2011 +0200 +++ b/src/Tools/jEdit/src/session_dockable.scala Thu Sep 01 14:10:52 2011 +0200 @@ -73,7 +73,7 @@ /* component state -- owned by Swing thread */ - private var nodes_status: Map[String, String] = Map.empty + private var nodes_status: Map[Document.Node.Name, String] = Map.empty private def handle_changed(changed_nodes: Set[Document.Node.Name]) { @@ -88,12 +88,13 @@ name <- changed_nodes node <- version.nodes.get(name) val status = Isar_Document.node_status(state, version, node) - } nodes_status1 += (name.node -> status.toString) + } nodes_status1 += (name -> status.toString) if (nodes_status != nodes_status1) { nodes_status = nodes_status1 - val order = Library.sort_strings(nodes_status.keySet.toList) - status.listData = order.map(name => name + " " + nodes_status(name)) + val order = + Library.sort_wrt((name: Document.Node.Name) => name.node, nodes_status.keySet.toList) + status.listData = order.map(name => name.theory + " " + nodes_status(name)) } } }