/*****************************************************************************
 *                        Web3d.org Copyright (c) 2004-2007
 *                               Java Source
 *
 * This source is licensed under the GNU LGPL v2.1
 * Please read http://www.gnu.org/copyleft/lgpl.html for more information
 *
 * This software comes with the standard NO WARRANTY disclaimer for any
 * purpose. Use it at your own risk. If there's a problem you get to fix it.
 *
 ****************************************************************************/

import java.awt.*;
import java.util.HashMap;
import javax.swing.*;

import org.web3d.x3d.sai.*;
import org.xj3d.sai.Xj3DBrowser;

/**
 * An example of how to use Xj3D Specific SAI routines.
 *
 * @author Alan Hudson
 * @version
 */
public class Xj3DSpecificDemo extends JFrame {

    /**
     * Constructor for the demo.
     */
    public Xj3DSpecificDemo() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Container contentPane = getContentPane();

        // Setup browser parameters
        HashMap requestedParameters=new HashMap();
        requestedParameters.put("Xj3D_ShowConsole",Boolean.FALSE);
        requestedParameters.put("Xj3D_FPSShown", Boolean.TRUE);

        // Create an SAI component
        X3DComponent x3dComp = BrowserFactory.createX3DComponent(requestedParameters);

        // Add the component to the UI
        JComponent x3dPanel = (JComponent)x3dComp.getImplementation();
        contentPane.add(x3dPanel, BorderLayout.CENTER);

        // Get an external browser
        ExternalBrowser x3dBrowser = x3dComp.getBrowser();

        boolean useXj3D = true;

        if (x3dBrowser.getName().indexOf("Xj3D") < 0) {
            System.out.println("Not running on Xj3D, extended functions disabled");
            useXj3D = false;
        }
        setSize(500,500);
        setVisible(true);


        // Create an X3D scene by loading a file
        X3DScene mainScene = x3dBrowser.createX3DFromURL(new String[] { "moving_box.x3dv" });

        // Replace the current world with the new one
        x3dBrowser.replaceWorld(mainScene);

        if (!useXj3D)
            return;

        Xj3DBrowser xj3dBrowser = (Xj3DBrowser) x3dBrowser;
        xj3dBrowser.setMinimumFrameInterval(1000 / 15);

        boolean lines = true;

        while(true) {
            if (lines) {
                xj3dBrowser.setRenderingStyle(Xj3DBrowser.RENDER_LINES);
                lines = false;
            } else {
                xj3dBrowser.setRenderingStyle(Xj3DBrowser.RENDER_SHADED);
                lines = true;
            }

            try { Thread.sleep(250); } catch(Exception e) {}
        }

    }

    /**
     * Main method.
     *
     * @param args None handled
     */
    public static void main(String[] args) {

        Xj3DSpecificDemo demo = new Xj3DSpecificDemo();
    }

}
