View Javadoc

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