package edu.colostate.vchill.gui;
import javax.swing.*;
import javax.swing.text.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseListener;
/**
* Displays text output inside the GUI. Text sent to stdout is displayed
* as plain text, while text sent to stderr is italicized.
*
* @author Justin Carlson
* @author Alexander Deyke
* @author Jochen Deyke
* @version 2006-05-11
* @created Oct 09, 2002
*/
public class ViewEventWindow extends JScrollPane {
/**
*
*/
private static final long serialVersionUID = -8304558476393001830L;
private final JTextPane pane;
/**
* Constructor for the ViewEventWindow object
*
* @param size Desired preferred size
*/
public ViewEventWindow(final Dimension size) {
setPreferredSize(size);
pane = new JTextPane();
pane.setEditable(false);
Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
Style regular = pane.addStyle("regular", def);
StyleConstants.setFontFamily(def, "SansSerif");
Style s = pane.addStyle("italic", regular);
StyleConstants.setItalic(s, true);
setViewportView(pane);
setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
pane.addComponentListener(new ComponentAdapter() {
public void componentResized(final ComponentEvent ce) {
pane.setCaretPosition(Math.max(pane.getDocument().getLength() - 1, 0));
}
});
}
public void addMouseListener(final MouseListener l) {
this.pane.addMouseListener(l);
super.addMouseListener(l);
}
/**
* Add a String to the pane.
*
* @param eventString A string describing the event to add
* @param error If true, text is italicized
*/
public synchronized void addEvent(final String eventString, final boolean error) {
EventQueue.invokeLater(new Runnable() {
public void run() {
Document doc = pane.getDocument();
Style style = pane.getStyle(error ? "italic" : "regular");
try {
doc.insertString(doc.getLength(), eventString, style);
//pane.setCaretPosition(doc.getLength());
} catch (BadLocationException ble) {
System.err.println("Couldn't insert text.");
}
}
});
}
}