]> gitweb.fperrin.net Git - GpsPrune.git/blobdiff - tim/prune/threedee/Java3DWindow.java
Version 8, September 2009
[GpsPrune.git] / tim / prune / threedee / Java3DWindow.java
index b6a017ae05e90606381cff9cc80385ab3ade0301..0bde564c373fe45199aca872bdbcf49f18cf97de 100644 (file)
@@ -7,6 +7,8 @@ import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsEnvironment;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
 import java.awt.geom.GeneralPath;
 
 import javax.media.j3d.AmbientLight;
@@ -40,7 +42,7 @@ import com.sun.j3d.utils.geometry.Cylinder;
 import com.sun.j3d.utils.geometry.Sphere;
 import com.sun.j3d.utils.universe.SimpleUniverse;
 
-import tim.prune.App;
+import tim.prune.FunctionLibrary;
 import tim.prune.I18nManager;
 import tim.prune.data.Altitude;
 import tim.prune.data.Track;
@@ -51,7 +53,6 @@ import tim.prune.data.Track;
  */
 public class Java3DWindow implements ThreeDWindow
 {
-       private App _app = null;
        private Track _track = null;
        private JFrame _parentFrame = null;
        private JFrame _frame = null;
@@ -71,12 +72,10 @@ public class Java3DWindow implements ThreeDWindow
 
        /**
         * Constructor
-        * @param inApp App object to use for callbacks
         * @param inFrame parent frame
         */
-       public Java3DWindow(App inApp, JFrame inFrame)
+       public Java3DWindow(JFrame inFrame)
        {
-               _app = inApp;
                _parentFrame = inFrame;
        }
 
@@ -131,7 +130,7 @@ public class Java3DWindow implements ThreeDWindow
                {
                        if (JOptionPane.showOptionDialog(_frame,
                                        I18nManager.getText("dialog.exportpov.warningtracksize"),
-                                       I18nManager.getText("dialog.exportpov.title"), JOptionPane.OK_CANCEL_OPTION,
+                                       I18nManager.getText("function.exportpov"), JOptionPane.OK_CANCEL_OPTION,
                                        JOptionPane.WARNING_MESSAGE, null, buttonTexts, buttonTexts[1])
                                == JOptionPane.OK_OPTION)
                        {
@@ -169,11 +168,12 @@ public class Java3DWindow implements ThreeDWindow
                _frame = new JFrame(I18nManager.getText("dialog.3d.title"));
                _frame.getContentPane().setLayout(new BorderLayout());
                _frame.getContentPane().add(canvas, BorderLayout.CENTER);
+               _frame.setIconImage(_parentFrame.getIconImage());
                // Make panel for render, close buttons
                JPanel panel = new JPanel();
                panel.setLayout(new FlowLayout(FlowLayout.RIGHT));
                // Add callback button for render
-               JButton renderButton = new JButton(I18nManager.getText("menu.file.exportpov"));
+               JButton renderButton = new JButton(I18nManager.getText("function.exportpov"));
                renderButton.addActionListener(new ActionListener()
                {
                        /** Render button pressed */
@@ -207,20 +207,38 @@ public class Java3DWindow implements ThreeDWindow
                                _frame.dispose();
                                _frame = null;
                                _orbit = null;
-                       }});
+                       }
+               });
                panel.add(closeButton);
                _frame.getContentPane().add(panel, BorderLayout.SOUTH);
                _frame.setSize(500, 350);
                _frame.pack();
+               // Add a listener to clean up when window closed
+               _frame.addWindowListener(new WindowAdapter() {
+                       public void windowClosing(WindowEvent e)
+                       {
+                               dispose();
+                       }
+               });
 
                // show frame
-               _frame.show();
+               _frame.setVisible(true);
                if (_frame.getState() == JFrame.ICONIFIED)
                {
                        _frame.setState(JFrame.NORMAL);
                }
        }
 
+       /**
+        * Dispose of the frame and its resources
+        */
+       public void dispose()
+       {
+               if (_frame != null) {
+                       _frame.dispose();
+                       _frame = null;
+               }
+       }
 
        /**
         * Create the whole scenery from the given track
@@ -447,7 +465,7 @@ public class Java3DWindow implements ThreeDWindow
        private static Group createWaypoint(Point3d inPointPos)
        {
                Material mat = getWaypointMaterial();
-               // TODO: sort symbol scaling
+               // MAYBE: sort symbol scaling
                Sphere dot = new Sphere(0.35f); // * symbolScaling / 100f);
                return createBall(inPointPos, dot, mat);
        }
@@ -467,7 +485,7 @@ public class Java3DWindow implements ThreeDWindow
        private static Group createTrackpoint(Point3d inPointPos, byte inHeightCode)
        {
                Material mat = getTrackpointMaterial(inHeightCode);
-               // TODO: sort symbol scaling
+               // MAYBE: sort symbol scaling
                Sphere dot = new Sphere(0.2f); // * symbolScaling / 100f);
                return createBall(inPointPos, dot, mat);
        }
@@ -550,8 +568,10 @@ public class Java3DWindow implements ThreeDWindow
                Point3d result = new Point3d();
                secondTran.transform(point, result);
                firstTran.transform(result);
-               // Callback settings to App
-               _app.exportPov(result.x, result.y, result.z, _altitudeCap);
+               // Callback settings to pov export function
+               FunctionLibrary.FUNCTION_POVEXPORT.setCameraCoordinates(result.x, result.y, result.z);
+               FunctionLibrary.FUNCTION_POVEXPORT.setAltitudeCap(_altitudeCap);
+               FunctionLibrary.FUNCTION_POVEXPORT.begin();
        }
 
 
@@ -562,8 +582,8 @@ public class Java3DWindow implements ThreeDWindow
         */
        private static String getAltitudeUnitsLabel(Track inTrack)
        {
-               int altitudeFormat = inTrack.getAltitudeRange().getFormat();
-               if (altitudeFormat == Altitude.FORMAT_METRES)
+               Altitude.Format altitudeFormat = inTrack.getAltitudeRange().getFormat();
+               if (altitudeFormat == Altitude.Format.METRES)
                        return I18nManager.getText("units.metres.short");
                return I18nManager.getText("units.feet.short");
        }