X-Git-Url: https://gitweb.fperrin.net/?a=blobdiff_plain;f=tim%2Fprune%2Fthreedee%2FJava3DWindow.java;h=0bde564c373fe45199aca872bdbcf49f18cf97de;hb=112bb0c9b46894adca9a33ed8c99ea712b253185;hp=b6a017ae05e90606381cff9cc80385ab3ade0301;hpb=5625a1abadb5f2ca5f017fe7dbda1d5141cb637b;p=GpsPrune.git diff --git a/tim/prune/threedee/Java3DWindow.java b/tim/prune/threedee/Java3DWindow.java index b6a017a..0bde564 100644 --- a/tim/prune/threedee/Java3DWindow.java +++ b/tim/prune/threedee/Java3DWindow.java @@ -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"); }