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