package org.buzztroll.mud;
import java.lang.*;
import java.util.Vector;
import java.util.StringTokenizer;
import java.util.Hashtable;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.border.*;
public
class EmacsTextBox
extends JTextArea
implements KeyListener
{
protected Vector bangVector = new Vector(25, 25);
protected int bangIndex = 0;
public
EmacsTextBox()
{
super();
addKeyListener(this);
}
public String getRawText() {
String txt = getText();
int len = txt.length();
if (len > 0 && txt.charAt(len - 1) == '\n') {
return txt.substring(0, len-1);
} else {
return txt;
}
}
protected
void processComponentKeyEvent(
KeyEvent e)
{
if(e == null)
{
return;
}
if(e.getKeyChar() != '\n')
{
super.processComponentKeyEvent(e);
}
else
{
String msg = this.getText();
if(msg.equals(""))
{
return;
}
if(msg.charAt(0) == '\n' &&
msg.length() > 1)
{
msg = msg.substring(1);
}
if(msg.charAt(msg.length() - 1) == '\n')
{
msg = msg.substring(0, msg.length()-1);
}
if(msg.length() > 0)
{
bangVector.addElement(msg);
bangIndex = bangVector.size();
}
this.setText(msg);
}
}
public void
keyReleased(
KeyEvent ke)
{
}
public void
keyTyped(
KeyEvent ke)
{
}
public void
keyPressed(
KeyEvent ke)
{
int keyCode;
String msg;
keyCode = ke.getKeyCode();
try
{
if(keyCode == KeyEvent.VK_UP)
{
bangIndex--;
if(bangIndex >= 0)
{
msg = (String)bangVector.elementAt(bangIndex);
this.setText(msg);
}
else if(bangIndex == -1)
{
bangIndex = 0;
msg = (String)bangVector.elementAt(bangIndex);
this.setText(msg);
}
}
else if(keyCode == KeyEvent.VK_DOWN)
{
bangIndex++;
if(bangIndex < bangVector.size())
{
msg = (String)bangVector.elementAt(bangIndex);
this.setText(msg);
}
else
{
bangIndex = bangVector.size();
this.setText("");
}
}
else if(keyCode == KeyEvent.VK_ENTER)
{
}
}
catch(Exception e)
{
bangIndex = 0;
}
}
}