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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126