View Javadoc

1   package net.sourceforge.pmd.util.viewer.gui;
2   
3   import net.sourceforge.pmd.ast.SimpleNode;
4   import net.sourceforge.pmd.util.viewer.model.ViewerModel;
5   import net.sourceforge.pmd.util.viewer.model.ViewerModelEvent;
6   import net.sourceforge.pmd.util.viewer.model.ViewerModelListener;
7   import net.sourceforge.pmd.util.viewer.util.NLS;
8   
9   import javax.swing.*;
10  import javax.swing.text.BadLocationException;
11  import javax.swing.text.DefaultHighlighter;
12  import java.awt.*;
13  
14  
15  /***
16   * source code panel
17   *
18   * @author Boris Gruschko ( boris at gruschko.org )
19   * @version $Id: SourceCodePanel.java,v 1.3 2004/04/15 18:21:58 tomcopeland Exp $
20   */
21  public class SourceCodePanel
22    extends JPanel
23    implements ViewerModelListener
24  {
25    private ViewerModel model;
26    private JTextArea   sourceCodeArea;
27  
28    public SourceCodePanel( ViewerModel model )
29    {
30      this.model = model;
31  
32      init(  );
33    }
34  
35    private void init(  )
36    {
37      model.addViewerModelListener( this );
38  
39      setBorder(
40        BorderFactory.createTitledBorder(
41          BorderFactory.createEtchedBorder(  ), NLS.nls( "SOURCE.PANEL.TITLE" ) ) );
42  
43      setLayout( new BorderLayout(  ) );
44  
45      sourceCodeArea = new JTextArea(  );
46  
47      add( new JScrollPane( sourceCodeArea ), BorderLayout.CENTER );
48    }
49  
50    /***
51     * retrieves the string representation of the source code
52     *
53     * @return source code's string representation
54     */
55    public String getSourceCode(  )
56    {
57      return sourceCodeArea.getText(  );
58    }
59  
60    /***
61     * @see org.gruschko.pmd.viewer.model.ViewerModelListener#viewerModelChanged(org.gruschko.pmd.viewer.model.ViewerModelEvent)
62     */
63    public void viewerModelChanged( ViewerModelEvent e )
64    {
65      if ( e.getReason(  ) == ViewerModelEvent.NODE_SELECTED )
66      {
67        final SimpleNode node = (SimpleNode)e.getParameter(  );
68  
69        SwingUtilities.invokeLater(
70          new Runnable(  )
71          {
72            public void run(  )
73            {
74              try
75              {
76                sourceCodeArea.getHighlighter(  ).removeAllHighlights(  );
77  
78                if ( node == null )
79                {
80                  return;
81                }
82  
83                int startOffset =
84                  ( sourceCodeArea.getLineStartOffset( node.getBeginLine(  ) - 1 ) +
85                  node.getBeginColumn(  ) ) - 1;
86  
87                int end =
88                  ( sourceCodeArea.getLineStartOffset( node.getEndLine(  ) - 1 ) +
89                  node.getEndColumn(  ) );
90  
91                sourceCodeArea.getHighlighter(  ).addHighlight(
92                  startOffset, end,
93                  new DefaultHighlighter.DefaultHighlightPainter(
94                    new Color( 79, 237, 111 ) ) );
95  
96                sourceCodeArea.moveCaretPosition( startOffset );
97              }
98              catch ( BadLocationException exc )
99              {
100               throw new IllegalStateException( exc.getMessage(  ) );
101             }
102           }
103         } );
104     }
105   }
106 }
107 
108 
109 /*
110  * $Log: SourceCodePanel.java,v $
111  * Revision 1.3  2004/04/15 18:21:58  tomcopeland
112  * Cleaned up imports with new version of IDEA; fixed some deprecated Ant junx
113  *
114  * Revision 1.2  2003/09/23 20:51:06  tomcopeland
115  * Cleaned up imports
116  *
117  * Revision 1.1  2003/09/23 20:32:42  tomcopeland
118  * Added Boris Gruschko's new AST/XPath viewer
119  *
120  * Revision 1.1  2003/09/24 01:33:03  bgr
121  * moved to a new package
122  *
123  * Revision 1.1  2003/09/22 05:21:54  bgr
124  * initial commit
125  *
126  */