import ij.*;
import ij.plugin.PlugIn;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.IOException;

import quicktime.*;
import quicktime.io.*;
import quicktime.std.movies.*;
import quicktime.std.movies.media.*;
import quicktime.app.view.*;

//Revised code to display a QuickTime movie in a window under Java 1.4.x and QuickTime 6.4, aka QTJ 6.1
//Version 1.0 beta 1, November 22, 2003 by Jeff Hardin, Dept. of Zoology, Univ. of Wisconsin
//Questions? Contact the author at jdhardin@wisc..edu

//Adapted from basic code courtesy of Chris Adamson, c/o the O'Reilly Network
//Window resize detection appears broken under Mac OS X 10.3, JavaVM 1.4.1 for the moment

public class Movie_Player_rev implements PlugIn,WindowListener,KeyListener,ComponentListener {

public Frame f2;
public Movie m;
public Component c;
public MovieController mc;

    public void run (String arg) {
        try {
            QTSession.open();
            QTFile f = QTFile.standardGetFilePreview (new int[0]);
            OpenMovieFile omf = OpenMovieFile.asRead (f);
            m = Movie.fromFile (omf);
           mc = new MovieController (m);
            mc.setVisible(true);
           //need the next line to send key events to the movie controller so we can simulate the arrow key functions Apple broke
            mc.setKeysEnabled(true);
            c = QTFactory.makeQTComponent (mc).asComponent();
            c.setName("Controller");
            f2 = new Frame();
            //f2.setTitle("Movie");
	  f2.setTitle(f.getName());
            f2.addWindowListener(this);            
            f2.addKeyListener(this);
            f2.addComponentListener(this);
            f2.setName("Window");
            BorderLayout myLayout = new BorderLayout();

            //Under Mac OS X and Java 1.4, add a little space at bottom so that 
            //drag box doesn't overlap with right arrow button in movie controller. Way to go, Apple! :-(

            f2.setLayout(myLayout);
            f2.add(c,"Center");
            Panel myPanel = new Panel();
            f2.add(myPanel,"South");
            f2.pack();
            //Under Mac OS X, resize events aren't properly registered, so turn off resizing for now. Arghhh!!!!
           f2.setResizable(false);
           f2.setVisible(true);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
		     public void windowClosing (WindowEvent e) {
				QTSession.close();
				f2.setVisible(false);
				f2.dispose();
			}			
		     public void windowClosed (WindowEvent e) { 
			}
                        public void windowOpened (WindowEvent e) { 
			}
                        public void windowActivated (WindowEvent e) { 
			}
                        public void windowDeactivated (WindowEvent e) { 
			}
                        public void windowIconified (WindowEvent e) { 
			}
                        public void windowDeiconified (WindowEvent e) { 
			}


                    public void keyPressed (KeyEvent e) 
                    {                        try
                        {
		//need to pass MovieController.key() an int corresponding to standard Java key code; initialize it here
                    int myInt = 0;
                            switch (e.getKeyCode()) 
                            {
                                case KeyEvent.VK_SPACE:
			//play the movie forward by setting rate to +1
                                    if (m.getRate() != 0) 
                                        m.setRate (0);
                                    else
                                        m.setRate (1);
                                    break;
                                case KeyEvent.VK_LEFT:
				myInt = KeyEvent.VK_LEFT;
                                    mc.key(myInt,e.getModifiers());                                  
                                    break;
                                case KeyEvent.VK_RIGHT:
				myInt = KeyEvent.VK_RIGHT;
                                     mc.key (myInt,e.getModifiers());
                                     break;
                                default:
                                    break;
                            }
                        } catch (QTException ee) {
                            throw new QTRuntimeException (ee);
                        }
}
                    public void keyReleased (KeyEvent e) {}
                    public void keyTyped (KeyEvent e) {}
                    
                    public void componentResized (ComponentEvent e) {
                    //Seems to be broken for now under Mac OS X and Java 1.4.1 VM; only gets increases in size, but not decreases!
                    }
                    public void componentHidden (ComponentEvent e) {}
                    public void componentMoved (ComponentEvent e) {}
                    public void componentShown (ComponentEvent e) {}
                    


}






