import java.util.*;
import java.awt.*;
import java.applet.*;

public 
class GraphApplet extends Applet {

protected Blackboard _bb;
protected GraphWindow _window;
protected GraphPanel _panel;

public GraphPanel panel() {
	return _panel;
}
	
public void init() {
	_bb = new Blackboard( this );

	add(new Button("Show"));

	String edges = getParameter("edges");
	for(StringTokenizer t = new StringTokenizer(edges,","); t.hasMoreTokens();) {
		String str = t.nextToken();
		int i = str.indexOf('-');
		if (i > 0) {
			int len = 50;
			int j = str.indexOf('/');
			if (j > 0) {
				len = Integer.valueOf(str.substring(j+1)).intValue();
				str = str.substring(0, j);
			}
			_bb.addEdge(str.substring(0,i), str.substring(i+1));
		}
	}
	_bb.PreprocessNodes();

	String basedir = getParameter("files");
	_bb.globals.setBasedir( basedir );
	_bb.globals.depth3D( 0.0 );

	// NB: The order of the following matters.
	ControlWindow controls = new ControlWindow( _bb );
	_bb.Init();
	_panel = new GraphPanel( _bb );
	_window = new GraphWindow( _bb, _panel, controls );

	_window.pack();
}
public void destroy() {
	_window.handleEvent(new Event(_window,Event.WINDOW_DESTROY,null));
	_panel.stop();
}

public boolean action(Event evt, Object arg) {
	if (evt.target instanceof Button && "Show".equals(arg)) {
		_window.show();
		_panel.start();
		((Button)evt.target).setLabel( "Hide" );
	}
	else if (evt.target instanceof Button && "Hide".equals(arg)) {
		_window.handleEvent(new Event(_window,Event.WINDOW_DESTROY,null));
		_panel.stop();
		((Button)evt.target).setLabel( "Show" );
	}
	else
		return false;
	return true;
}

} // class GraphApplet

