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