J3dEdit.java :  » 6.0-JDK-Modules » java-3d » org » jdesktop » j3dedit » Java Open Source

Java Open Source » 6.0 JDK Modules » java 3d 
java 3d » org » jdesktop » j3dedit » J3dEdit.java
/*
 *  $Header: /cvs/j3dfly/J3dEditor/src/org/jdesktop/j3dedit/J3dEdit.java,v 1.3 2007/03/16 22:50:12 paulby Exp $
 *
 *                         Sun Public License Notice
 *
 *  The contents of this file are subject to the Sun Public License Version
 *  1.0 (the "License"). You may not use this file except in compliance with
 *  the License. A copy of the License is available at http://www.sun.com/
 *
 *  The Original Code is the Java 3D(tm) Scene Graph Editor.
 *  The Initial Developer of the Original Code is Paul Byrne.
 *  Portions created by Paul Byrne are Copyright (C) 2002.
 *  All Rights Reserved.
 *
 *  Contributor(s): Paul Byrne.
 *
 **/
package org.jdesktop.j3dedit;

import java.util.Enumeration;
import java.util.Iterator;
import javax.media.j3d.*;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import java.awt.Point;
import java.awt.Cursor;
import java.io.*;
import java.awt.event.KeyEvent;
import javax.swing.KeyStroke;
import java.util.ArrayList;

import com.sun.j3d.utils.behaviors.interpolators.KBKeyFrame;
import com.sun.j3d.utils.behaviors.interpolators.KBRotPosScaleSplinePathInterpolator;
import org.jdesktop.j3dfly.utils.developmenttools.DevelopmentLocale;
import org.jdesktop.j3dfly.utils.gui.SplashWindow;
import org.jdesktop.j3dfly.J3dFlyController;
import org.jdesktop.j3dedit.scenegrapheditor.ConfigLoader;
import org.jdesktop.j3dedit.scenegrapheditor.sourcecontrol.ClassGenerator;
import org.jdesktop.j3dedit.scenegraph.SGLocale;
import org.jdesktop.j3dfly.utils.loadercontrol.ManifestParser;
import org.jdesktop.j3dedit.scenegrapheditor.InterposerListener;
import org.jdesktop.j3dedit.interposer.InterposerUniverse;
import org.jdesktop.j3dedit.interposer.InterposerLocale;

import org.jdesktop.j3dfly.utils.gui.ErrorManager;
import org.jdesktop.j3dfly.utils.gui.ErrorHandler;

import org.jdesktop.j3dedit.actions.ActionManager;
import org.jdesktop.j3dedit.actions.CutAction;
import org.jdesktop.j3dedit.actions.CopyAction;
import org.jdesktop.j3dedit.actions.PasteAction;
import org.jdesktop.j3dedit.actions.DeleteAction;
import org.jdesktop.j3dedit.editormodules.J3dFlyEditorModule;
import org.jdesktop.j3dedit.editormodules.AbstractEditorModule;
import org.jdesktop.j3dedit.editormodules.LocationEditorModule;
import org.jdesktop.j3dedit.editormodules.SceneGraphEditorModule;

/**
 * The main class for the editor
 *
 * @author Paul Byrne
 * @version $id$
 */
public class J3dEdit extends javax.swing.JFrame 
                     implements ManifestParser.ManifestListener {
    
    private boolean readOnly = false;
    
    private J3dFlyEditorModule flyModule;
    //private AnimationEditorModule animModule;
    private SceneGraphEditorModule graphModule;
    private LocationEditorModule locationModule;
    private AbstractEditorModule currentModule=null;
    
    private J3dFlyController j3dflyController;
    private EditorControlFrame editorControlFrame;
        
    private File projectFile=null;     // File for current project
    
    private org.jdesktop.j3dedit.interposerext.InterposerCallbacks interposer=null;
    private javax.media.j3d.Locale locale = null;
    
    /**
     * Constructor used by interposer
     */
    public J3dEdit(org.jdesktop.j3dedit.interposerext.InterposerCallbacks interposer,
                   Object locale ) {
        super();
        this.interposer = interposer;
        this.locale = (javax.media.j3d.Locale)locale;
        InterposerListener listener = new InterposerListener();
        InterposerUniverse universeWrapper = new InterposerUniverse( 
                                this.locale.getVirtualUniverse(), 
                                new InterposerLocale(this.locale) );
        startEditor( null, universeWrapper );
        listener.setContext( flyModule.getContext() );
        
        
        // This call must be made after the listener context has been set and after
        // the editor
        interposer.setInterposerListener( listener );
        
        // This needs to be called after InterposerListener has been set
        universeWrapper.finishHiddenLocaleInit( flyModule.getContext() );
    }
    
    /**
     * Universe MUST contain DevelopmentLocales
     */
    public J3dEdit(VirtualUniverse universe) {
        super();
        Enumeration it = universe.getAllLocales();
        this.locale = (DevelopmentLocale)it.nextElement();
        assert(this.locale instanceof DevelopmentLocale);
        
        InterposerUniverse universeWrapper = new InterposerUniverse( 
                                this.locale.getVirtualUniverse(), 
                                (DevelopmentLocale)this.locale );
        startEditor( null, universeWrapper );
        
        new GraphChangeListener((DevelopmentLocale)locale);
        
    }
    
    /** Creates new form Editor */
    public J3dEdit( String[] args ) {
        super();
        startEditor( args, null );
    }
    
    
    private void startEditor( String[] args, InterposerUniverse universeWrapper ) {
        SplashWindow.showSplashscreen("org/jdesktop/j3dedit/splash.jpg");
        SplashWindow.showMessage("Initialising GUI");
        
        // copyCutPasteDeleteActions must be instantiated before the call
        // to initComponents so that the menu actions are defined
        CopyCutPasteDeleteActions copyCutPasteDeleteActions = new CopyCutPasteDeleteActions();
        initComponents();
        
        this.setTitle( "Java 3D(tm) Scene Graph Editor 2.0 alpha "+Version.version );
        
        menuBar.remove( fileMenu );
        menuBar.remove( editMenu );
        menuBar.remove( viewMenu );
        menuBar.remove( packageMenu );
        menuBar.remove( helpMenu );
        
        mainToolbarP.add( copyCutPasteDeleteActions.getToolBar() );
        
        
        // TODO
        // setHelpMenu is not yet implemented in JDK 1.4
        //menuBar.remove( helpMenu );
        //menuBar.setHelpMenu( helpMenu );
        
        SplashWindow.showMessage("Loading Config");
        ConfigLoader config = new ConfigLoader();
        
        SplashWindow.showMessage("Initializing Modules");
        flyModule = new J3dFlyEditorModule( this, j3dflyToolbarsP, universeWrapper );
        flyModule.getContext().setConfigLoader( config );
        
        //animModule = new AnimationEditorModule( this, flyModule );
        graphModule = new SceneGraphEditorModule( this, flyModule );
        locationModule = new LocationEditorModule( this, flyModule );
        currentModule=null;
        
        if (interposer==null)
            checkLoaderManifests();
        
        // TODO Reorder the menus
        menuBar.add( editMenu );
        menuBar.add( viewMenu );
        menuBar.add( packageMenu );
        menuBar.add( helpMenu );
        
        flyModule.populateMenuBar( menuBar );
        //animModule.populateMenuBar( menuBar );
        graphModule.populateMenuBar( menuBar );
        
        locationModule.populateMenuBar( menuBar );
        
        // Make all menus heavyweight
        javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false);
        
        pack();     // Pack so modules can tell how big this frame is
        
        SplashWindow.showMessage("Installing Modules");
        installModules();
        
        if (universeWrapper==null) {
            j3dflyController = flyModule.getController();
            
            // Add some default branch graphs
            // TODO allow the user to add BranchGraphs to the Locale
            j3dflyController.addBranchGraph( new BranchGroup() );
            j3dflyController.addBranchGraph( new BranchGroup() );
        }
        
        
        if (args!=null && args.length!=0) {
            SplashWindow.showMessage("Loading Project "+args[0] );
            projectFile = new File( args[0] );
            j3dflyController.loadGeometry( projectFile );
            setWindowTitle();
            saveM.setEnabled( true );
        }
        
        SplashWindow.destroySplashscreen();
    }
    
    
    /**
     * Check the loader manifests for any Editor setup information
     */
    private void checkLoaderManifests() {
        System.out.println("Editor Checking Manifests");
        java.net.URL[] urls=flyModule.getContext().getJ3dFly().getController().getLoaderControl().getClassLoader().getURLs();
        for(int i=0; i<urls.length; i++)
            if (urls[i].getFile().toLowerCase().endsWith(".jar")) {
                try {
                    //System.out.println("CHecking url "+urls[i]);
                    ManifestParser.processMainAttributes( new java.util.jar.JarFile(urls[i].getFile()),
                    new String[] {"J3dEditor-Config"},
                    this );
                } catch( java.io.IOException e ) {
                    ErrorManager.getDefault().notify( e, ErrorHandler.INFORMATIONAL, "Error with jar "+urls[i] );
                }
            }
        
    }
    
    /**
     * Listener for ManifestParser
     */
    public void foundManifestAttribute(String name, String value) {
        //System.out.println("Editor Found "+name+"  "+value);
        ClassLoader classLoader = flyModule.getContext().getJ3dFly().getController().getLoaderControl().getClassLoader();
        InputStream in = classLoader.getResourceAsStream( value );
        //System.out.println("Resource "+in);
        flyModule.getContext().getConfigLoader().addConfig( in, classLoader );
    }
    
    /**
     * Returns the editors View Menu
     */
    public javax.swing.JMenu getViewMenu() {
        return viewMenu;
    }
    
    /**
     * Return the current context
     */
    public J3dEditContext getContext() {
        return flyModule.getContext();
    }
    
    private void installModules() {
        javax.swing.ButtonGroup modeGroup = new javax.swing.ButtonGroup();
        
        modeGroup.add( viewUniverseB );
        modeGroup.add( editSceneGraphB );
        //modeGroup.add( editAnimationB );
        modeGroup.add( editPositionB );
        
        editorControlFrame = new EditorControlFrame( flyModule.getContext() );
        editorControlFrame.setBounds( 0, this.getHeight(), 200, 500 );
        editorControlFrame.setVisible(true );
        
        pack();
        setVisible( true );
        viewUniverseB.setSelected( true );
        graphModule.setActive( true );
        currentModule = graphModule;
        editSceneGraphB.setSelected( true );
    }
    
    /**
     * Get the panel on the left of the control window in which
     * module toolbars can be placed
     */
    public javax.swing.JPanel getLeftToolbarPanel() {
        return leftToolbarP;
    }
    
    public EditorControlFrame getEditorControlFrame() {
        return editorControlFrame;
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the FormEditor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        modePanel = new javax.swing.JPanel();
        viewUniverseB = new javax.swing.JToggleButton();
        editSceneGraphB = new javax.swing.JToggleButton();
        editPositionB = new javax.swing.JToggleButton();
        editAnimationB = new javax.swing.JToggleButton();
        leftToolbarP = new javax.swing.JPanel();
        j3dflyToolbarsP = new javax.swing.JPanel();
        mainToolbarP = new javax.swing.JPanel();
        leftToolbars = new javax.swing.JToolBar();
        loadB = new javax.swing.JButton();
        saveB = new javax.swing.JButton();
        jSeparator7 = new javax.swing.JSeparator();
        zoomInB = new javax.swing.JButton();
        zoomOutB = new javax.swing.JButton();
        menuBar = new javax.swing.JMenuBar();
        fileMenu = new javax.swing.JMenu();
        loadM = new javax.swing.JMenuItem();
        importM = new javax.swing.JMenuItem();
        configureLoadersM = new javax.swing.JMenuItem();
        saveM = new javax.swing.JMenuItem();
        saveAsM = new javax.swing.JMenuItem();
        jSeparator3 = new javax.swing.JSeparator();
        newGraphM = new javax.swing.JMenu();
        newSimpleSceneGraphMI = new javax.swing.JMenuItem();
        newInterpTestMI = new javax.swing.JMenuItem();
        jSeparator4 = new javax.swing.JSeparator();
        exitM = new javax.swing.JMenuItem();
        editMenu = new javax.swing.JMenu();
        cutM = new javax.swing.JMenuItem();
        copyM = new javax.swing.JMenuItem();
        pasteM = new javax.swing.JMenuItem();
        deleteM = new javax.swing.JMenuItem();
        jSeparator5 = new javax.swing.JSeparator();
        propertiesM = new javax.swing.JMenuItem();
        viewMenu = new javax.swing.JMenu();
        updateGraphM = new javax.swing.JMenuItem();
        universeRunningMI = new javax.swing.JCheckBoxMenuItem();
        packageMenu = new javax.swing.JMenu();
        generateSourceM = new javax.swing.JMenuItem();
        generateJarM = new javax.swing.JMenuItem();
        helpMenu = new javax.swing.JMenu();
        aboutM = new javax.swing.JMenuItem();

        getContentPane().setLayout(new java.awt.GridBagLayout());

        setName("editorFrame");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        modePanel.setLayout(new java.awt.GridBagLayout());

        modePanel.setBorder(new javax.swing.border.EtchedBorder());
        viewUniverseB.setText("View Universe");
        viewUniverseB.setMargin(new java.awt.Insets(2, 2, 2, 2));
        viewUniverseB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                modeSelectionActionPerformed(evt);
            }
        });

        modePanel.add(viewUniverseB, new java.awt.GridBagConstraints());

        editSceneGraphB.setText("Edit Scene Graph");
        editSceneGraphB.setMargin(new java.awt.Insets(2, 2, 2, 2));
        editSceneGraphB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                modeSelectionActionPerformed(evt);
            }
        });

        modePanel.add(editSceneGraphB, new java.awt.GridBagConstraints());

        editPositionB.setText("Position Editor");
        editPositionB.setMargin(new java.awt.Insets(2, 2, 2, 2));
        editPositionB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                modeSelectionActionPerformed(evt);
            }
        });

        modePanel.add(editPositionB, new java.awt.GridBagConstraints());

        editAnimationB.setText("Edit Animation");
        editAnimationB.setMargin(new java.awt.Insets(2, 2, 2, 2));
        editAnimationB.setEnabled(false);
        editAnimationB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                modeSelectionActionPerformed(evt);
            }
        });

        modePanel.add(editAnimationB, new java.awt.GridBagConstraints());

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(modePanel, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(leftToolbarP, gridBagConstraints);

        j3dflyToolbarsP.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 2));

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(j3dflyToolbarsP, gridBagConstraints);

        mainToolbarP.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 2));

        loadB.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jdesktop/j3dedit/scenegrapheditor/resources/JavaLookAndFeel/toolbarButtonGraphics/general/Open16.gif")));
        loadB.setToolTipText("Load a New Scenegraph");
        loadB.setMaximumSize(new java.awt.Dimension(28, 28));
        loadB.setMinimumSize(new java.awt.Dimension(28, 28));
        loadB.setPreferredSize(new java.awt.Dimension(28, 28));
        loadB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loadActionPerformed(evt);
            }
        });

        leftToolbars.add(loadB);

        saveB.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jdesktop/j3dedit/scenegrapheditor/resources/JavaLookAndFeel/toolbarButtonGraphics/general/Save16.gif")));
        saveB.setToolTipText("Save the scenegraph");
        saveB.setMaximumSize(new java.awt.Dimension(28, 28));
        saveB.setMinimumSize(new java.awt.Dimension(28, 28));
        saveB.setPreferredSize(new java.awt.Dimension(28, 28));
        saveB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveActionPerformed(evt);
            }
        });

        leftToolbars.add(saveB);

        jSeparator7.setOrientation(javax.swing.SwingConstants.VERTICAL);
        jSeparator7.setBorder(new javax.swing.border.EtchedBorder());
        jSeparator7.setMinimumSize(new java.awt.Dimension(2, 0));
        leftToolbars.add(jSeparator7);

        zoomInB.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jdesktop/j3dedit/scenegrapheditor/resources/JavaLookAndFeel/toolbarButtonGraphics/general/ZoomIn16.gif")));
        zoomInB.setToolTipText("Zoom In");
        zoomInB.setMaximumSize(new java.awt.Dimension(28, 28));
        zoomInB.setMinimumSize(new java.awt.Dimension(28, 28));
        zoomInB.setPreferredSize(new java.awt.Dimension(28, 28));
        zoomInB.setEnabled(false);
        zoomInB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zoomActionPerformed(evt);
            }
        });

        leftToolbars.add(zoomInB);

        zoomOutB.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jdesktop/j3dedit/scenegrapheditor/resources/JavaLookAndFeel/toolbarButtonGraphics/general/ZoomOut16.gif")));
        zoomOutB.setToolTipText("Zoom Out");
        zoomOutB.setMaximumSize(new java.awt.Dimension(28, 28));
        zoomOutB.setMinimumSize(new java.awt.Dimension(28, 28));
        zoomOutB.setPreferredSize(new java.awt.Dimension(28, 28));
        zoomOutB.setEnabled(false);
        zoomOutB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zoomActionPerformed(evt);
            }
        });

        leftToolbars.add(zoomOutB);

        mainToolbarP.add(leftToolbars);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
        getContentPane().add(mainToolbarP, gridBagConstraints);

        fileMenu.setMnemonic('F');
        fileMenu.setText("File");
        loadM.setMnemonic('L');
        loadM.setText("Load ...");
        loadM.setToolTipText("Load a new scene");
        loadM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                loadActionPerformed(evt);
            }
        });

        fileMenu.add(loadM);

        importM.setMnemonic('I');
        importM.setText("Import...");
        importM.setToolTipText("Import an object to the scene");
        importM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                importMActionPerformed(evt);
            }
        });

        fileMenu.add(importM);

        configureLoadersM.setText("Configure Loaders...");
        configureLoadersM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                configureLoadersMActionPerformed(evt);
            }
        });

        fileMenu.add(configureLoadersM);

        saveM.setMnemonic('S');
        saveM.setText("Save");
        saveM.setEnabled(false);
        saveM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveActionPerformed(evt);
            }
        });

        fileMenu.add(saveM);

        saveAsM.setText("Save As...");
        saveAsM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                saveAsActionPerformed(evt);
            }
        });

        fileMenu.add(saveAsM);

        fileMenu.add(jSeparator3);

        newGraphM.setText("New Universe");
        newSimpleSceneGraphMI.setText("Simple Universe");
        newSimpleSceneGraphMI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                newSimpleSceneGraphMIActionPerformed(evt);
            }
        });

        newGraphM.add(newSimpleSceneGraphMI);

        newInterpTestMI.setText("Iterpolator Test");
        newInterpTestMI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                newInterpTestMIActionPerformed(evt);
            }
        });

        newGraphM.add(newInterpTestMI);

        fileMenu.add(newGraphM);

        fileMenu.add(jSeparator4);

        exitM.setMnemonic('X');
        exitM.setText("Exit");
        exitM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                exitActionPerformed(evt);
            }
        });

        fileMenu.add(exitM);

        menuBar.add(fileMenu);

        editMenu.setMnemonic('E');
        editMenu.setLabel("Edit");
        cutM.setMnemonic('T');
        cutM.setAction(ActionManager.getAction( CutAction.class ));
        cutM.setEnabled(false);
        editMenu.add(cutM);

        copyM.setAction(ActionManager.getAction( CopyAction.class ));
        copyM.setEnabled(false);
        editMenu.add(copyM);

        pasteM.setAction(ActionManager.getAction( PasteAction.class ));
        pasteM.setEnabled(false);
        editMenu.add(pasteM);

        deleteM.setAction(ActionManager.getAction( DeleteAction.class ));
        deleteM.setEnabled(false);
        editMenu.add(deleteM);

        editMenu.add(jSeparator5);

        propertiesM.setText("Properties...");
        propertiesM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                propertiesMActionPerformed(evt);
            }
        });

        editMenu.add(propertiesM);

        menuBar.add(editMenu);

        viewMenu.setMnemonic('V');
        viewMenu.setText("View");
        updateGraphM.setText("Update Scene Graph - not implemented");
        updateGraphM.setToolTipText("Traverse the running SceneGraph and update the tree view");
        updateGraphM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                updateGraphMActionPerformed(evt);
            }
        });

        viewMenu.add(updateGraphM);

        universeRunningMI.setSelected(true);
        universeRunningMI.setText("Universe Live");
        universeRunningMI.setToolTipText("Enable/Disable the 3D Universe");
        universeRunningMI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                universeRunningMIActionPerformed(evt);
            }
        });

        viewMenu.add(universeRunningMI);

        menuBar.add(viewMenu);

        packageMenu.setText("Package");
        generateSourceM.setText("Generate Source");
        generateSourceM.setToolTipText("Generate Java Source code for this SceneGraph");
        generateSourceM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                generateSourceMActionPerformed(evt);
            }
        });

        packageMenu.add(generateSourceM);

        generateJarM.setText("Generate Jar");
        generateJarM.setToolTipText("Generate a Jar of this SceneGraph");
        generateJarM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                generateJarMActionPerformed(evt);
            }
        });

        packageMenu.add(generateJarM);

        menuBar.add(packageMenu);

        helpMenu.setText("Help");
        aboutM.setText("About");
        aboutM.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                aboutMActionPerformed(evt);
            }
        });

        helpMenu.add(aboutM);

        menuBar.add(helpMenu);

        setJMenuBar(menuBar);

    }
    // </editor-fold>//GEN-END:initComponents
  
  private void generateSourceMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateSourceMActionPerformed
      generateSource();
  }//GEN-LAST:event_generateSourceMActionPerformed
  
  public void generateSource() {
      ClassGenerator generator = new ClassGenerator( flyModule.getContext(), (SGLocale) graphModule.getRoot(), "Tst");
      generator.create();
      System.out.println(generator);
  }
  private void newInterpTestMIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newInterpTestMIActionPerformed
      // Add your handling code here:
      j3dflyController.clearUniverse();
      
      BranchGroup bg = new BranchGroup();
      TransformGroup tg = new TransformGroup();
      bg.addChild( tg );
      Appearance app = new Appearance();
      PolygonAttributes polyAttr = new PolygonAttributes();
      polyAttr.setPolygonMode( PolygonAttributes.POLYGON_LINE );
      app.setPolygonAttributes( polyAttr );
      tg.addChild( new com.sun.j3d.utils.geometry.Box( 0.5f, 0.5f, 0.5f, app) );
      
      Alpha alpha = new Alpha( -1, 5000 );
      Transform3D axis = new Transform3D();
      axis.setIdentity();
      KBKeyFrame[] keys = new KBKeyFrame[] {
          new KBKeyFrame( 0f, 0, new Point3f( 0f, 0f, 0f ), 0f, 0f, 0f, new Point3f( 1f, 1f, 1f ), 0f, 0f, 0f ),
          new KBKeyFrame( 1f, 0, new Point3f( 2f, 2f, 2f ), 0f, 0f, 0f, new Point3f( 1f, 1f, 1f ), 0f, 0f, 0f )
          
      };
      
      KBRotPosScaleSplinePathInterpolator interp = new KBRotPosScaleSplinePathInterpolator( alpha,
      tg,
      axis,
      keys );
      interp.setSchedulingBounds( new BoundingSphere( new Point3d(), Double.POSITIVE_INFINITY ));
      bg.addChild( interp );
      
      j3dflyController.addBranchGraph(bg );
  }//GEN-LAST:event_newInterpTestMIActionPerformed
  
  private void newSimpleSceneGraphMIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_newSimpleSceneGraphMIActionPerformed
      // Add your handling code here:
      j3dflyController.clearUniverse();
      j3dflyController.addBranchGraph( new BranchGroup() );
      j3dflyController.addBranchGraph( new BranchGroup() );
  }//GEN-LAST:event_newSimpleSceneGraphMIActionPerformed
  
  private void importMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importMActionPerformed
      // Add your handling code here:
      j3dflyController.loadScene();
  }//GEN-LAST:event_importMActionPerformed
  
  private void universeRunningMIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_universeRunningMIActionPerformed
      // Add your handling code here:
      flyModule.getContext().getLocale().setLive( universeRunningMI.isSelected() );
  }//GEN-LAST:event_universeRunningMIActionPerformed
  
  private void configureLoadersMActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureLoadersMActionPerformed
      // Add your handling code here:
      j3dflyController.configureLoaders( null );
  }//GEN-LAST:event_configureLoadersMActionPerformed
  
  private void modeSelectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_modeSelectionActionPerformed
      // Add your handling code here:
      if ( evt.getSource()==viewUniverseB ) {
          if (currentModule!=null)
              currentModule.setActive( false );
          flyModule.setActive( true );
          currentModule = flyModule;
      } else if (evt.getSource()==editSceneGraphB ) {
          if (currentModule!=null)
              currentModule.setActive( false );
          graphModule.setActive( true );
          currentModule = graphModule;
          //      } else if (evt.getSource()==editAnimationB) {
          //          if (currentModule!=null)
          //              currentModule.setActive( false );
          //          animModule.setActive( true );
          //          currentModule = animModule;
      } else if (evt.getSource()==editPositionB ) {
          if (currentModule!=null)
              currentModule.setActive( false );
          locationModule.setActive( true );
          currentModule = locationModule;
      }
  }//GEN-LAST:event_modeSelectionActionPerformed
  
  private void updateGraphMActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_updateGraphMActionPerformed
      // Add your handling code here:
      System.out.println("updateGraphMActionPerformed not implemented");
      //sceneGraphControl.updateSceneGraph();
      //treeFrame.repaint();
  }//GEN-LAST:event_updateGraphMActionPerformed
  
  
  
  private void propertiesMActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_propertiesMActionPerformed
      // Add your handling code here:
      
  }//GEN-LAST:event_propertiesMActionPerformed
    
  /**
   * Set the type of performance for the editor,
   * level should be one of
   * PropertiesDialog.NONE_ALLOWED, READ_ALLOWED, READ_WRITE_ALLOWED
   */
  public void setPerformanceLevel( int level ) {
      //PropertiesDialog.performanceLevel = level;
      //sceneGraphControl.setEditorCapabilities();
  }
  
  private void aboutMActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_aboutMActionPerformed
      // Add your handling code here:
      javax.swing.JOptionPane.showMessageDialog( this, new AboutPanel());
  }//GEN-LAST:event_aboutMActionPerformed
  
private void zoomActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomActionPerformed
      }//GEN-LAST:event_zoomActionPerformed



private void exitActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitActionPerformed
    // Add your handling code here:
    exit();
  }//GEN-LAST:event_exitActionPerformed

private void saveAsActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveAsActionPerformed
    // Add your handling code here:
    //treeFrame.prepareToSave();
    //j3dFile = windowManager.chooseSaveFile( "Save J3D");
    //sceneGraphControl.saveSceneGraph( j3dFile );
    //setWindowTitle();
    flyModule.getContext().getLocale().setLive( false );
    
    flyModule.prepareToSave();
    //animModule.prepareToSave();
    graphModule.prepareToSave();
    locationModule.prepareToSave();
    projectFile = j3dflyController.saveAsScene();
    setWindowTitle();
    
    saveM.setEnabled( true );
    
    System.out.println("Save complete");
    
    flyModule.saveComplete();
    //animModule.saveComplete();
    graphModule.saveComplete();
    locationModule.saveComplete();
    
    System.out.println("Doing setLive");
    
    flyModule.getContext().getLocale().setLive( true );
  }//GEN-LAST:event_saveAsActionPerformed

private void saveActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed
    // Add your handling code here:
    flyModule.getContext().getLocale().setLive( false );
    
    flyModule.prepareToSave();
    //animModule.prepareToSave();
    graphModule.prepareToSave();
    locationModule.prepareToSave();
    j3dflyController.saveScene( projectFile );
    
    System.out.println("Save complete");
    
    flyModule.saveComplete();
    //animModule.saveComplete();
    graphModule.saveComplete();
    locationModule.saveComplete();
    
    System.out.println("Doing setLive");
    flyModule.getContext().getLocale().setLive( true );
  }//GEN-LAST:event_saveActionPerformed

/** @deprecated
 */
private void menuShowUserUniverseActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_menuShowUserUniverseActionPerformed
    // Add your handling code here:
  }//GEN-LAST:event_menuShowUserUniverseActionPerformed

private void loadActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_loadActionPerformed
    // Add your handling code here:
    j3dflyController.clearUniverse();
    projectFile = j3dflyController.loadScene();
    setWindowTitle();
    saveM.setEnabled( true );
  }//GEN-LAST:event_loadActionPerformed

/**
 * Package the scenegraph into an executable Jar file
 */
private void generateJarMActionPerformed (java.awt.event.ActionEvent evt) {//GEN-FIRST:event_generateJarMActionPerformed
    // Add your handling code here
    //saveActionPerformed(null);
    //JarBuilder builder = new JarBuilder();
    //builder.buildJar( j3dFile );
  }//GEN-LAST:event_generateJarMActionPerformed


/** Exit the Application */
  private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm
      exit();
  }//GEN-LAST:event_exitForm
  
  public javax.swing.JMenuBar getMainMenuBar() {
      return menuBar;
  }
  
  private void exit() {
      //TODO - Check with user and save data
      System.exit(0);
  }
  
  /**
   * Set the title of the window to be the current filename
   */
  private void setWindowTitle() {
      if (projectFile==null)
          setTitle("J3dEdit");
      else {
          String path = projectFile.getName();
          String filename = path.substring( path.lastIndexOf( File.separatorChar )+1, path.length() );
          setTitle( "J3dEdit - "+filename);
      }
  }
  
  /**
   * @param args the command line arguments
   */
  public static void main(String args[]) {
      //if (args.length>0) {
      //  new Editor( new File( args[0] ));
      //} else
      new J3dEdit( args );
  }
  
  class GraphChangeListener implements javax.media.j3d.GraphStructureChangeListener {
      
      private DevelopmentLocale locale;
      
      public GraphChangeListener(DevelopmentLocale locale) {
          this.locale = locale;
          locale.getVirtualUniverse().addGraphStructureChangeListener(this);
      }
      
      public void branchGroupAdded(java.lang.Object parent, BranchGroup child) {
          if (parent instanceof Locale) {
              return;
          }
          
          locale.notifyGroupAddChild( (Group)parent, child );
      }
      public void branchGroupMoved(java.lang.Object oldParent, java.lang.Object newParent, BranchGroup child) {
          if (!(oldParent instanceof Locale))
              locale.notifyGroupRemoveChild( (Group)oldParent, child );
          if (!(newParent instanceof Locale))
              locale.notifyGroupAddChild( (Group)newParent, child );
      }
      
      public void branchGroupRemoved(java.lang.Object parent, BranchGroup child) {
          if (parent instanceof Locale) {
              return;
          }
          locale.notifyGroupRemoveChild( (Group)parent, child );
      }
  }
  
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuItem aboutM;
    private javax.swing.JMenuItem configureLoadersM;
    private javax.swing.JMenuItem copyM;
    private javax.swing.JMenuItem cutM;
    private javax.swing.JMenuItem deleteM;
    private javax.swing.JToggleButton editAnimationB;
    private javax.swing.JMenu editMenu;
    private javax.swing.JToggleButton editPositionB;
    private javax.swing.JToggleButton editSceneGraphB;
    private javax.swing.JMenuItem exitM;
    private javax.swing.JMenu fileMenu;
    private javax.swing.JMenuItem generateJarM;
    private javax.swing.JMenuItem generateSourceM;
    private javax.swing.JMenu helpMenu;
    private javax.swing.JMenuItem importM;
    private javax.swing.JPanel j3dflyToolbarsP;
    private javax.swing.JSeparator jSeparator3;
    private javax.swing.JSeparator jSeparator4;
    private javax.swing.JSeparator jSeparator5;
    private javax.swing.JSeparator jSeparator7;
    private javax.swing.JPanel leftToolbarP;
    private javax.swing.JToolBar leftToolbars;
    private javax.swing.JButton loadB;
    private javax.swing.JMenuItem loadM;
    private javax.swing.JPanel mainToolbarP;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JPanel modePanel;
    private javax.swing.JMenu newGraphM;
    private javax.swing.JMenuItem newInterpTestMI;
    private javax.swing.JMenuItem newSimpleSceneGraphMI;
    private javax.swing.JMenu packageMenu;
    private javax.swing.JMenuItem pasteM;
    private javax.swing.JMenuItem propertiesM;
    private javax.swing.JMenuItem saveAsM;
    private javax.swing.JButton saveB;
    private javax.swing.JMenuItem saveM;
    private javax.swing.JCheckBoxMenuItem universeRunningMI;
    private javax.swing.JMenuItem updateGraphM;
    private javax.swing.JMenu viewMenu;
    private javax.swing.JToggleButton viewUniverseB;
    private javax.swing.JButton zoomInB;
    private javax.swing.JButton zoomOutB;
    // End of variables declaration//GEN-END:variables
  
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.