import java.io.PipedOutputStream;
import java.io.PrintStream;
+import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
+import javax.swing.border.Border;
+import javax.swing.text.DefaultCaret;
-import org.apache.logging.log4j.Level;
-
-import jalview.bin.Cache;
+import jalview.log.JLoggerI.LogLevel;
+import jalview.log.JLoggerLog4j;
+import jalview.log.JalviewAppender;
import jalview.util.ChannelProperties;
-import jalview.util.Log4j;
import jalview.util.MessageManager;
+import jalview.util.Platform;
/**
* Simple Jalview Java Console. Version 1 - allows viewing of console output
private int MIN_HEIGHT = 250;
- private JComboBox<Level> logLevelCombo = new JComboBox<Level>();
+ private JComboBox<LogLevel> logLevelCombo = new JComboBox<LogLevel>();
- protected Level startingLogLevel = Level.INFO;
+ protected LogLevel startingLogLevel = LogLevel.INFO;
public Console()
{
// textArea = cpt.getTextArea();
textArea = new JTextArea();
textArea.setEditable(false);
+ // autoscroll
+ DefaultCaret caret = (DefaultCaret) textArea.getCaret();
+ caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+ // toggle autoscroll by clicking on the text area
+ Border pausedBorder = BorderFactory.createMatteBorder(2, 2, 2, 2,
+ textArea.getForeground());
+ Border noBorder = BorderFactory.createEmptyBorder(2, 2, 2, 2);
+ JScrollPane scrollPane = new JScrollPane(textArea);
+ scrollPane.setBorder(noBorder);
+ textArea.addMouseListener(new MouseAdapter()
+ {
+ public void mouseClicked(MouseEvent e)
+ {
+ if (e.getButton() == MouseEvent.BUTTON1)
+ {
+ if (caret.getUpdatePolicy() == DefaultCaret.ALWAYS_UPDATE)
+ {
+ caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
+ scrollPane.setBorder(pausedBorder);
+ }
+ else
+ {
+ caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+ textArea.setCaretPosition(textArea.getDocument().getLength());
+ scrollPane.setBorder(noBorder);
+ }
+ }
+ }
+ });
+
JButton clearButton = new JButton(
MessageManager.getString("action.clear"));
JButton copyToClipboardButton = new JButton(
JLabel logLevelLabel = new JLabel(
MessageManager.getString("label.log_level") + ":");
- // logLevelCombo.addItem(Level.ALL);
- logLevelCombo.addItem(Level.TRACE);
- logLevelCombo.addItem(Level.DEBUG);
- logLevelCombo.addItem(Level.INFO);
- logLevelCombo.addItem(Level.WARN);
- // logLevelCombo.addItem(Level.ERROR);
- // logLevelCombo.addItem(Level.FATAL);
- // logLevelCombo.addItem(Level.OFF);
+ // logLevelCombo.addItem(LogLevel.ALL);
+ logLevelCombo.addItem(LogLevel.TRACE);
+ logLevelCombo.addItem(LogLevel.DEBUG);
+ logLevelCombo.addItem(LogLevel.INFO);
+ logLevelCombo.addItem(LogLevel.WARN);
+ // logLevelCombo.addItem(LogLevel.ERROR);
+ // logLevelCombo.addItem(LogLevel.FATAL);
+ // logLevelCombo.addItem(LogLevel.ERROR);
+ // logLevelCombo.addItem(LogLevel.OFF);
// set startingLogLevel
- startingLogLevel = Cache.log == null ? Level.INFO
- : Cache.log.getLevel();
+ startingLogLevel = jalview.bin.Console.log == null ? LogLevel.INFO
+ : jalview.bin.Console.log.getLevel();
setChosenLogLevelCombo();
logLevelCombo.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
- if (Cache.log != null)
+ if (jalview.bin.Console.log != null)
{
- Log4j.setLevel(Cache.log,
- (Level) logLevelCombo.getSelectedItem());
+ jalview.bin.Console.log
+ .setLevel((LogLevel) logLevelCombo.getSelectedItem());
}
}
// frame = cpt;
frame.getContentPane().setLayout(new BorderLayout());
- frame.getContentPane().add(new JScrollPane(textArea),
- BorderLayout.CENTER);
+ frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
JPanel southPanel = new JPanel();
southPanel.setLayout(new GridBagLayout());
setChosenLogLevelCombo(startingLogLevel);
}
- private void setChosenLogLevelCombo(Level setLogLevel)
+ private void setChosenLogLevelCombo(LogLevel setLogLevel)
{
logLevelCombo.setSelectedItem(setLogLevel);
if (!logLevelCombo.getSelectedItem().equals(setLogLevel))
{
// setLogLevel not (yet) in list
- if (setLogLevel != null && setLogLevel instanceof Level)
+ if (setLogLevel != null && setLogLevel instanceof LogLevel)
{
// add new item to list (might be set via .jalview_properties)
boolean added = false;
for (int i = 0; i < logLevelCombo.getItemCount(); i++)
{
- Level l = (Level) logLevelCombo.getItemAt(i);
- if (l.isMoreSpecificThan(setLogLevel))
+ LogLevel l = (LogLevel) logLevelCombo.getItemAt(i);
+ if (l.compareTo(setLogLevel) >= 0)
{
logLevelCombo.insertItemAt(setLogLevel, i);
added = true;
}
else
{
- logLevelCombo.setSelectedItem(Level.INFO);
+ logLevelCombo.setSelectedItem(LogLevel.INFO);
}
}
}
frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT));
// desktop.add(frame);
initConsole(false);
- JalviewAppender jappender = new JalviewAppender();
- JalviewAppender.setTextArea(textArea);
- Log4j.addAppenderToRootLogger(jappender);
+ LogLevel level = (LogLevel) logLevelCombo.getSelectedItem();
+ if (!Platform.isJS())
+ {
+ JalviewAppender jappender = new JalviewAppender(level);
+ JalviewAppender.setTextArea(textArea);
+ jappender.start();
+ if (jalview.bin.Console.log != null
+ && jalview.bin.Console.log instanceof JLoggerLog4j)
+ {
+ JLoggerLog4j.addAppender(jalview.bin.Console.log, jappender);
+ }
+ }
}
public synchronized void stopConsole()
else
{
// reset log level to what it was before
- if (Cache.log != null)
+ if (jalview.bin.Console.log != null)
{
- Log4j.setLevel(Cache.log, startingLogLevel);
+ jalview.bin.Console.log.setLevel(startingLogLevel);
}
unredirectStreams();