package vgp.tutor.eventCamera;

import java.applet.Applet;
import java.awt.*;

import jv.object.*;
import jv.viewer.PvViewer;

/**
 * Applet studies camera events issued from a JavaView display.
 * In this example the events are used to steer the camera in a second window.
 * <p>
 * The camera events from the right window are used to steer the
 * camera in the left window such that a stereo effect is produced.
 * Note, the viewing direction of the left camera is slightly rotated
 * around the up-vector of the camera by about 6 degrees.
 * 
 * @see			jv.viewer.PvViewer
 * @author		Konrad Polthier
 * @version		14.12.03, 2.00 revised (kp) Full revision with better panels.<br>
 *					25.07.00, 1.00 created (kp)
 */
public class PaEventCamera extends Applet {
	/** frame if run standalone, null if run as applet. */
	public		Frame				m_frame			= null;
	/** 3D-viewer window for graphics output and which is embedded into the applet. */
	protected	PvViewer			m_viewer;

	/** Interface of applet to inform about author, version, and copyright. */
	public String getAppletInfo() {
		return "Name: "		+ this.getClass().getName()+ "\r\n" +
				 "Author: "		+ "Konrad Polthier" + "\r\n" +
				 "Version: "	+ "2.00" + "\r\n" +
				 "Applet demonstrates to handle camera events and setup stereo viewing." + "\r\n";
	}

	/**
	 * Configure and initialize the viewer, load system and user projects.
	 * One of the user projects must be selected here.
	 */
	public void init() {
		// Create viewer for viewing 3d geometries
		m_viewer = new PvViewer(this, m_frame);

		// Create and load a project
		PjEventCamera pjStereo = new PjEventCamera();
		m_viewer.addProject(pjStereo);
		m_viewer.selectProject(pjStereo);

		// Add two displays at top and the project inspector at the bottom.
		setLayout(new BorderLayout());
		Panel pDisplay = new Panel();
		pDisplay.setLayout(new GridLayout(1, 2));
		pDisplay.add((Component)pjStereo.getLeftDisplay());
		pDisplay.add((Component)pjStereo.getRightDisplay());
		add(pDisplay, BorderLayout.CENTER);
		add(pjStereo.getInfoPanel(), BorderLayout.SOUTH);
		
		validate();
	}
	/**
	 * Standalone application support. The main() method acts as the applet's
	 * entry point when it is run as a standalone application. It is ignored
	 * if the applet is run from within an HTML page.
	 */
	public static void main(String args[]) {
		PaEventCamera va	= new PaEventCamera();
		// Create toplevel window of application containing the applet
		Frame frame	= new jv.object.PsMainFrame(va, args);
		va.m_frame = frame;
		va.init();
		
		frame.setMenuBar(va.m_viewer.newMenuBar(frame));
		frame.pack();
		va.start();
		frame.setBounds(new Rectangle(300, 5, 600, 450));
		frame.setVisible(true);
	}
	
	/** Print info while initializing applet and viewer. */
	public void paint(Graphics g) {
		g.setColor(Color.blue);
		g.drawString("Geometry Browser, Version "+PsConfig.getVersion(), 20, 40);
		g.drawString("Loading Projects .....", 20, 60);
	}

	/**
	 * Does clean-up when applet is destroyed by the browser.
	 * Here we just close and dispose all our control windows.
	 */
	public void destroy()	{ m_viewer.destroy(); }

	/** Start viewer, e.g. start animation if requested */
	public void start()		{ m_viewer.start(); }

	/** Stop viewer, e.g. stop animation if requested */
	public void stop()		{ m_viewer.stop(); }
}
