diff src/samer/core_/util/swing/Console.java @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/samer/core_/util/swing/Console.java	Tue Jan 17 17:50:20 2012 +0000
@@ -0,0 +1,105 @@
+/*
+ *	Console.java	
+ *
+ *	Copyright (c) 2000, Samer Abdallah, King's College London.
+ *	All rights reserved.
+ *
+ *	This software is provided AS iS and WITHOUT ANY WARRANTY; 
+ *	without even the implied warranty of MERCHANTABILITY or 
+ *	FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+package samer.core.util.swing;
+import  samer.core.*;
+import  java.awt.*;
+import  java.io.*;
+import	javax.swing.*;
+
+/**
+		<p>
+		A class which can display messages in a scrolling text
+		area, which can be put in another container or its own frame.
+		There is a static reference to the current Console so
+		that anyone can display messages without worrying about
+		who created the Console.
+
+		<p>
+		Associated with the Console are a Writer and an OutputStream
+		so that any method which writes to a Java IO stream can be
+		redirected to the current console.
+
+ */
+
+public class Console extends JTextArea implements Agent
+{
+	private Writer			writer=null;
+	private OutputStream	ostream=null;
+
+	public Console() { this(true); }
+	public Console(boolean setAsDefault)
+	{
+		super("",16,40);
+
+		// setBackground( X.color(Shell.datum("swing.output.console.background"), getBackground()));
+		// setForeground( X.color(Shell.datum("swing.output.console.foreground"), getForeground()));
+		Font fnt=X.font(Shell.datum("swing.output.console.font"),null);
+		if (fnt!=null) setFont(fnt);
+
+		setEditable(false);
+		setLineWrap(true);
+
+		writer  = new Writer();
+		ostream = new OutputStream();
+	}
+
+	public String toString() { return "samer.core.util.swing.Console"; }
+	public void write( String s) { append(s); }
+	public void getCommands(Agent.Registry r) { r.add("clear").add("setfont"); }
+	public void execute(String cmd, Environment env) throws Exception
+	{
+		if (cmd.equals("clear")) setText("");
+		else if (cmd.equals("setfont")) 
+			setFont(X.font(env.datum("font"),null));
+	}
+
+	public Writer getWriter() {
+		if (writer==null) writer = new Writer();
+		return writer;
+	}
+
+	public OutputStream getStream() {
+		if (ostream==null) ostream = new OutputStream();
+		return ostream;
+	}
+
+	class Writer extends java.io.Writer
+	{
+		StringBuffer	str;
+
+		Writer() { str = new StringBuffer(); }
+
+		public void write( char buf[], int off, int len) {
+			str.append( buf, off, len); // indentation
+		}
+
+		public void flush() { 
+//			append( str.toString()); 
+			try { append( str.toString()); }
+			catch(IOException ex) { /* eh? */}
+			str.setLength(0); 
+		}
+		public void close() { }
+	}
+	
+	class OutputStream extends java.io.OutputStream
+	{
+		StringBuffer	str;
+
+		OutputStream() { str = new StringBuffer(); }
+
+		public void write( int b) { str.append( (char)b); }		
+		public void flush()	{ append( str.toString()); str.setLength(0); }
+		public void close() { }
+	}
+}
+