package edu.mbl.jif.gui.imaging.player; import edu.mbl.jif.imaging.api.SeriesFileListener; import edu.mbl.jif.gui.test.FrameForTest; import edu.mbl.jif.gui.imaging.ImageDisplayPanel; import java.awt.*; import javax.swing.*; import edu.mbl.jif.imaging.tiff.MultipageTiffFile; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class SeriesPlayerZoomPanel extends JPanel implements SeriesViewer, SeriesFileListener { BorderLayout borderLayout1 = new BorderLayout(); SeriesPlayerController playCtrl; MultipageTiffFile tif; String path; ImageDisplayPanel viewPanel; Dimension imageDim; public SeriesPlayerZoomPanel(String _path) { // addFrameListener(new InternalFrameAdapter() // { // public void internalFrameClosing (InternalFrameEvent e) { // close(); // } // }); path = _path; tif = new MultipageTiffFile(path); try { jbInit(); } catch (Exception exception) { exception.printStackTrace(); } } private void jbInit() throws Exception { setLayout(borderLayout1); // === SeriesPlayerController playCtrl = new SeriesPlayerController(tif, this); // playCtrl.setViewer(this); // playCtrl.setSeriesFile(tif); playCtrl.setNumFrames(tif.getNumImages()); // imageDim = new Dimension(tif.getWidth(0), tif.getHeight(0)); // getWorkSpaceBounds //GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); //Dimension dimVscroll = new Dimension(640, 480); viewPanel = new ImageDisplayPanel(imageDim); viewPanel.changeImage(tif.getImage(0)); add(viewPanel, BorderLayout.CENTER); add(playCtrl, BorderLayout.SOUTH); } public Dimension getImageDimension() { return imageDim; } public void deactivateOverhead() { // viewPanel.enableObservers() } public void showImage(int n) { viewPanel.showImage(tif.getImage(n)); } public void reactivateOverhead() { } public void stopOn(int n) { viewPanel.changeImage(tif.getImage(n)); } @Override public int imageAdded() { boolean onLastSlice = playCtrl.isOnLastSlice(); tif.closeRead(); tif.openRead(path); int numImages = tif.getNumImages(); // System.out.println("ImageAdded NumImages: " + numImages); playCtrl.setNumFrames(numImages); if (onLastSlice) { playCtrl.gotoSlice(numImages - 1); } // tif.getImage(i); return numImages; } // <editor-fold defaultstate="collapsed" desc=">>>--- Cleanup when parent closed ---<<<" > private WindowListener wl = new WindowAdapter() { public void windowClosing(WindowEvent evt) { cleanup(); } }; @Override public void addNotify() { super.addNotify(); System.out.println("addNotify"); SwingUtilities.windowForComponent(this).addWindowListener(wl); } @Override public void removeNotify() { super.removeNotify(); System.out.println("removeNotify"); SwingUtilities.windowForComponent(this).removeWindowListener(wl); } protected void cleanup() { System.out.println("cleanup called"); SwingUtilities.invokeLater(new Runnable() { public void run() { playCtrl.killPlayer(); playCtrl = null; tif.close(); tif = null; //dispose(); } }); } // </editor-fold> public static void main(String[] args) { // try { // com.jgoodies.looks.plastic.Plastic3DLookAndFeel lookFeel = new com.jgoodies.looks.plastic.Plastic3DLookAndFeel(); // com.jgoodies.looks.plastic.PlasticLookAndFeel.setPlasticTheme( // //new com.jgoodies.looks.plastic.theme.DesertBluer()); // // new com.jgoodies.looks.plastic.theme.Silver()); // //new com.jgoodies.looks.plastic.theme.SkyBluerTahoma()); // new com.jgoodies.looks.plastic.theme.DesertBlue()); // com.jgoodies.looks.plastic.PlasticLookAndFeel.setTabStyle("Metal"); // UIManager.setLookAndFeel(lookFeel); // } catch (Exception e) { // e.printStackTrace(); // } SwingUtilities.invokeLater(new Runnable() { public void run() { String testSeries = // edu.mbl.jif.Constants.testDataPath + "C:\\_dev\\testData\\" + "Series_TZ\\STMPS_Yuki_TZ_04_0428_1427_41_Z-5.tif"; SeriesPlayerZoomPanel p = new SeriesPlayerZoomPanel(testSeries); FrameForTest f = new FrameForTest(); f.addContents(p); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.pack(); f.setVisible(true); } }); } }