package org.buzztroll.mud;
import java.lang.*;
import java.awt.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.ozten.font.JFontChooser;
public class
ActionPanel
extends TransformPanel
implements ItemListener,
ActionListener,
ChangeListener
{
protected JTextField parseText;
protected JComboBox actionCombo;
protected JComboBox positionCombo;
protected JList actionList;
protected CardLayout cardLayout;
protected JTextField runText;
protected JTextField urlText;
protected JColorChooser colorPicker;
protected JPanel colorPanel;
protected JButton colorButton;
protected JButton fontButton;
protected JSlider intensitySlider;
protected JButton addButton;
protected JButton removeButton;
protected MudFrame owner;
protected Vector actionVector = new Vector(10, 10);
protected JPanel cardPanel;
private static final String RUN_CARD = "RUN_CARD";
private static final String COLOR_CARD = "COLOR_CARD";
private static final String NOTIFY_CARD = "NOTIFY_CARD";
private static final String INTENSITY_CARD = "INTENSITY_CARD";
private static final String FONT_CARD = "FONT_CARD";
private static final String IGNORE_CARD = "IGNORE_CARD";
private static final String PLAY_CARD = "PLAY_CARD";
private static final String SPEAK_CARD = "SPEAK_CARD";
public
ActionPanel(
MudFrame owner)
{
super();
JPanel topPanel;
JPanel buttonPanel;
JPanel tempP;
this.owner = owner;
addButton = new JButton("Add");
removeButton = new JButton("Remove");
addButton.addActionListener(this);
removeButton.addActionListener(this);
JScrollPane scrollPane = new JScrollPane();
parseText = new JTextField("");
actionList = new JList(actionVector);
scrollPane.getViewport().setView(actionList);
MyCellRenderer cr = new MyCellRenderer();
actionList.setCellRenderer(cr);
positionCombo = new JComboBox();
positionCombo.addItem("Starts with");
positionCombo.addItem("Contains");
positionCombo.addItem("Ends with");
actionCombo = new JComboBox();
actionCombo.addItem("Run");
actionCombo.addItem("Color");
actionCombo.addItem("Notify");
actionCombo.addItem("Intensity");
actionCombo.addItem("Font");
actionCombo.addItem("Ignore");
actionCombo.addItem("Play");
actionCombo.addItem("Speak");
JPanel intensityPanel = new JPanel();
intensityPanel.setLayout(new BorderLayout());
intensitySlider = new JSlider(-100, 100, 0);
intensityPanel.add("Center", intensitySlider);
intensitySlider.addChangeListener(this);
actionCombo.addItemListener(this);
topPanel = new JPanel();
colorPanel = new JPanel();
runText = new JTextField("");
urlText = new JTextField();
colorPicker = new JColorChooser();
cardPanel = new JPanel();
cardLayout = new CardLayout();
cardPanel.setLayout(cardLayout);
fontButton = new JButton("Font");
fontButton.addActionListener(this);
colorButton = new JButton("Color");
colorButton.addActionListener(this);
cardPanel.add(runText, RUN_CARD);
cardPanel.add(colorButton, COLOR_CARD);
cardPanel.add(new JPanel(), NOTIFY_CARD);
cardPanel.add(intensityPanel, INTENSITY_CARD);
cardPanel.add(fontButton, FONT_CARD);
cardPanel.add(new JPanel(), IGNORE_CARD);
cardPanel.add(urlText, PLAY_CARD);
cardPanel.add(new JPanel(), SPEAK_CARD);
cardLayout.show(cardPanel, RUN_CARD);
topPanel.setLayout(new GridLayout(1, 4));
topPanel.add(positionCombo);
topPanel.add(parseText);
topPanel.add(actionCombo);
topPanel.add(cardPanel);
buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4, 1));
buttonPanel.add(new JPanel());
buttonPanel.add(addButton);
buttonPanel.add(removeButton);
tempP = new JPanel();
tempP.setLayout(new BorderLayout());
tempP.add("North", topPanel);
tempP.add("Center", scrollPane);
this.setLayout(new BorderLayout());
this.add("Center", tempP);
this.add("East", buttonPanel);
}
public String
getName()
{
return "Action";
}
public void
clear()
{
actionVector.clear();
}
public DisplayMessage
transform(
DisplayMessage msg)
{
int ctr;
for(ctr = 0; ctr < actionVector.size(); ctr++)
{
MessageTransformer mt = (MessageTransformer)
actionVector.elementAt(ctr);
msg = mt.transform(msg);
}
return msg;
}
public void
parse(
Document doc)
{
Node n;
Node nj;
Element rootE = doc.getDocumentElement();
n = rootE.getFirstChild();
while(n != null)
{
if(Node.ELEMENT_NODE == n.getNodeType())
{
Element e = (Element)n;
if(e.getTagName().equals("action"))
{
nj = n.getFirstChild();
while(nj != null)
{
if(Node.ELEMENT_NODE == nj.getNodeType())
{
Element ej = (Element)nj;
/* get server name host port and auth */
if(ej.getTagName().equals("notify"))
{
NotifyMessageTransformer nmt =
new NotifyMessageTransformer(owner);
nmt.parse(ej);
actionVector.add(nmt);
}
else if(ej.getTagName().equals("color"))
{
ColorMessageTransformer cmt =
new ColorMessageTransformer();
cmt.parse(ej);
actionVector.add(cmt);
}
else if(ej.getTagName().equals("run"))
{
RunMessageTransformer rmt =
new RunMessageTransformer();
rmt.parse(ej);
actionVector.add(rmt);
}
else if(ej.getTagName().equals("intensify"))
{
IntensityMessageTransformer imt =
new IntensityMessageTransformer();
imt.parse(ej);
actionVector.add(imt);
}
else if(ej.getTagName().equals("font"))
{
FontMessageTransformer fmt =
new FontMessageTransformer();
fmt.parse(ej);
actionVector.add(fmt);
}
else if(ej.getTagName().equals("ignore"))
{
IgnoreMessageTransformer imt =
new IgnoreMessageTransformer();
imt.parse(ej);
actionVector.add(imt);
}
else if(ej.getTagName().equals("play"))
{
PlayMessageTransformer imt =
new PlayMessageTransformer();
imt.parse(ej);
actionVector.add(imt);
}
else if(ej.getTagName().equals("speak"))
{
SpeechMessageTransformer imt =
new SpeechMessageTransformer();
imt.parse(ej);
actionVector.add(imt);
}
}
nj = nj.getNextSibling();
}
}
}
n = n.getNextSibling();
}
actionList.updateUI();
}
public Node
createDoc(
Document doc)
throws Exception
{
Element base = doc.createElement("action");
for(int ctr = 0; ctr < actionVector.size(); ctr++)
{
MessageTransformer mt = (MessageTransformer)
actionVector.elementAt(ctr);
Element kid = mt.createDoc(doc);
base.appendChild(kid);
}
return base;
}
public void
actionPerformed(
ActionEvent e)
{
if(e.getSource() == colorButton)
{
Color c = colorPicker.showDialog(this, "Pick Color",
colorButton.getBackground());
colorButton.setBackground(c);
intensitySlider.setBackground(c);
}
else if(e.getSource() == addButton)
{
MessageTransformer mt;
int position = positionCombo.getSelectedIndex();
if(actionCombo.getSelectedIndex() == 0)
{
RunMessageTransformer rmt =
new RunMessageTransformer(
parseText.getText(),
runText.getText(),
position);
mt = rmt;
}
else if(actionCombo.getSelectedIndex() == 1)
{
ColorMessageTransformer cmt =
new ColorMessageTransformer(
parseText.getText(),
colorButton.getBackground(),
position);
mt = cmt;
}
else if(actionCombo.getSelectedIndex() == 2)
{
NotifyMessageTransformer nmt =
new NotifyMessageTransformer(
parseText.getText(),
this.owner,
position);
mt = nmt;
}
else if(actionCombo.getSelectedIndex() == 3)
{
IntensityMessageTransformer nmt =
new IntensityMessageTransformer(
parseText.getText(),
intensitySlider.getValue(),
position);
mt = nmt;
}
else if(actionCombo.getSelectedIndex() == 4)
{
FontMessageTransformer fmt =
new FontMessageTransformer(
parseText.getText(),
fontButton.getFont(),
position);
mt = fmt;
}
else if(actionCombo.getSelectedIndex() == 5)
{
IgnoreMessageTransformer imt =
new IgnoreMessageTransformer(
parseText.getText(),
position);
mt = imt;
}
else if(actionCombo.getSelectedIndex() == 6)
{
PlayMessageTransformer imt =
new PlayMessageTransformer(parseText.getText(),
position,
urlText.getText());
mt = imt;
}
else if(actionCombo.getSelectedIndex() == 7)
{
SpeechMessageTransformer imt =
new SpeechMessageTransformer(parseText.getText(),
position);
mt = imt;
}
else
{
return;
}
actionVector.addElement(mt);
actionList.updateUI();
}
else if(e.getSource() == removeButton)
{
int ndx = actionList.getSelectedIndex();
actionVector.removeElementAt(ndx);
actionList.updateUI();
}
else if(e.getSource() == fontButton)
{
Font f = JFontChooser.showDialog(this);
fontButton.setFont(f);
}
}
public void
stateChanged(
ChangeEvent e)
{
if(e.getSource() == intensitySlider)
{
Color c = IntensityMessageTransformer.intensify(
colorButton.getBackground(),
intensitySlider.getValue());
intensitySlider.setBackground(c);
}
}
public void
itemStateChanged(
ItemEvent e)
{
if(actionCombo.getSelectedIndex() == 0)
{
cardLayout.show(cardPanel, RUN_CARD);
}
else if(actionCombo.getSelectedIndex() == 1)
{
cardLayout.show(cardPanel, COLOR_CARD);
}
else if(actionCombo.getSelectedIndex() == 2)
{
cardLayout.show(cardPanel, NOTIFY_CARD);
}
else if(actionCombo.getSelectedIndex() == 3)
{
cardLayout.show(cardPanel, INTENSITY_CARD);
}
else if(actionCombo.getSelectedIndex() == 4)
{
cardLayout.show(cardPanel, FONT_CARD);
}
else if(actionCombo.getSelectedIndex() == 5)
{
cardLayout.show(cardPanel, IGNORE_CARD);
}
else if(actionCombo.getSelectedIndex() == 6)
{
cardLayout.show(cardPanel, PLAY_CARD);
}
else if(actionCombo.getSelectedIndex() == 7)
{
cardLayout.show(cardPanel, SPEAK_CARD);
}
}
class
MyCellRenderer
implements ListCellRenderer
{
public
MyCellRenderer()
{
}
public Component
getListCellRendererComponent(
JList list,
Object value, // value to display
int index, // cell index
boolean isSelected, // is the cell selected
boolean cellHasFocus) // the list and the cell have the focus
{
MessageTransformer mt = (MessageTransformer) value;
JComponent c = mt.getRendererComponent();
if(isSelected)
{
c.setBackground(list.getSelectionBackground());
}
else
{
c.setBackground(list.getBackground());
}
c.setEnabled(list.isEnabled());
c.setOpaque(true);
return c;
}
}
}