+ private void sortTreeNodes(DefaultMutableTreeNode root)
+ {
+ if (root.getChildCount() == 0)
+ {
+ return;
+ }
+ int count = root.getChildCount();
+ String[] names = new String[count];
+ DefaultMutableTreeNode[] nodes = new DefaultMutableTreeNode[count];
+ for (int i = 0; i < count; i++)
+ {
+ TreeNode node = root.getChildAt(i);
+ if (node instanceof DefaultMutableTreeNode)
+ {
+ DefaultMutableTreeNode child = (DefaultMutableTreeNode) node;
+ nodes[i] = child;
+ if (child.getUserObject() instanceof DbSourceProxy)
+ {
+ names[i] = ((DbSourceProxy) child.getUserObject()).getDbName()
+ .toLowerCase(Locale.ROOT);
+ }
+ else
+ {
+ names[i] = ((String) child.getUserObject()).toLowerCase(Locale.ROOT);
+ sortTreeNodes(child);
+ }
+ }
+ else
+ {
+ throw new Error(MessageManager
+ .getString("error.implementation_error_cant_reorder_tree"));
+ }
+ }
+ jalview.util.QuickSort.sort(names, nodes);
+ root.removeAllChildren();
+ for (int i = count - 1; i >= 0; i--)
+ {
+ root.add(nodes[i]);
+ }
+ }
+
+ private class DbTreeRenderer extends DefaultTreeCellRenderer
+ implements TreeCellRenderer