import java.awt.*;
import javax.swing.*;
import simulate.DisplayTable;
import simulate.SpeciesDisks;
import simulate.IntegratorHard;
import simulate.MeterDensity;
import simulate.MeterPressureBoundary;
import simulate.MeterTemperature;
import simulate.Phase;
import simulate.Simulation2D;
import simulate.ControllerButton;
import simulate.DisplayConfiguration;
import simulate.P2HardDisk;

/**
 * A basic extension of the javax.swing.JApplet class
 */
public class SimplePressureHD extends JApplet
{
	public void init()
	{
		// Take out this line if you don't use symantec.itools.net.RelativeURL or symantec.itools.awt.util.StatusScroller
		symantec.itools.lang.Context.setApplet(this);
		
		// This line prevents the "Swing: checked access to system event queue" message seen in some browsers.
		getRootPane().putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
		
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		getContentPane().setLayout(null);
		getContentPane().setBackground(new java.awt.Color(204,204,153));
		setSize(660,497);
		simulation2D1.setLayout(null);
		getContentPane().add(simulation2D1);
		simulation2D1.setBounds(24,24,552,492);
		controllerButton1.setLayout(null);
		simulation2D1.add(controllerButton1);
		controllerButton1.setBackground(new java.awt.Color(153,204,204));
		controllerButton1.setBounds(0,0,100,40);
		integratorHard1.setTemperature(100.0);
		integratorHard1.setIsothermal(true);
		integratorHard1.setSleepPeriod(5);
		integratorHard1.setDrawTimeStep(0.02);
		integratorHard1.setLayout(null);
		controllerButton1.add(integratorHard1);
		integratorHard1.setBounds(60,0,20,40);
		speciesDisks1.setDiameter(0.08);
		speciesDisks1.setNMolecules(40);
		speciesDisks1.setLayout(null);
		simulation2D1.add(speciesDisks1);
		speciesDisks1.setBounds(36,156,20,40);
		phase1.setBoundary(2);
		phase1.setLayout(null);
		simulation2D1.add(phase1);
		phase1.setBounds(0,240,20,40);
		phase1.add(meterTemperature1);
		meterTemperature1.setBounds(0,0,20,40);
		phase1.add(meterPressureBoundary1);
		meterPressureBoundary1.setBounds(300,240,20,40);
		phase1.add(meterDensity1);
		meterDensity1.setBounds(0,0,20,40);
		JTabbedPane1.setAutoscrolls(true);
		simulation2D1.add(JTabbedPane1);
		JTabbedPane1.setBounds(120,0,432,320);
		displayConfiguration1.setLayout(null);
		JTabbedPane1.add(displayConfiguration1);
		displayConfiguration1.setBounds(2,27,427,290);
		displayTable1.setLayout(new CardLayout(0,0));
		JTabbedPane1.add(displayTable1);
		displayTable1.setBounds(2,27,427,290);
		JTabbedPane1.setTitleAt(0,"Config");
		JTabbedPane1.setTitleAt(1,"Averages");
		JSlider1.setSnapToTicks(true);
		JSlider1.setPaintTicks(true);
		JSlider1.setMajorTickSpacing(10);
		JSlider1.setToolTipText("Number of atoms");
		JSlider1.setMinorTickSpacing(2);
		JSlider1.setPaintLabels(true);
		JSlider1.setValue(40);
		simulation2D1.add(JSlider1);
		JSlider1.setBackground(new java.awt.Color(204,204,153));
		JSlider1.setBounds(144,336,360,40);
		JSlider2.setMinimum(10);
		JSlider2.setSnapToTicks(true);
		JSlider2.setMaximum(610);
		JSlider2.setPaintTicks(true);
		JSlider2.setMajorTickSpacing(50);
		JSlider2.setToolTipText("Temperature (K)");
		JSlider2.setMinorTickSpacing(25);
		JSlider2.setPaintLabels(true);
		JSlider2.setValue(100);
		simulation2D1.add(JSlider2);
		JSlider2.setBackground(new java.awt.Color(204,204,153));
		JSlider2.setBounds(168,408,360,48);
		JLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		JLabel1.setText("Number of atoms");
		simulation2D1.add(JLabel1);
		JLabel1.setBounds(24,336,144,40);
		JLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
		JLabel3.setText("Temperature (K)");
		simulation2D1.add(JLabel3);
		JLabel3.setBounds(24,396,144,40);
		P2HardDisk1.setCollisionDiameter(0.08);
		simulation2D1.add(P2HardDisk1);
		P2HardDisk1.setBounds(72,372,30,40);
		//}}
	
		//{{REGISTER_LISTENERS
		SymChange lSymChange = new SymChange();
		JSlider1.addChangeListener(lSymChange);
		JSlider2.addChangeListener(lSymChange);
		//}}
	}

	//{{DECLARE_CONTROLS
	simulate.Simulation2D simulation2D1 = new simulate.Simulation2D();
	simulate.ControllerButton controllerButton1 = new simulate.ControllerButton();
	simulate.IntegratorHard integratorHard1 = new simulate.IntegratorHard();
	simulate.SpeciesDisks speciesDisks1 = new simulate.SpeciesDisks();
	simulate.Phase phase1 = new simulate.Phase();
	simulate.MeterTemperature meterTemperature1 = new simulate.MeterTemperature();
	simulate.MeterPressureBoundary meterPressureBoundary1 = new simulate.MeterPressureBoundary();
	simulate.MeterDensity meterDensity1 = new simulate.MeterDensity();
	javax.swing.JTabbedPane JTabbedPane1 = new javax.swing.JTabbedPane();
	simulate.DisplayConfiguration displayConfiguration1 = new simulate.DisplayConfiguration();
	simulate.DisplayTable displayTable1 = new simulate.DisplayTable();
	javax.swing.JSlider JSlider1 = new javax.swing.JSlider();
	javax.swing.JSlider JSlider2 = new javax.swing.JSlider();
	javax.swing.JLabel JLabel1 = new javax.swing.JLabel();
	javax.swing.JLabel JLabel3 = new javax.swing.JLabel();
	simulate.P2HardDisk P2HardDisk1 = new simulate.P2HardDisk();
	//}}

	class SymChange implements javax.swing.event.ChangeListener
	{
		public void stateChanged(javax.swing.event.ChangeEvent event)
		{
			Object object = event.getSource();
			if (object == JSlider1)
				JSlider1_stateChanged(event);
			else if (object == JSlider2)
				JSlider2_stateChanged(event);
		}
	}

	void JSlider1_stateChanged(javax.swing.event.ChangeEvent event)
	{
		// to do: code goes here.
			 
		JSlider1_stateChanged_Interaction1(event);
	}

	synchronized void JSlider1_stateChanged_Interaction1(javax.swing.event.ChangeEvent event)
	{
		try {
			// JSlider1 Get the JSlider's current value
			boolean doClick = integratorHard1.running;  //click to stop and start integrator if it is running
            if(doClick) controllerButton1.clickButton();
			speciesDisks1.setNMolecules(Math.max(2,JSlider1.getValue()));
			displayConfiguration1.repaint();
			integratorHard1.initialize();
//            if(doClick) controllerButton1.clickButton();
		} catch (java.lang.Exception e) {
		}
	}

	void JSlider2_stateChanged(javax.swing.event.ChangeEvent event)
	{
		// to do: code goes here.
			 
		JSlider2_stateChanged_Interaction1(event);
	}

	void JSlider2_stateChanged_Interaction1(javax.swing.event.ChangeEvent event)
	{
		try {
			// JSlider2 Get the JSlider's current value
			integratorHard1.setTemperature(JSlider2.getValue());
		} catch (java.lang.Exception e) {
		}
	}
}
