psmith 2004/05/19 20:59:12 Modified: src/java/org/apache/log4j/chainsaw/vfs FileSystemTreePanel.java Log: refactored the tree gui initialisation into it's own method.
Added a custom tree cell renderer so the icons are rendered better. Revision Changes Path 1.4 +60 -15 logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/FileSystemTreePanel.java Index: FileSystemTreePanel.java =================================================================== RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/chainsaw/vfs/FileSystemTreePanel.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- FileSystemTreePanel.java 19 May 2004 06:11:03 -0000 1.3 +++ FileSystemTreePanel.java 20 May 2004 03:59:12 -0000 1.4 @@ -1,8 +1,10 @@ package org.apache.log4j.chainsaw.vfs; import java.awt.BorderLayout; +import java.awt.Component; import java.awt.Dimension; +import javax.swing.Icon; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; @@ -40,32 +42,28 @@ setPreferredSize(new Dimension(150,400)); add(new JScrollPane(tree), BorderLayout.CENTER); - tree.setModel(treeModel); + initTree(); + } + + /** + * Configures the tree component + */ + private void initTree() { + tree.setModel(treeModel); tree.expandPath(new TreePath(rootNode.getPath())); tree.setRootVisible(false); tree.putClientProperty("JTree.lineStyle", "Angled"); tree.setShowsRootHandles(true); - - // TODO need a custom Cell renderer so that the root VFSNodes ALWAYS have the appropriate icons, and - // child folders don't get them, but get the normal folder style icon, but for now - // we make it easy on ourselves - - // We make the non-Leaf Icons a nice Server-style icon to represent the repository. - DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer(); - renderer.setClosedIcon(ChainsawIcons.ICON_SERVER); - renderer.setOpenIcon(ChainsawIcons.ICON_SERVER); - renderer.setLeafIcon(null); - - setToolTipText(TOOLTIP); - tree.setToolTipText(TOOLTIP); + tree.setCellRenderer(new FileSystemTreeCellRenderer()); } - + /** * Adds a FileObject with a label to the list of known VFS repositories, and makes sure the * Tree gets updated. * @param fileObject + * @return DefaultMutableTreeNode that was created */ public DefaultMutableTreeNode addFileObject(String name, FileObject fileObject) { VFSNode vfsNode = new VFSNode(name, fileObject); @@ -86,5 +84,52 @@ JTree getTree() { return this.tree; } + + /** + * Renders the tree by making sure the appropriate icon is used + */ + private static final class FileSystemTreeCellRenderer extends DefaultTreeCellRenderer{ + private final Icon openFolderIcon; + private final Icon closedFolderIcon; + private FileSystemTreeCellRenderer() { + openFolderIcon = getOpenIcon(); + closedFolderIcon = getClosedIcon(); + } + + /* (non-Javadoc) + * @see javax.swing.tree.TreeCellRenderer#getTreeCellRendererComponent(javax.swing.JTree, java.lang.Object, boolean, boolean, boolean, int, boolean) + */ + public Component getTreeCellRendererComponent(JTree tree, Object value, + boolean sel, boolean expanded, boolean leaf, int row, + boolean hasFocus) { + + // start off by doing the default bits 'n pieces + Component c = super.getTreeCellRendererComponent( + tree, value, sel, expanded, leaf, row, hasFocus); + + + DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; + Object o = node.getUserObject(); + TreePath path = new TreePath(node.getPath()); + if(!(o instanceof VFSNode)) { + return c; + } + VFSNode vfsNode = (VFSNode) o; + setText(o.toString()); + + String tooltip = vfsNode.getFileObject().getName().getBaseName(); + + setIcon(null); + // if the path to root is only 2 length, then this node is a top-level (apart from root) + // node, and we consider this the "Repository" root node, so we use the funky Server ICON + if(node.getParent().equals(node.getRoot())) { + setIcon(ChainsawIcons.ICON_SERVER); + }else { + setIcon(tree.isExpanded(path)?openFolderIcon:closedFolderIcon); + } + + return this; + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]