import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;

import javax.swing.*;
import javax.swing.tree.TreePath;
import java.util.*;
import java.net.URL;

import java.awt.Label;
import java.awt.Panel;
import java.awt.ScrollPane;

public class Test extends JApplet {
    private SelfModifyingMenu toolsMenu;
    private Vector list;
    private TreePanel hashTree;

    private ImageIcon icon;
    protected String iconFilename = "images/middle.gif";
    private static boolean DEBUG = true;

    private PlotPanel ppanel;
    private boolean plotted = false;
    private Container contentPane;

    // AWT Version
    //private ScrollPane plotScrollPane;
    //private Panel plotpanel;

    // Swing Version
    private JScrollPane plotScrollPane;
    private JPanel plotpanel;

    public void init() {
	JMenuBar menuBar = new JMenuBar();
	list = new Vector();

	createMenus(menuBar);
	setJMenuBar(menuBar);

        URL iconURL = getURL(iconFilename);
        icon = new ImageIcon(iconURL, "a splat");

	hashTree = new TreePanel(this, icon);
	JScrollPane hashPane = new JScrollPane(hashTree);
	//hashPane.setPreferredSize(new Dimension(500,500));
	hashPane.setBorder(BorderFactory.createTitledBorder("Model Manager"));
	//hashTree.expandPath(new TreePath(hashTree.getModel().getRoot()));


	// AWT version
	/*PlotPanel ppanel = new PlotPanel();
	list.addElement(new Integer(5));
	ppanel.update(list);
	plotpanel = new Panel(new VListLayout(40, 30));
	plotpanel.add(ppanel);
        plotScrollPane = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
        plotScrollPane.add(plotpanel);
	plotpanel.setVisible(false);*/


	// Swing version
        PlotPanel ppanel = new PlotPanel();
        list.addElement(new Integer(5));
        ppanel.update(list);
        //plotpanel = new JPanel(new VListLayout(40, 30));
        //plotpanel.add(ppanel);
        //plotScrollPane = new JScrollPane(plotpanel);
        plotScrollPane = new JScrollPane(ppanel);
        //plotScrollPane.add(ppanel);
        //plotpanel.setVisible(false);
        //ppanel.setVisible(false);
        //ppanel.plot.setVisible(false);

        //plotScrollPane.setPreferredSize(new Dimension(600, 600));


	//Container contentPane = getContentPane();
	contentPane = getContentPane();
	contentPane.setLayout(new BorderLayout());
	contentPane.add(hashPane, BorderLayout.WEST);
	contentPane.add(plotScrollPane, BorderLayout.CENTER);
    }

    protected URL getURL(String filename) {
        URL codeBase = getCodeBase();
        URL url = null;

        try {
            url = new URL(codeBase, filename);
        } catch (java.net.MalformedURLException e) {
            System.err.println("Couldn't create image: " +
                               "badly specified URL");
            return null;
        }
    
        return url;
    }

    public void menuActionItem(String s) {
	if (DEBUG) {
	     System.err.println("in updateMenu "+ s);
	}
	if (s.equals("Plot")) {
	    System.err.println("menuActionItem="+s);
	    // get the datastruct from TreePanel
	    //hashTree.getStruct();
            ppanel = new PlotPanel(hashTree.getStruct());
	    if (!plotted) {
	    	// Remove first instance of plot from plotpanel
	    	//plotpanel.removeAll();
	    	plotScrollPane.removeAll();
		System.err.println("removing all previous instances of plot");
		plotted=true;
	    }
	    ppanel.validate();
	    ppanel.repaint();
	    plotScrollPane.add(ppanel);
	    plotScrollPane.validate();
	    plotScrollPane.repaint();
	    repaint(); 
 	    //plotScrollPane.add((Component) ppanel);
	}
	
	if (s.equals("View Dataset")) {
	    System.err.println("menuActionItem="+s);
	    hashTree.viewData();
	}
    }

    public void updatemenu(String s) {
	//System.err.println("update the menu");
	toolsMenu.update(s);
    }

    public void createMenus(JMenuBar mbar) {
	mbar.add(createFileMenu());
	Vector vec = new Vector();
	vec.addElement(this);
	vec.addElement("Plot");
	vec.addElement("View Dataset");
	mbar.add(toolsMenu = new SelfModifyingMenu(vec, "Tools"));
    }
    private JMenu createFileMenu() {
	JMenu fileMenu = new JMenu("File");
	JMenu helpMenu = new JMenu("Help");
	//JMenuItem quitItem = new JMenuItem("Quit");
	//fileMenu.add(quitItem);
	//quitItem.addActionListener(new ActionListener() {
	    //public void actionPerformed(ActionEvent event) {
		//System.exit(0);
	    //}
	//});
	return fileMenu;
    }
}

