Jriver/
Jriver/src/org/jriver/core/
Jriver/src/org/jriver/core/interactive/
Jriver/src/org/jriver/lib/
Jriver/src/org/jriver/lib/daemon/
Jriver/src/org/jriver/lib/events/
Jriver/src/org/jriver/lib/interfaces/
Jriver/src/org/jriver/lib/std/
Jriver/src/org/jriver/telnet/
Jriver/src/org/jriver/telnet/.svn/
Jriver/src/org/jriver/telnet/.svn/prop-base/
Jriver/src/org/jriver/telnet/.svn/text-base/
/*
 * Copyright 2007 Kevin Roe, Daniel Mccarney
 * This file is part of Jriver.
 *
 * Jriver is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * Jriver is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
package org.jriver.lib.bin;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import org.jriver.core.*;

public class ObjTree extends JPanel
{
	private DefaultMutableTreeNode root;
	private JTree tree;
	private JScrollPane treeView;
	
	private JLabel lblID = new JLabel("ID: ");
	private JTextField lblIDValue = new JTextField("null");
	
	private JLabel lblHash = new JLabel("Hash: ");
	private JTextField lblHashValue = new JTextField("null");
	
	private JLabel lblName = new JLabel("Name: ");
	private JTextField lblNameValue = new JTextField("null");
	
	private JLabel lblContainer = new JLabel("Container: ");
	private JTextField lblContainerValue = new JTextField("false");
	
	private JLabel lblEnv = new JLabel("Env: ");
	private JTextField lblEnvValue = new JTextField("null");
	
	public static void main(String[] args)
	{
		@SuppressWarnings("unused")
		ObjTree tree = new ObjTree();
	}
	
	public ObjTree()
	{
		super(new FlowLayout());
		try {
			UIManager.setLookAndFeel(
					UIManager.getSystemLookAndFeelClassName());
		} catch (Exception e) {
			System.err.println("Couldn't use system look and feel.");
		}
		
		JFrame frame = new JFrame("TreeDemo");
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setResizable(false);

    //Create and set up the content pane.
    setOpaque(true); //content panes must be opaque
    frame.setContentPane(this);

    //Display the window.
/*
    
  	root = new DefaultMutableTreeNode(new Master());
	   
		MudObject room = new MudObject();
		room.setID("A Small Rustic Cabin");
		MudObject player = new MudObject();
		player.setID("Enigma");
		MudObject sword = new MudObject(false);
		sword.setID("A Sword");
		MudObject sword2 = new MudObject(false);
		sword2.setID("A Sword");
		MudObject bag = new MudObject();
		bag.setID("A Backpack");
		MudObject torch = new MudObject(false);
		torch.setID("A Torch");
		
*/
		root = MudDriver.getMudDriver().getLoginRoom().getRootNode();
/*
		try
		{
			player.insertContent(sword);
			room.insertContent(player);
			addObject(room);
			player.insertContent(sword2);
			player.insertContent(bag);
			bag.insertContent(torch);
			sword2.drop();
			sword2.drop();
		} catch(IllegalStateException e) {
			System.err.println("Attemtping to put an object inside something that isn't a container.");
		}
*/
		
		tree = new JTree(root);
		tree.addTreeSelectionListener(new treeListener());
		
		JScrollPane treeView = new JScrollPane(tree);
		
		JPanel itemPanel = new JPanel();
		itemPanel.setPreferredSize(new Dimension(250, 300));
		itemPanel.setBorder(new TitledBorder("Obj. Details"));
		
		lblID.setPreferredSize(new Dimension(80,10));
		lblHash.setPreferredSize(new Dimension(80,10));
		lblName.setPreferredSize(new Dimension(80,10));
		lblContainer.setPreferredSize(new Dimension(80,10));
		lblEnv.setPreferredSize(new Dimension(80,10));
		
		lblIDValue.setPreferredSize(new Dimension(120,20));
		lblIDValue.setEditable(false);
		lblHashValue.setPreferredSize(new Dimension(100,20));
		lblHashValue.setEditable(false);
		lblNameValue.setPreferredSize(new Dimension(100,20));
		lblNameValue.setEditable(false);
		lblContainerValue.setPreferredSize(new Dimension(100,20));
		lblContainerValue.setEditable(false);
		lblEnvValue.setPreferredSize(new Dimension(100,20));
		lblEnvValue.setEditable(false);
		
		itemPanel.add(lblID);
		itemPanel.add(lblIDValue);
		itemPanel.add(lblHash);
		itemPanel.add(lblHashValue);
		itemPanel.add(lblName);
		itemPanel.add(lblNameValue);
		itemPanel.add(lblContainer);
		itemPanel.add(lblContainerValue);
		itemPanel.add(lblEnv);
		itemPanel.add(lblEnvValue);	
		
		JScrollPane itemView = new JScrollPane(itemPanel);
		
    	JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treeView, itemView);
    	splitPane.setOneTouchExpandable(true);
    	    	
    	add(splitPane);
    	frame.pack();
    	frame.setVisible(true);
		
	}
	
	public void addObject(MudObject ob)
	{
		root.add(ob.getRootNode());
	}
	
	private class treeListener implements TreeSelectionListener
	{
		public void valueChanged(TreeSelectionEvent e) 
		{
			DefaultMutableTreeNode node = (DefaultMutableTreeNode)
            	tree.getLastSelectedPathComponent();

			if (node == null)
				return;
			
			MudObject nodeInfo = (MudObject) node.getUserObject();
			MudObject nodeEnv = null;
			
			if(nodeInfo.environment() != null)
			{
				nodeEnv = (MudObject) nodeInfo.environment().getUserObject();
				lblEnvValue.setText(nodeEnv.getID());
			} else {
				lblEnvValue.setText("null");
			}
				
			lblIDValue.setText(nodeInfo.getID());
			lblHashValue.setText(String.valueOf(nodeInfo.hashCode()));
			lblNameValue.setText(nodeInfo.queryName());
			lblContainerValue.setText(String.valueOf(nodeInfo.isContainer()));
			
		}
	}
}