package org.myrobotlab.control;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import org.myrobotlab.control.widget.ImageButton;
import org.myrobotlab.framework.Message;
import org.myrobotlab.service.GUIService;
public class LogGUI extends ServiceGUI implements ActionListener {
static final long serialVersionUID = 1L;
JTextArea log = new JTextArea(20, 40);
ImageButton clearButton;
public LogGUI(final String boundServiceName, final GUIService myService, final JTabbedPane tabs) {
super(boundServiceName, myService, tabs);
}
@Override
public void actionPerformed(ActionEvent action) {
Object o = action.getSource();
if (o == clearButton) {
log.setText("");
}
}
@Override
public void attachGUI() {
subscribe("log", "log", Message.class);
}
@Override
public void detachGUI() {
unsubscribe("log", "log", Message.class);
}
@Override
public void init() {
display.setLayout(new BorderLayout());
clearButton = new ImageButton("Log", "clear", this);
JPanel toolbar = new JPanel(new BorderLayout());
toolbar.add(clearButton, BorderLayout.EAST);
display.add(toolbar, BorderLayout.PAGE_START);
log.setEditable(false);
JScrollPane scrollPane = new JScrollPane(log);
display.add(scrollPane, BorderLayout.CENTER);
}
public void log(Message m) {
StringBuffer data = null;
if (m.data != null) {
data = new StringBuffer();
for (int i = 0; i < m.data.length; ++i) {
data.append(m.data[i]);
if (m.data.length > 1) {
data.append(" ");
}
}
}
log.append(m.sender + "." + m.sendingMethod + "->" + data + "\n");
log.setCaretPosition(log.getDocument().getLength()); // FIXME - do it
// the new Java
// 1.6 way
}
}