package edu.mbl.jif.gui.imaging.player;
import edu.mbl.jif.utils.StaticSwingUtils;
import edu.mbl.jif.imaging.tiff.MultipageTiffFile;
import edu.mbl.jif.utils.JifUtils;
import edu.mbl.jif.utils.prefs.Prefs;
import java.awt.*;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
public class SeriesPlayerController extends PlayerControlHoriz {
SeriesViewer viewer;
//ViewerAnalyzerPanel viewer;
//SeriesPlayerFrame viewerSeries;
MultipageTiffFile mTiffFile;
int numSlices = 0;
int slice = 0;
boolean stop = false;
int fps = Prefs.usr.getInt("seriesPlayerIncrFPS", 2);
boolean goFwd = true;
JButton buttonFPSreset = new JButton();
public SeriesPlayerController() {
this(new MultipageTiffFile(""), new SeriesPlayerFrame());
}
public SeriesPlayerController(MultipageTiffFile mTiffFile, SeriesViewer replayFrame) {
super();
this.mTiffFile = mTiffFile;
viewer = replayFrame;
setNumFrames(mTiffFile.getNumImages());
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
setEnabledAll(true);
this.setbackground(Color.lightGray);
//this.setLayout(new FlowLayout());
fps = Prefs.usr.getInt("seriesPlayerIncrFPS", 2);
super.setFPS(fps);
enableSliderListener(true);
button_Pause.setEnabled(false);
buttonFPSreset.setBackground(new Color(212, 239, 200));
buttonFPSreset.setFont(new java.awt.Font("Dialog", 0, 10));
buttonFPSreset.setOpaque(true);
buttonFPSreset.setMargin(new Insets(2, 4, 2, 4));
buttonFPSreset.setText("Reset FPS");
// this.add(buttonFPSreset, null);
this.setPreferredSize(new Dimension(500, 55));
this.validate();
}
public void setViewer(SeriesViewer replayFrame) {
viewer = replayFrame;
}
public void setSeriesFile(MultipageTiffFile _vFile) {
mTiffFile = _vFile;
}
public void setNumFrames(int _numFrames) {
numSlices = _numFrames;
setLastFrame(numSlices);
}
public boolean isOnLastSlice() {
return (slice == (numSlices-1));
}
//----------------------------------------------------------------
void button_Begin_actionPerformed(ActionEvent e) {
gotoSlice(0);
}
void button_PlayRev_actionPerformed(ActionEvent e) {
stop = false;
goFwd = false;
runPlay();
}
void button_StepBack_actionPerformed(ActionEvent e) {
if (slice > 0) {
slice--;
}
gotoSlice(slice);
}
synchronized void button_Pause_actionPerformed(ActionEvent e) {
stop = true;
}
public synchronized void killPlayer() {
stop = true;
}
void button_StepFwd_actionPerformed(ActionEvent e) {
if (slice < (numSlices - 1)) {
slice++;
}
gotoSlice(slice);
}
synchronized void button_PlayFwd_actionPerformed(ActionEvent e) {
stop = false;
goFwd = true;
runPlay();
}
void runPlay() {
final Thread worker = new Thread() {
public void run() {
// @todo Suspend camera display for player...
// if (Camera.display != null) {
// Camera.displaySuspend();
// }
edu.mbl.jif.utils.time.NanoTimer timer = new edu.mbl.jif.utils.time.NanoTimer();
setButtonsPlaying(true);
if (slice >= numSlices) {
slice = 0;
}
while (!stop) {
timer.reset();
timer.start();
if (goFwd) {
slice++;
} else {
slice--;
}
if (repeat) {
if (slice == numSlices) {
slice = 0;
}
} else if (bounce) {
if ((slice == 0) || (slice == (numSlices - 1))) {
goFwd = !goFwd;
}
} else {
if (slice == numSlices) {
break;
}
}
gotoSlice(slice);
int toGo = (int) ((1 / (float) fps * 1000) - timer.elapsedMillis());
if (toGo > 0) {
JifUtils.waitFor(toGo);
}
}
setButtonsPlaying(false);
return ;
}
};
worker.start();
}
void button_End_actionPerformed(ActionEvent e) {
gotoSlice(numSlices - 1);
}
void setButtonsPlaying(final boolean t) {
StaticSwingUtils.dispatchToEDT(new Runnable() {
public void run() {
setEnabledAll(!t);
enableSliderListener(!t);
button_Pause.setEnabled(t);
togglePlayStop.setSelected(t);
}
});
//
// if (viewer != null) {
// if (viewer.analysisPanel != null) {
// viewer.analysisPanel.enableObservers(!t);
// }
// }
}
void sliderMoved(int n) {
//System.out.println("sliderMoved " + n);
slice = n;
setCurrentDisplay(n + 1);
showImage(n);
}
public void gotoSlice(int n) {
if (n >= numSlices) {
slice = n - 1;
} else {
slice = n;
}
updateSliderPosition(n); //<<<<<<<<<<<<<<===================== 09/03
showImage(n);
}
void showImage(int _slice) {
try {
if (viewer != null) {
StaticSwingUtils.dispatchToEDT(new Runnable() {
public void run() {
viewer.showImage(slice);
}
});
//viewer.showImage(slice, mTiffFile.getImage(slice));
}
// if (viewerSeries != null)
// {
// viewerSeries.showImage(slice);
// //showImage(slice, mTiffFile.getImage(slice));
// }
} catch (Exception ex) {
}
}
void fps_Changed(int value) {
fps = value;
Prefs.usr.putInt("seriesPlayerIncrFPS", value);
}
public static void main(String[] args) {
}
}