View Javadoc

1   package net.sourceforge.pmd.util.viewer.gui;
2   
3   import net.sourceforge.pmd.ast.Node;
4   import net.sourceforge.pmd.ast.SimpleNode;
5   import net.sourceforge.pmd.util.viewer.gui.menu.ASTNodePopupMenu;
6   import net.sourceforge.pmd.util.viewer.model.ASTModel;
7   import net.sourceforge.pmd.util.viewer.model.ViewerModel;
8   import net.sourceforge.pmd.util.viewer.model.ViewerModelEvent;
9   import net.sourceforge.pmd.util.viewer.model.ViewerModelListener;
10  import net.sourceforge.pmd.util.viewer.util.NLS;
11  
12  import javax.swing.*;
13  import javax.swing.event.TreeSelectionEvent;
14  import javax.swing.event.TreeSelectionListener;
15  import javax.swing.tree.TreeNode;
16  import javax.swing.tree.TreePath;
17  import java.awt.*;
18  import java.awt.event.MouseAdapter;
19  import java.awt.event.MouseEvent;
20  import java.util.LinkedList;
21  
22  
23  /***
24   * tree panel GUI
25   *
26   * @author Boris Gruschko ( boris at gruschko.org )
27   * @version $Id: ASTPanel.java,v 1.3 2004/04/15 18:21:58 tomcopeland Exp $
28   */
29  public class ASTPanel
30    extends JPanel
31    implements ViewerModelListener, TreeSelectionListener
32  {
33    private ViewerModel model;
34    private JTree       tree;
35  
36    /***
37     * constructs the panel
38     *
39     * @param model model to attach the panel to
40     */
41    public ASTPanel( ViewerModel model )
42    {
43      this.model = model;
44  
45      init(  );
46    }
47  
48    private void init(  )
49    {
50      model.addViewerModelListener( this );
51  
52      setBorder(
53        BorderFactory.createTitledBorder(
54          BorderFactory.createEtchedBorder(  ), NLS.nls( "AST.PANEL.TITLE" ) ) );
55  
56      setLayout( new BorderLayout(  ) );
57  
58      tree = new JTree( (TreeNode)null );
59  
60      tree.addTreeSelectionListener( this );
61  
62      tree.addMouseListener(
63        new MouseAdapter(  )
64        {
65          public void mouseReleased( MouseEvent e )
66          {
67            if ( e.isPopupTrigger(  ) )
68            {
69              TreePath path =
70                tree.getClosestPathForLocation( e.getX(  ), e.getY(  ) );
71              tree.setSelectionPath( path );
72  
73              JPopupMenu menu =
74                new ASTNodePopupMenu(
75                  model, (SimpleNode)path.getLastPathComponent(  ) );
76  
77              menu.show( tree, e.getX(  ), e.getY(  ) );
78            }
79          }
80        } );
81  
82      add( new JScrollPane( tree ), BorderLayout.CENTER );
83    }
84  
85    /***
86     * @see org.gruschko.pmd.viewer.model.ViewerModelListener#viewerModelChanged(org.gruschko.pmd.viewer.model.ViewerModelEvent)
87     */
88    public void viewerModelChanged( ViewerModelEvent e )
89    {
90      switch ( e.getReason(  ) )
91      {
92        case ViewerModelEvent.CODE_RECOMPILED :
93          tree.setModel( new ASTModel( model.getRootNode(  ) ) );
94  
95          break;
96  
97        case ViewerModelEvent.NODE_SELECTED :
98  
99          if ( e.getSource(  ) != this )
100         {
101           LinkedList list = new LinkedList(  );
102 
103           for (
104             Node node = (Node)e.getParameter(  ); node != null;
105               node = node.jjtGetParent(  ) )
106             list.addFirst( node );
107 
108           TreePath path = new TreePath( list.toArray(  ) );
109 
110           tree.setSelectionPath( path );
111 
112           tree.scrollPathToVisible( path );
113         }
114 
115         break;
116     }
117   }
118 
119   /***
120    * @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
121    */
122   public void valueChanged( TreeSelectionEvent e )
123   {
124     model.selectNode(
125       (SimpleNode)e.getNewLeadSelectionPath(  ).getLastPathComponent(  ), this );
126   }
127 }
128 
129 
130 /*
131  * $Log: ASTPanel.java,v $
132  * Revision 1.3  2004/04/15 18:21:58  tomcopeland
133  * Cleaned up imports with new version of IDEA; fixed some deprecated Ant junx
134  *
135  * Revision 1.2  2003/09/23 20:51:06  tomcopeland
136  * Cleaned up imports
137  *
138  * Revision 1.1  2003/09/23 20:32:42  tomcopeland
139  * Added Boris Gruschko's new AST/XPath viewer
140  *
141  * Revision 1.1  2003/09/24 01:33:03  bgr
142  * moved to a new package
143  *
144  * Revision 1.3  2003/09/24 00:40:35  bgr
145  * evaluation results browsing added
146  *
147  * Revision 1.2  2003/09/23 07:52:16  bgr
148  * menus added
149  *
150  * Revision 1.1  2003/09/22 05:21:54  bgr
151  * initial commit
152  *
153  */