Save This Page
Home » openjdk-7 » net.sourceforge.jnipp » gui » [javadoc | source]
    1   package net.sourceforge.jnipp.gui;
    2   
    3   import net.sourceforge.jnipp.project;
    4   import net.sourceforge.jnipp.common;
    5   import net.sourceforge.jnipp.gui.appevent;
    6   import net.sourceforge.jnipp.gui.ProjectAdapter;
    7   import javax.swing.JTree;
    8   import javax.swing.JScrollPane;
    9   import javax.swing.tree;
   10   import javax.swing.event;
   11   import java.awt;
   12   import java.util.Iterator;
   13   import javax.swing.ImageIcon;
   14   import javax.swing.ToolTipManager;
   15   
   16   public class ProjectViewer extends JScrollPane implements AppEventSubscriber
   17   {
   18   	private JTree tree;
   19   	DefaultMutableTreeNode root;
   20   	public ProjectViewer()
   21   	{
   22   		super();
   23   		initTree("");
   24   	}
   25   
   26   	public ProjectViewer(ProjectAdapter project)
   27   	{
   28   		super();
   29   		initTree(project.getName());
   30   		buildProjectView(project, root);
   31   		tree.expandRow(0);
   32   	}
   33   	
   34   	private void initTree(String rootLabel)
   35   	{
   36   		subscribeToProjectUpdates();
   37   		root = new DefaultMutableTreeNode(rootLabel);
   38   		tree = new JTree(root);
   39   		tree.setSize(this.getSize());
   40   		ToolTipManager.sharedInstance().registerComponent(tree);
   41   		tree.setCellRenderer(new ProjectTreeRenderer());
   42   		
   43   		tree.addTreeSelectionListener(
   44   			new TreeSelectionListener()
   45   			{
   46   				public void valueChanged(TreeSelectionEvent evt) 
   47   				{
   48   				DefaultMutableTreeNode node = 
   49   					(DefaultMutableTreeNode)
   50   					(evt.getPath().getLastPathComponent());
   51   					process(node);
   52   				}
   53   			});
   54   		this.viewport.add(tree);
   55   	}
   56   
   57   	private void process(DefaultMutableTreeNode node)
   58   	{
   59   		UserContextUpdatedAppEvent event = new UserContextUpdatedAppEvent();
   60   		UserContext context = event.getContext();
   61   		ProjectAdapter project = context.getProject();
   62   
   63   		if ((node.isRoot()) || (node.getParent() == node.getRoot()))
   64   		{
   65   			context.setActiveContext(UserContext.ContextType_Project, project);
   66   		}
   67   		else
   68   		{
   69   			//we should be a class
   70   			try
   71   			{
   72   				ProjectClass projectclass = (ProjectClass) node.getUserObject();
   73   				context.setActiveContext(UserContext.ContextType_Class,projectclass);
   74   			}
   75   			catch(Exception e)
   76   			{
   77   				System.out.println(e);
   78   			}
   79   		}
   80   	}
   81   
   82   	public void setProject(ProjectAdapter project)
   83   	{
   84   		root.removeAllChildren();
   85   		root.setUserObject(project.getName());
   86   		buildProjectView(project,root);
   87   		tree.setModel(new DefaultTreeModel(root));
   88   		tree.treeDidChange();
   89   	}
   90   
   91   	private void buildProjectView(ProjectAdapter project, DefaultMutableTreeNode root)
   92   	{
   93   		DefaultMutableTreeNode inputClasses = new DefaultMutableTreeNode("classes");
   94   		root.add(inputClasses);
   95   		
   96   		Iterator it = project.getClasses();
   97   		while(it.hasNext() == true)
   98   		{
   99   			DefaultMutableTreeNode classNode = new DefaultMutableTreeNode((ProjectClass) it.next());
  100   			inputClasses.add(classNode);
  101   		}
  102   	}
  103   
  104   	//AppEventSubscriber method(s)
  105   	public void UpdateAvailable(AppEvent e)
  106   	{
  107   		ProjectUpdatedAppEvent subject = (ProjectUpdatedAppEvent) e;
  108   		setProject(subject.getProject());
  109   		ProjectAdapter theproject = subject.getProject();
  110   		setProject(theproject);
  111   	}
  112   
  113   	private void subscribeToProjectUpdates()
  114   	{
  115   		ProjectUpdatedAppEvent.subscribe(this);
  116   	}
  117   
  118   	protected class ProjectTreeRenderer extends DefaultTreeCellRenderer
  119   	{
  120   		ImageIcon classesIcon;
  121   		ImageIcon projectIcon;
  122   		ImageIcon classIcon;
  123   		
  124   		public ProjectTreeRenderer()
  125   		{
  126   			projectIcon = new ImageIcon(ProjectTreeRenderer.class.getResource("/net/sourceforge/jnipp/gui/resources/projectIcon.gif"));
  127   			classesIcon = new ImageIcon(ProjectTreeRenderer.class.getResource("/net/sourceforge/jnipp/gui/resources/classesIcon.gif"));
  128   			classIcon = new ImageIcon(ProjectTreeRenderer.class.getResource("/net/sourceforge/jnipp/gui/resources/classIcon.gif"));
  129   		}
  130   		
  131   		public Component getTreeCellRendererComponent(
  132   			JTree tree,
  133   			Object value,
  134   			boolean sel,
  135   			boolean expanded,
  136   			boolean leaf,
  137   			int row,
  138   			boolean hasFocus) 
  139   		{
  140   		
  141   			super.getTreeCellRendererComponent(
  142   				tree, value, sel,
  143   				expanded, leaf, row,
  144   				hasFocus);
  145   			
  146   			if (isProject(value))
  147   			{
  148   				setIcon(projectIcon);
  149   				setToolTipText(null);
  150   				expanded = true;
  151   			}
  152   			else if (isClassesCollection(value))
  153   			{
  154   				setIcon(classesIcon);
  155   				setToolTipText(null);
  156   				expanded = true;
  157   				hasFocus = false;
  158   			}
  159   			else
  160   			{
  161   				// it's a class
  162   				setIcon(classIcon);
  163   				DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
  164   				String nodeInfo = node.toString();
  165   				setToolTipText(nodeInfo);
  166   			} 
  167   			
  168   			return this;
  169   		}
  170   		
  171   		protected boolean isProject(Object value)
  172   		{
  173   			DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
  174   			if (node.isRoot())
  175   			{
  176   				return true;
  177   			}
  178   			return false;
  179   		}
  180   		
  181   		protected boolean isClassesCollection(Object value)
  182   		{
  183   			DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
  184   			String nodeInfo = node.toString();
  185   			if (nodeInfo.equals("classes"))
  186   			{
  187   				return true;
  188   			}
  189   			return false;
  190   		}
  191   	}
  192   }

Save This Page
Home » openjdk-7 » net.sourceforge.jnipp » gui » [javadoc | source]