www.pudn.com > JAVIS-0.3.zip > AppletInterface.java




package iface;

import iface.UserInterface;
import iface.AppletPanel;
import animation.Animation;
import animation.Scheduler;
import util.Debug;
import util.Preferences;

import java.awt.*;
import java.awt.event.*;
import java.util.Hashtable;


public class AppletInterface extends Panel implements UserInterface,
                                                      ActionListener {
    private AppletPanel m_panel;
    private Animation m_animation;
    private Button b_play,b_stop,b_seek;
    private Button b_relayout,b_shake;
    private Panel m_buttonpanel;
    private Panel m_layoutpanel;
    private Dimension m_appletsize;
    private String m_filename;
    private Label m_time;
    private TextField m_timeinc;
    private TextField m_tension,m_iterations;


    public AppletInterface(Dimension appletsize,String filename) {

      m_appletsize=appletsize;

      buildInterface();

      m_animation=new Scheduler(this);
      m_animation.setTimeInc(0.001);
      m_panel.attach(m_animation);

      m_filename=filename;
    }


    public void setTimeBar(double time) {
      m_time.setText((new Double(time)).toString());

    }


    private void buildInterface() {

      setLayout(new BorderLayout());

      // Create toolbar to hold buttonpanel + time counter

      Panel toolbar=new Panel();
      toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));

      // Create button panel 

      m_buttonpanel=new Panel();
      m_buttonpanel.setLayout(new FlowLayout(FlowLayout.LEFT));

      // Create button panel buttons

      b_play=new Button("Play");
      b_stop=new Button("Stop");
      b_seek=new Button("Seek");
  
      b_play.addActionListener(this);
      b_stop.addActionListener(this);
      b_seek.addActionListener(this);

      m_buttonpanel.add(b_stop);
      m_buttonpanel.add(b_play);
      m_buttonpanel.add(b_seek);

      b_seek.setEnabled(false);

      toolbar.add(m_buttonpanel);

      m_time=new Label("-.-------");
      toolbar.add(m_time);

      m_timeinc=new TextField("0.001",8);
      m_timeinc.addActionListener(this);
      toolbar.add(new Label("Increment"));
      toolbar.add(m_timeinc);

      // Create layout panel buttons

      m_layoutpanel=new Panel();
      m_layoutpanel.setLayout(new FlowLayout(FlowLayout.LEFT));

      Label layoutlabel=new Label("Auto-Layout");
      b_relayout=new Button("Redo");
      b_shake=new Button("Shake");

      b_relayout.addActionListener(this);
      b_shake.addActionListener(this);

      Label tensionlabel=new Label("Tension");
      m_tension=new TextField(Integer.toString(Preferences.force_tension),3);
      m_tension.addActionListener(this);

      Label iterlabel=new Label("Iterations");
      m_iterations=new TextField(Integer.toString(Preferences.layout_iteration),3);
      m_iterations.addActionListener(this);

      m_layoutpanel.add(layoutlabel);
      m_layoutpanel.add(b_relayout);
      m_layoutpanel.add(b_shake);
      m_layoutpanel.add(tensionlabel);
      m_layoutpanel.add(m_tension);
      m_layoutpanel.add(iterlabel);
      m_layoutpanel.add(m_iterations);

      // Create display panel

      
      add(toolbar,BorderLayout.NORTH);
      add(m_layoutpanel,BorderLayout.SOUTH);

      m_panel=new AppletPanel(new Dimension(m_appletsize.width,
					    m_appletsize.height-
					    40-40));



      add(m_panel,BorderLayout.CENTER);
      m_panel.setSize(m_panel.getPreferredSize());
      Debug.out.println(m_panel.getPreferredSize());      
    }

    public void loadFile(String filename) {
      m_animation.loadFile(filename);
    }

    public void actionPerformed(ActionEvent ae) {

      if (ae.getSource()==b_play) {
	b_seek.setEnabled(true);
	b_relayout.setEnabled(false);
	b_shake.setEnabled(false);

	m_animation.startPlaying();
      }
      else
      if (ae.getSource()==b_stop) {
	b_seek.setEnabled(false);
	b_relayout.setEnabled(true);
	b_shake.setEnabled(true);

	m_animation.stopPlaying();
      }
      else
      if (ae.getSource()==b_seek) {
	m_animation.seekNext();
      }
      else
      if (ae.getSource()==b_relayout) {
	m_animation.reLayout();
      }
      else
      if (ae.getSource()==b_shake) {
	m_animation.shake();
      }
      else
      if (ae.getSource()==m_tension) {
	String str=m_tension.getText();
	int newtens=Integer.parseInt(str);

	Preferences.force_tension=newtens;

	Debug.out.println("New tension: "+newtens);
      }
      else
      if (ae.getSource()==m_iterations) {
	String str=m_iterations.getText();
	int newiter=Integer.parseInt(str);

	Preferences.layout_iteration=newiter;

	Debug.out.println("New iterations: "+newiter);
      }
      else
      if (ae.getSource()==m_timeinc) {
	String str=m_timeinc.getText();
	double newinc=Double.valueOf(str).doubleValue();

	m_animation.setTimeInc(newinc);

	Debug.out.println("New increment: "+newinc);
      }
    }
}