package ChaosDemos;
import java.awt.*;
//**********************************************************************
/**
* Class to implement movie thread
* Calls iterate() in parent to update equations and graph.
* @version March 15 1997
* @author Michael Cross
*/
//**********************************************************************
public class movie extends Panel implements Runnable {
// variables setting scroll properties
Scrollbar speedScroll;
/**
* set true for sleep delay
*/
public boolean toSleep;
public boolean iterate;
/**
* delay value
*/
public int delay=0;
/**
* maximum of scrollbar
*/
public int scrollMax;
/**
* range of scrollbar
*/
public int scrollRange;
/**
* start of scrollbar
*/
public int scrollStart;
/**
* increment of scrollbar
*/
public int scrollPageIncrement;
/**
* lineIncrement of scrollbar
*/
public int scrollLineIncrement;
/**
* 1 for scrollbar visible
*/
public int scrollVisible;
/**
* top inset
*/
public int borderTop;
/**
* left inset
*/
public int borderLeft;
/**
* bottom inset
*/
public int borderBottom;
/**
* right inset
*/
public int borderRight;
/**
* array of delay values selected by slider
*/
public int[] delayValue = {5000, 2000,1000,500,200,100,
50, 20, 10, 5, 2, 1};
/**
* Array of strings displayed by slider
*/
public String[] delayString = {" 1/5"," 1/2"," 1"," 2"," 5"," 10",
" 20"," 50"," 100"," 200"," 500"," 1000"};
private Label t;
private String speed;
private dynamicGraph outerparent;
//**********************************************************************
/**
* @param target parent of type dynamicGraph
*/
//**********************************************************************
public movie(dynamicGraph target) {
outerparent = target;
toSleep=true;
scrollRange = delayValue.length + 1;
scrollStart = 5;
scrollPageIncrement = 4;
scrollLineIncrement = 1;
scrollVisible = 2;
borderTop=0;
borderLeft=50;
borderBottom=10;
borderRight=50;
// setLayout(new GridLayout(1,1));
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
setLayout(gridbag);
constraints.weightx = 1.0;
constraints.weighty = 1.0;
constraints.gridwidth = 1;
// constraints.anchor = GridBagConstraints.EAST;
Label l1 = new Label(" Speed ");
gridbag.setConstraints(l1, constraints);
add(l1);
speedScroll = new Scrollbar(Scrollbar.HORIZONTAL,
scrollStart,scrollVisible,0,scrollRange);
speedScroll.setLineIncrement(scrollLineIncrement);
speedScroll.setPageIncrement(scrollPageIncrement);
delay = delayValue[scrollStart];
speedScroll.setValue(scrollStart);
// outerparent.updateSpeed(delay);
constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.weightx = 5.0;
constraints.gridwidth=4;
gridbag.setConstraints(speedScroll, constraints);
add(speedScroll);
constraints.weightx = 1.0;
constraints.gridwidth=GridBagConstraints.REMAINDER;
constraints.anchor = GridBagConstraints.EAST;
t = new Label(delayString[scrollStart]);
gridbag.setConstraints(t, constraints);
add(t);
outerparent.updateSpeed(delay);
}
//**********************************************************************
/**
* Change parameters of scroll bar according to value of scroll
* variables
*/
//**********************************************************************
public void setScroll() {
delay = delayValue[scrollStart];
speedScroll.setValues(scrollStart,scrollVisible,0,scrollRange);
t.setText(delayString[scrollStart]);
outerparent.updateSpeed(delay);
}
//**********************************************************************
/**
* Handle scrollbar events to change delay with scroll bar
*/
//**********************************************************************
public boolean handleEvent(Event evt) {
if(evt.target instanceof Scrollbar) {
int v =((Scrollbar) evt.target).getValue();
delay = delayValue[v];
// System.out.println("Scroll event: v= "+ v
// +" delay= "+delay);
((Scrollbar) evt.target).setValue(v);
t.setText(delayString[v]);
outerparent.updateSpeed(delay); // dummy routine if no zction needed
return super.handleEvent(evt);
}
else return false;
}
//**********************************************************************
/**
* Thread run. Sleep time set by delay, usually set by scroller
*/
//**********************************************************************
public void run() {
iterate=true;
while (iterate) {
if(!outerparent.iterate()) iterate=false;
Thread.yield();
// System.out.println(it + " " + outerparent.isVisible() +
// " " + outerparent.isShowing());
// if(! outerparent.isVisible()) Thread.stop();
// outerparent.graph.clearAll=false;
// outerparent.graph.repaint();
if(delay > 0 && toSleep) {
try {
Thread.sleep(delay);}
catch (InterruptedException e) {
return;
}
}
}
}
//**********************************************************************
/**
* Sets delay. (Note: scroll bar is not updated)
*/
//**********************************************************************
public void setDelay(int in_delay) {
delay=in_delay;
speedScroll.setValue(delay);
t.setText(delayString[delay]);
}
//**********************************************************************
/**
* Sets scroll bar value
* @param v index of scroll delay
*/
//**********************************************************************
public void setScrollValue(int v) {
delay = delayValue[v];
speedScroll.setValue(v);
t.setText(delayString[v]);
outerparent.updateSpeed(delay); // dummy routine if no zction needed
}
//**********************************************************************
/**
* Gets scroll bar value
* @return index of scroll delay
*/
//**********************************************************************
public int getScrollValue() {
return speedScroll.getValue();
}
//**********************************************************************
/**
* Sets insets for scroll bar
*/
//**********************************************************************
public Insets insets() {
return new Insets(borderTop,borderLeft,
borderBottom,borderRight);
}
//**********************************************************************
/**
* Sets flag for iteration to false
*/
//**********************************************************************
public void stopIterate() {
iterate=false;
}
}
//**********************************************************************
//**********************************************************************