package edu.mbl.jif.gui.imaging;
import edu.mbl.jif.imaging.api.SeriesOfImages;
import edu.mbl.jif.imaging.series.SeriesEditor;
import edu.mbl.jif.imaging.series.SeriesOfImagesMultipageTiff;
import edu.mbl.jif.imaging.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class ScannerTZ extends JPanel {
static SeriesOfImages series;
//ZoomImagePanel pZi = new ZoomImagePanel();
ImageDisplayPanel idp;
JPanel bottomPane = new JPanel();
JLabel label;
int n;
int nT;
int nZ;
int t = 0;
int z = 0;
private float scaleFactor = 1.0f;
private final boolean editing = false;
public ScannerTZ(SeriesOfImages series) {
super(true);
this.series = series;
n = series.getNumImages();
nT = series.getTimeIntervals();
nZ = series.getZSections();
setLayout(new BorderLayout());
// Horizontal (T) scrollbar ------------------
final JSlider hbar = new JSlider(SwingConstants.HORIZONTAL, 0, nT - 1, 1);
ChangeListener adjustmentListenerH = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
t = ((JSlider) e.getSource()).getValue();
//System.out.println("t=" + t);
showImage();
}
};
hbar.addChangeListener(adjustmentListenerH);
hbar.setMajorTickSpacing(1);
hbar.setPaintTicks(true);
hbar.setPaintTrack(false);
add(hbar, BorderLayout.NORTH);
// add right/left arrow key responses
//InputMap im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
InputMap im = this.getInputMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0), "right");
AbstractAction right = new AbstractAction("right") {
public void actionPerformed(ActionEvent evt) {
if (hbar.getValue() < hbar.getMaximum()) {
hbar.setValue(hbar.getValue() + 1);
}
;
}
};
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0), "left");
AbstractAction left = new AbstractAction("left") {
public void actionPerformed(ActionEvent evt) {
if (hbar.getValue() > hbar.getMinimum()) {
hbar.setValue(hbar.getValue() - 1);
}
;
}
};
ActionMap am = this.getActionMap();
am.put("right", right);
am.put("left", left);
// Vertical (Z) scrollbar ------------------------------
if (nZ > 1) {
final JSlider vbar = new JSlider(JScrollBar.VERTICAL, 0, nZ - 1, 1);
ChangeListener adjustmentListenerV = new ChangeListener() {
public void stateChanged(ChangeEvent e) {
z = ((JSlider) e.getSource()).getValue();
//System.out.println("z=" + t);
showImage();
}
};
vbar.addChangeListener(adjustmentListenerV);
vbar.setMajorTickSpacing(1);
vbar.setPaintTicks(true);
vbar.setPaintTrack(false);
vbar.setInverted(true);
add(vbar, BorderLayout.WEST);
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "dn");
AbstractAction dn = new AbstractAction("dn") {
public void actionPerformed(ActionEvent evt) {
if (vbar.getValue() < vbar.getMaximum()) {
vbar.setValue(vbar.getValue() + 1);
}
;
}
};
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "up");
AbstractAction up = new AbstractAction("up") {
public void actionPerformed(ActionEvent evt) {
if (vbar.getValue() > vbar.getMinimum()) {
vbar.setValue(vbar.getValue() - 1);
}
;
}
};
am.put("dn", dn);
am.put("up", up);
}
bottomPane.setLayout(new BorderLayout());
label = new JLabel();
label.setHorizontalAlignment(JLabel.CENTER);
bottomPane.add(label, BorderLayout.CENTER);
SeriesEditor seriesEdit = new SeriesEditor(n);
// If editing enabled {
if (editing) {
// Delete Z section
JButton deleteZsection = new JButton("DelZ");
// Delete TimePoint
JButton deleteTimePoint = new JButton("DelT");
bottomPane.add(deleteZsection, BorderLayout.WEST);
bottomPane.add(deleteTimePoint, BorderLayout.EAST);
}
add(bottomPane, BorderLayout.SOUTH);
idp = new ImageDisplayPanel(series.getImageDimensions());
idp.changeImage(series.getImage(1));
//pZi.setImage(series.getImage(1), scaleFactor, true);
//add(pZi, BorderLayout.CENTER);
add(idp, BorderLayout.CENTER);
showImage();
}
void showImage() {
int imgIndex = (t * nZ) + z;
System.out.println(t + ":" + z + ":" + imgIndex);
//idp.changeImage(series.getImage((t * nZ) + z));
idp.changeImage(series.getImage(0,z,t));
label.setText("T: " + (t + 1) + "/" + nT + " Z: " + (z + 1) + "/" + nZ + " ("
+ ((t * nZ) + z + 1) + ")");
}
public static void main(String[] s) {
String FILE = "C:/_Dev/_Dev_Data/TestImages/testData/Series_TZ/STMPS_Yuki_Z-5_T-10.tif";
int channels = 1;
int zSections = 10;
// xyzt-200x200x10x15_b causes TIFFImageReader.getCompression NullPointer
//"Series_TZ\\xyzt-200x200x10x15_b.tif";
JFrame frame = new JFrame("ScannerTZ");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
series = new SeriesOfImagesMultipageTiff(FILE, zSections);
frame.setContentPane(new ScannerTZ(series));
frame.setSize(200, 200);
frame.setVisible(true);
}
}