package net.sourceforge.pmd.util.viewer.gui;
import net.sourceforge.pmd.ast.SimpleNode;
import net.sourceforge.pmd.util.viewer.model.ViewerModel;
import net.sourceforge.pmd.util.viewer.model.ViewerModelEvent;
import net.sourceforge.pmd.util.viewer.model.ViewerModelListener;
import net.sourceforge.pmd.util.viewer.util.NLS;
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import java.awt.*;
/**
* source code panel
*
* @author Boris Gruschko ( boris at gruschko.org )
* @version $Id: SourceCodePanel.java,v 1.3 2004/04/15 18:21:58 tomcopeland Exp $
*/
public class SourceCodePanel
extends JPanel
implements ViewerModelListener
{
private ViewerModel model;
private JTextArea sourceCodeArea;
public SourceCodePanel( ViewerModel model )
{
this.model = model;
init( );
}
private void init( )
{
model.addViewerModelListener( this );
setBorder(
BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder( ), NLS.nls( "SOURCE.PANEL.TITLE" ) ) );
setLayout( new BorderLayout( ) );
sourceCodeArea = new JTextArea( );
add( new JScrollPane( sourceCodeArea ), BorderLayout.CENTER );
}
/**
* retrieves the string representation of the source code
*
* @return source code's string representation
*/
public String getSourceCode( )
{
return sourceCodeArea.getText( );
}
/**
* @see org.gruschko.pmd.viewer.model.ViewerModelListener#viewerModelChanged(org.gruschko.pmd.viewer.model.ViewerModelEvent)
*/
public void viewerModelChanged( ViewerModelEvent e )
{
if ( e.getReason( ) == ViewerModelEvent.NODE_SELECTED )
{
final SimpleNode node = (SimpleNode)e.getParameter( );
SwingUtilities.invokeLater(
new Runnable( )
{
public void run( )
{
try
{
sourceCodeArea.getHighlighter( ).removeAllHighlights( );
if ( node == null )
{
return;
}
int startOffset =
( sourceCodeArea.getLineStartOffset( node.getBeginLine( ) - 1 ) +
node.getBeginColumn( ) ) - 1;
int end =
( sourceCodeArea.getLineStartOffset( node.getEndLine( ) - 1 ) +
node.getEndColumn( ) );
sourceCodeArea.getHighlighter( ).addHighlight(
startOffset, end,
new DefaultHighlighter.DefaultHighlightPainter(
new Color( 79, 237, 111 ) ) );
sourceCodeArea.moveCaretPosition( startOffset );
}
catch ( BadLocationException exc )
{
throw new IllegalStateException( exc.getMessage( ) );
}
}
} );
}
}
}
/*
* $Log: SourceCodePanel.java,v $
* Revision 1.3 2004/04/15 18:21:58 tomcopeland
* Cleaned up imports with new version of IDEA; fixed some deprecated Ant junx
*
* Revision 1.2 2003/09/23 20:51:06 tomcopeland
* Cleaned up imports
*
* Revision 1.1 2003/09/23 20:32:42 tomcopeland
* Added Boris Gruschko's new AST/XPath viewer
*
* Revision 1.1 2003/09/24 01:33:03 bgr
* moved to a new package
*
* Revision 1.1 2003/09/22 05:21:54 bgr
* initial commit
*
*/