package net.sf.fmj.ejmf.toolkit.gui.controls;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.EventListener;
import javax.media.Controller;
import javax.media.TimeBase;
import net.sf.fmj.ejmf.toolkit.util.StateWaiter;
/*
* Start Control for StandardControlPanel.
*/
public class StandardStartControl extends ActionListenerControl {
public StandardStartControl(Skin skin, Controller controller) {
super(skin, controller);
getControlComponent().setEnabled(true);
}
public StandardStartControl(Skin skin) {
super(skin);
getControlComponent().setEnabled(true);
}
/**
* Create StartButton.
* @see net.sf.fmj.ejmf.toolkit.gui.controls.skins.ejmf.StartButton
*/
@Override
protected Component createControlComponent(Skin skin) {
return skin.createStartButton();
}
/**
* Creates an ActionListener for start button
* that starts Controller when clicked.
* <p>
* Since syncStart is used to start Controller is not in at
* least Prefetched state, it is move there.
*/
@Override
protected EventListener createControlListener() {
return new ActionListener() {
public void actionPerformed(ActionEvent e) {
Controller controller = getController();
int state = controller.getState();
if (state == Controller.Started)
return;
if (state < Controller.Prefetched) {
StateWaiter w = new StateWaiter(controller);
w.blockingPrefetch();
}
TimeBase tb = controller.getTimeBase();
controller.syncStart(tb.getTime());
}
};
}
}