View Javadoc
1 package net.sourceforge.pmd.swingui; 2 3 import net.sourceforge.pmd.swingui.event.ListenerList; 4 import net.sourceforge.pmd.swingui.event.SetupFilesEvent; 5 import net.sourceforge.pmd.swingui.event.SetupFilesEventListener; 6 import net.sourceforge.pmd.swingui.event.StatusBarEvent; 7 8 import javax.swing.BorderFactory; 9 import javax.swing.Icon; 10 import javax.swing.JTree; 11 import javax.swing.UIManager; 12 import javax.swing.border.EtchedBorder; 13 import javax.swing.tree.DefaultTreeCellRenderer; 14 import javax.swing.tree.TreePath; 15 import java.awt.Component; 16 import java.io.File; 17 18 /*** 19 * 20 * @author Donald A. Leckie 21 * @since August 17, 2002 22 * @version $Revision: 1.20 $, $Date: 2003/05/28 18:08:32 $ 23 */ 24 class DirectoryTree extends JTree { 25 26 /*** 27 ******************************************************************************* 28 * 29 */ 30 protected DirectoryTree(String rootName) { 31 super(new DirectoryTreeModel(rootName)); 32 33 setRootVisible(true); 34 setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); 35 setCellRenderer(new DirectoryTreeNodeRenderer()); 36 ((DirectoryTreeModel) getModel()).setDirectoryTree(this); 37 setBackground(UIManager.getColor("pmdTreeBackground")); 38 ListenerList.addListener((SetupFilesEventListener) new SetupFilesEventHandler()); 39 } 40 41 /*** 42 ******************************************************************************* 43 * 44 */ 45 protected void expandRootNode() { 46 DirectoryTreeModel treeModel = (DirectoryTreeModel) getModel(); 47 DirectoryTreeNode treeNode = (DirectoryTreeNode) treeModel.getRoot(); 48 TreePath treePath = new TreePath(treeNode.getPath()); 49 expandPath(treePath); 50 } 51 52 /*** 53 ******************************************************************************* 54 * 55 */ 56 protected DirectoryTreeNode getSelectedNode() { 57 TreePath path = getSelectionModel().getSelectionPath(); 58 59 return (DirectoryTreeNode) path.getLastPathComponent(); 60 } 61 62 /*** 63 ********************************************************************************* 64 ********************************************************************************* 65 ********************************************************************************* 66 */ 67 private class SetupFilesEventHandler implements SetupFilesEventListener { 68 69 /*** 70 **************************************************************************** 71 * 72 * @param event 73 */ 74 public void startSetup(SetupFilesEvent event) { 75 } 76 77 /*** 78 **************************************************************************** 79 * 80 * @param event 81 */ 82 public void stopSetup(SetupFilesEvent event) { 83 } 84 85 /*** 86 **************************************************************************** 87 * 88 * @param event 89 */ 90 public void setFileList(SetupFilesEvent event) { 91 File[] directories = event.getFileList(); 92 String name = "Locating root directories."; 93 SetupFilesThread setupFilesThread = new SetupFilesThread(name, directories); 94 setupFilesThread.start(); 95 } 96 } 97 98 /*** 99 ******************************************************************************** 100 ******************************************************************************** 101 ******************************************************************************** 102 */ 103 private class SetupFilesThread extends Thread { 104 private File[] m_rootDirectories; 105 106 /*** 107 **************************************************************************** 108 * 109 * @param name 110 */ 111 private SetupFilesThread(String threadName, File[] rootDirectories) { 112 super(threadName); 113 114 m_rootDirectories = rootDirectories; 115 } 116 117 /*** 118 *************************************************************************** 119 * 120 */ 121 public void run() { 122 setup(); 123 process(); 124 cleanup(); 125 } 126 127 /*** 128 *************************************************************************** 129 * 130 */ 131 protected void setup() { 132 SetupFilesEvent.notifyStartSetup(this); 133 StatusBarEvent.notifyStartAnimation(this); 134 } 135 136 /*** 137 *************************************************************************** 138 * 139 */ 140 protected void process() { 141 StatusBarEvent.notifyShowMessage(this, "Locating root directories. Please wait..."); 142 DirectoryTreeModel treeModel = (DirectoryTreeModel) getModel(); 143 treeModel.setupFiles(m_rootDirectories); 144 expandRootNode(); 145 } 146 147 /*** 148 *************************************************************************** 149 * 150 */ 151 protected void cleanup() { 152 StatusBarEvent.notifyStopAnimation(this); 153 SetupFilesEvent.notifyStopSetup(this); 154 } 155 } 156 157 /*** 158 ******************************************************************************** 159 ******************************************************************************** 160 ******************************************************************************** 161 */ 162 private class DirectoryTreeNodeRenderer extends DefaultTreeCellRenderer { 163 164 private Icon m_defaultClosedIcon; 165 private Icon m_defaultLeafIcon; 166 private Icon m_defaultOpenIcon; 167 168 /*** 169 *************************************************************************** 170 * 171 */ 172 protected DirectoryTreeNodeRenderer() { 173 super(); 174 175 m_defaultClosedIcon = getDefaultClosedIcon(); 176 m_defaultLeafIcon = getDefaultLeafIcon(); 177 m_defaultOpenIcon = getDefaultOpenIcon(); 178 setBackgroundNonSelectionColor(UIManager.getColor("pmdTreeBackground")); 179 } 180 181 /*** 182 ************************************************************************** 183 * 184 * @param tree 185 * @param object 186 * @param isSelected 187 * @param isExpanded 188 * @param isLeaf 189 * @param row 190 * @param hasFocus 191 * 192 * @return 193 */ 194 public Component getTreeCellRendererComponent(JTree tree, Object object, boolean isSelected, boolean isExpanded, boolean isLeaf, int row, boolean hasFocus) { 195 DirectoryTreeNode treeNode = (DirectoryTreeNode) object; 196 Object userObject = treeNode.getUserObject(); 197 198 if (userObject instanceof String) { 199 // The root node will display either an open or closed icon. 200 setClosedIcon(m_defaultClosedIcon); 201 setLeafIcon(m_defaultClosedIcon); 202 setOpenIcon(m_defaultOpenIcon); 203 } else if (((File) userObject).isFile()) { 204 // A file cannot have any children; therefore, the default icon settings are used. 205 setClosedIcon(m_defaultClosedIcon); 206 setLeafIcon(m_defaultLeafIcon); 207 setOpenIcon(m_defaultOpenIcon); 208 } else { 209 // A directory may or may not have children. The following conditions are used: 210 // 211 // For a file 212 // files are not viewed in the tree 213 // For a directory 214 // has no children --- use closed folder icon 215 // has children 216 // is expanded --- use open folder icon 217 // is collapsed --- use closed folder icon 218 // 219 setClosedIcon(m_defaultClosedIcon); 220 setLeafIcon(m_defaultClosedIcon); 221 setOpenIcon(m_defaultOpenIcon); 222 } 223 224 return super.getTreeCellRendererComponent(tree, object, isSelected, isExpanded, isLeaf, row, hasFocus); 225 } 226 } 227 }

This page was automatically generated by Maven