1 29 38 39 package org.planetamessenger.mos.ui; 40 41 import java.lang.*; 42 import javax.swing.*; 43 import javax.swing.tree.*; 44 import org.planetamessenger.mos.engine.*; 45 46 47 public class JProtocolTree extends JTree { 48 49 DefaultTreeModel treeModel = null; 50 DefaultMutableTreeNode rootNode = null; 51 52 53 54 58 public JProtocolTree( java.lang.String strRootLabel ) { 59 60 super(); 61 putClientProperty( "JTree.lineStyle", "Angled" ); 62 renewRenderer(); 63 rootNode = new DefaultMutableTreeNode( new JProtocolTreeItem( strRootLabel, null, -1 ) ); 64 treeModel = new DefaultTreeModel( rootNode ); 65 setModel( treeModel ); 66 } 67 68 71 public JProtocolTree() { 72 73 this( "" ); 74 } 75 76 82 public void renewRenderer() { 83 84 DefaultTreeCellRenderer renderer; 85 86 setCellRenderer( new JTreeCellRenderer() ); 87 renderer = ( DefaultTreeCellRenderer ) getCellRenderer(); 88 renderer.setLeafIcon( null ); 89 renderer.setOpenIcon( null ); 90 renderer.setClosedIcon( null ); 91 } 92 93 97 public void addNode( JProtocolTreeItem item ) { 98 99 DefaultMutableTreeNode newNode = new DefaultMutableTreeNode( item ); 100 rootNode.add( newNode ); 101 reload( rootNode ); 102 } 103 104 108 public boolean removeNode( JProtocolTreeItem item ) { 109 110 int nChildCount = treeModel.getChildCount( rootNode ); 111 int nCount = 0; 112 boolean bRemoved = false; 113 114 while( nCount < treeModel.getChildCount( rootNode ) ) { 115 DefaultMutableTreeNode node = ( DefaultMutableTreeNode ) treeModel.getChild( rootNode, nCount ); 116 JProtocolTreeItem tmpItem = ( JProtocolTreeItem ) node.getUserObject(); 117 118 if( tmpItem.getPluginId() == item.getPluginId() ) { 119 rootNode.remove( node ); 120 bRemoved = true; 121 nCount = 0; 122 } 123 else 124 nCount++; 125 } 126 127 reload( rootNode ); 128 129 return bRemoved; 130 } 131 132 135 public int getChildCount() { 136 137 return treeModel.getChildCount( rootNode ); 138 } 139 140 144 public void updateRootTreeLabel( String strRootLabel ) { 145 146 JProtocolTreeItem item = ( JProtocolTreeItem ) rootNode.getUserObject(); 147 148 item.setText( strRootLabel ); 149 reload(); 150 } 151 152 156 public void reload() { 157 158 reload( rootNode ); 159 } 160 161 165 public void reload( TreeNode node ) { 166 167 treeModel.reload( node ); 168 } 169 170 173 public void refresh() { 174 175 refresh( rootNode ); 176 } 177 178 182 private void refresh( TreeNode node ) { 183 184 treeModel.nodeChanged( node ); 185 186 for( int nCount = 0; nCount < node.getChildCount(); nCount++ ) 187 refresh( node.getChildAt( nCount ) ); 188 } 189 190 196 private class JTreeCellRenderer extends DefaultTreeCellRenderer { 197 198 203 public java.awt.Component getTreeCellRendererComponent( javax.swing.JTree tree, java.lang.Object objValue, boolean bSelected, boolean bExpanded, boolean bIsLeaf, int nRow, boolean bHasFocus ) { 204 205 super.getTreeCellRendererComponent( tree, objValue, bSelected, bExpanded, bIsLeaf, nRow, bHasFocus ); 206 207 try { 208 209 DefaultMutableTreeNode node = ( DefaultMutableTreeNode ) objValue; 210 JProtocolTreeItem item = ( JProtocolTreeItem ) node.getUserObject(); 211 212 if( item.getPluginId() >= 0 ) { 214 if( item.getInstall() ) 215 setIcon( JSharedObjects.getResources().getIcon( JResources.INSTALL_PLUGIN_ICON ) ); 216 else 217 setIcon( JSharedObjects.getResources().getIcon( JResources.UNINSTALL_PLUGIN_ICON ) ); 218 } 219 } catch( Exception e ) { 220 System.err.println( "JProtocolTree.JTreeCellRenderer.getTreeCellRendererComponent() - Invalid item object. Ignoring event" ); 221 } 222 223 return this; 224 } 225 } } 227 228 | Popular Tags |