import java.applet.Applet;
import java.awt.*;
//import OsmosisCanvas;
//import gjt.*;
/*
 *
 * Osmosis
 *
 */
public class DissolveSim extends Nernst
{
	int Particles[] = {0,2,5,10,20,30};
	OsmReportPanel pReport;
	DissControlPanel pControl;	boolean running, isStart;	
	//OsmCanvas CDiff;	public void init(){
		isStart = false;		Panel pnl=new Panel();		CDiff=new OsmCanvas(this);		//((OsmCanvas)CDiff).NUM_PARTICLE=150;		((OsmCanvas)CDiff).InWater=0;		((OsmCanvas)CDiff).InIon=0;
		((OsmCanvas)CDiff).OutIon=0;
		((OsmCanvas)CDiff).OutWater = 150;
		CDiff.m_Barrier=0;		//OutBar.stop();		//OutBar=null;	    running = false;
//	    tdbDisplay=new ThreeDBorder(CDiff,5);
//		tdbDisplay.inset();
		pControl=new DissControlPanel(this);		setLayout(new BorderLayout());
		add("Center",new ThreeDBorder(pnl));
		pnl.setLayout(new BorderLayout());
		pnl.add("Center",CDiff);
		pnl.add("South", pControl);
    }

	public boolean action(Event event, Object what){		if (!isStart) {			CDiff.init();			isStart = true;		}
		if(event.target==Start_Stop){
			if (running){
				CDiff.stop();
				running=false;
				Start_Stop.setLabel("Start");
			}			else {
				CDiff.start();
				running=true;
				Start_Stop.setLabel("Stop");
			}
		}else if (event.target==Num_Particles){
			int NewNum=Particles[Num_Particles.getSelectedIndex()];
			if (running) CDiff.stop();
			((OsmCanvas)CDiff).OutIon=NewNum;
			((OsmCanvas)CDiff).OutWater=150-(((OsmCanvas)CDiff).Hydration+1)*NewNum;
			CDiff.init();
			if (running) CDiff.start();
		}
		return true;
	}
}


class DissControlPanel extends Panel{

	DissolveSim app;

	public DissControlPanel(Applet applet){
		app=(DissolveSim)applet;
		app.Num_Particles= new Choice();
		app.Num_Particles.addItem("0 Particles");
		app.Num_Particles.addItem("2 Particles");
		app.Num_Particles.addItem("5 Particles");
		app.Num_Particles.addItem("10 Particles");
		app.Num_Particles.addItem("20 Particles");
		app.Num_Particles.addItem("30 Particles");
		app.Num_Particles.select(0);

		app.Start_Stop= new Button("Start");

		setLayout(new GridLayout(1,2,10,10));

		add(new ThreeDBorder(app.Start_Stop));
		add(new ThreeDBorder(app.Num_Particles));

	}

	public Insets insets(){
		return new Insets(5,5,5,5);
	}
}
