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 23 24 public class SourceCodePanel extends JPanel implements ViewerModelListener { 25 26 private ViewerModel model; 27 private JTextArea sourceCodeArea; 28 29 private static final Color highlightColor = new Color (79, 237, 111); 30 31 public SourceCodePanel(ViewerModel model) { 32 this.model = model; 33 init(); 34 } 35 36 private void init() { 37 model.addViewerModelListener(this); 38 setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), NLS.nls("SOURCE.PANEL.TITLE"))); 39 setLayout(new BorderLayout ()); 40 sourceCodeArea = new JTextArea(); 41 add(new JScrollPane(sourceCodeArea), BorderLayout.CENTER); 42 } 43 44 49 public String getSourceCode() { 50 return sourceCodeArea.getText(); 51 } 52 53 56 public void viewerModelChanged(ViewerModelEvent e) { 57 if (e.getReason() == ViewerModelEvent.NODE_SELECTED) { 58 final SimpleNode node = (SimpleNode) e.getParameter(); 59 SwingUtilities.invokeLater(new Runnable () { 60 public void run() { 61 try { 62 sourceCodeArea.getHighlighter().removeAllHighlights(); 63 if (node == null) { 64 return; 65 } 66 int startOffset = 67 (sourceCodeArea.getLineStartOffset(node.getBeginLine() - 1) + 68 node.getBeginColumn()) - 1; 69 int end = 70 (sourceCodeArea.getLineStartOffset(node.getEndLine() - 1) + 71 node.getEndColumn()); 72 sourceCodeArea.getHighlighter().addHighlight(startOffset, end, 73 new DefaultHighlighter.DefaultHighlightPainter (highlightColor)); 74 sourceCodeArea.moveCaretPosition(startOffset); 75 } catch (BadLocationException exc) { 76 throw new IllegalStateException (exc.getMessage()); 77 } 78 } 79 }); 80 } 81 } 82 } 83 84 | Popular Tags |