package net.sf.colossus.gui; import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import java.awt.Toolkit; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import net.sf.colossus.common.Options; import net.sf.colossus.guiutil.SaveWindow; import net.sf.colossus.util.SwingDocumentLogHandler; /** * Simple log window * * @author David Ripton */ public final class LogWindow extends JTextArea { private final JFrame logFrame; private final JScrollPane scrollPane; private final Options options; private Point location; private Dimension size; private final SaveWindow saveWindow; private final Logger logger; private final SwingDocumentLogHandler handler; public LogWindow(Options options, Logger logger, boolean showInitially) { this.options = options; this.logger = logger; setEditable(false); setBackground(Color.white); logFrame = new JFrame("Log Window"); logFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { clearAllText(); LogWindow.this.options.setOption(Options.showLogWindow, false); } }); scrollPane = new JScrollPane(this); logFrame.getContentPane().add(scrollPane); logFrame.pack(); saveWindow = new SaveWindow(options, "LogWindow"); size = saveWindow.loadSize(); if (size == null) { size = getMinimumSize(); } logFrame.setSize(size); location = saveWindow.loadLocation(); if (location == null) { Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int y = d.height - size.height; location = new Point(0, y); } logFrame.setLocation(location); handler = new SwingDocumentLogHandler(this); logger.addHandler(handler); setDocument(handler.getDocument()); logFrame.setVisible(showInitially); } @Override public void append(String s) { super.append(s); this.setCaretPosition(getDocument().getLength() - 1); } public void clearAllText() { this.setText("\nAll text before here was wiped out " + "when LogWindow was closed.\n\n"); } @Override public Dimension getMinimumSize() { Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); return new Dimension(Math.min(d.width, 800), 100); } public void dispose() { saveWindow.save(logFrame); logFrame.dispose(); logger.removeHandler(handler); } @Override public void setVisible(boolean show) { logFrame.setVisible(show); } }