package org.buzztroll.mud;
import java.lang.*;
import java.awt.*;
import java.util.*;
import java.net.*;
import java.io.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;
public class
MudFrame
extends JFrame
implements WindowListener,
ActionListener,
FilenameFilter,
ItemListener
{
protected JTabbedPane tabs;
protected NotifyWindow notifyWindow;
protected JMenuBar menuBar;
protected JMenuItem addMenuItem;
protected JMenuItem exitMenuItem;
protected ButtonGroup lafMenuGroup;
protected int connections = 0;
protected String confDir;
protected UIManager.LookAndFeelInfo lafInfo[];
protected JRadioButtonMenuItem labButton[];
protected JSplitPane splitP = null;
protected Vector connectionVector;
public static void
main(
String args[])
{
String fname;
fname = System.getProperty("user.home") +
System.getProperty("file.separator") + ".btmudrc" +
System.getProperty("file.separator");
try
{
File f = new File(fname);
if(!f.exists())
{
f.mkdir();
}
}
catch (Exception e)
{
System.out.println(e);
return;
}
MudFrame mf = new MudFrame(fname);
}
public
MudFrame(
String confDir)
{
super("BuzzTroll Mud");
String fileList[];
int ctr;
this.confDir = confDir;
/* set up frame */
this.addWindowListener(this);
this.setSize(640, 500);
this.setLocation(1, 15);
this.setBackground(Color.black);
this.setBackground(Color.black);
connectionVector = new Vector(10, 10);
tabs = new JTabbedPane();
menuBar = new JMenuBar();
JMenu jmu = new JMenu("File");
addMenuItem = jmu.add("Add");
exitMenuItem = jmu.add("Exit");
menuBar.add(jmu);
lafMenuGroup = new ButtonGroup();
jmu = new JMenu("Look and Feel");
lafInfo = UIManager.getInstalledLookAndFeels();
labButton = new JRadioButtonMenuItem[lafInfo.length];
for(ctr = 0; ctr < lafInfo.length; ctr++)
{
System.out.println(lafInfo[ctr].getClassName());
labButton[ctr] = new JRadioButtonMenuItem(lafInfo[ctr].getName());
labButton[ctr].addItemListener(this);
jmu.add(labButton[ctr]);
lafMenuGroup.add(labButton[ctr]);
// test to ssee if LaF is avalable
try
{
Class lnfClass = Class.forName(lafInfo[ctr].getClassName());
LookAndFeel newLAF = (LookAndFeel)(lnfClass.newInstance());
labButton[ctr].setEnabled(newLAF.isSupportedLookAndFeel());
}
catch (Exception e)
{
labButton[ctr].setEnabled(false);
}
}
menuBar.add(jmu);
addMenuItem.addActionListener(this);
exitMenuItem.addActionListener(this);
this.setJMenuBar(menuBar);
/*
* walk through all mud clients
* add new pane every other client
*/
try
{
File fDir = new File(confDir);
if(!fDir.isDirectory())
{
throw new Exception();
}
fileList = fDir.list(this);
for(ctr = 0; ctr < fileList.length; ctr++)
{
try
{
String name = new String(confDir + fileList[ctr]);
MudClient mc = new MudClient(this, name);
/* add new tab */
if(connections % 2 == 0)
{
splitP = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
tabs.add(mc.toString(), splitP);
}
splitP.add(mc);
System.out.println(name);
connectionVector.add(mc);
connections++;
}
catch(Exception e)
{
e.printStackTrace();
System.err.println(e);
System.out.println("couldn't use " + fileList[ctr]);
}
}
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add("Center", tabs);
this.show();
this.toFront();
}
catch(Exception e)
{
e.printStackTrace();
System.out.println(e);
System.exit(-2);
}
}
public void
actionPerformed(
ActionEvent e)
{
if(e.getSource() == addMenuItem)
{
System.out.println("Trying to add new Client");
try
{
MudClient mc = new MudClient(this);
/* add new tab */
if(connections % 2 == 0)
{
splitP = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
tabs.add(mc.toString(), splitP);
}
splitP.add(mc);
connectionVector.add(mc);
connections++;
}
catch(Exception ex)
{
ex.printStackTrace();
System.err.println(ex);
}
}
else if(e.getSource() == exitMenuItem)
{
this.dispose();
System.exit(0);
}
}
public void
itemStateChanged(
ItemEvent e)
{
int ctr;
for(ctr = 0; ctr < labButton.length; ctr++)
{
if(e.getSource() == labButton[ctr])
{
try
{
UIManager.setLookAndFeel(lafInfo[ctr].getClassName());
SwingUtilities.updateComponentTreeUI(this);
SwingUtilities.updateComponentTreeUI(notifyWindow);
for(int ctr2 = 0; ctr2 < connectionVector.size(); ctr2++)
{
MudClient mc = (MudClient)
connectionVector.elementAt(ctr2);
mc.updateLaF();
}
}
catch(Exception ex)
{
System.out.println("couldn't load " +
lafInfo[ctr].getName());
System.out.println(ex);
}
}
}
}
public void
setNotification(
String msg)
{
if (notifyWindow == null) {
notifyWindow = new NotifyWindow(this);
}
notifyWindow.addMsg(msg);
}
public void
windowOpened(
WindowEvent we)
{
}
public void
windowClosed(
WindowEvent we)
{
System.exit(0);
}
public void
windowClosing(
WindowEvent we)
{
this.dispose();
}
public void
windowDeactivated(
WindowEvent we)
{
}
public void
windowActivated(
WindowEvent we)
{
}
public void
windowIconified(
WindowEvent we)
{
}
public void
windowDeiconified(
WindowEvent we)
{
}
public boolean
accept(
File f,
String name)
{
return (name.endsWith(".xml"));
}
}