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;
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;
*/
public class Java3DWindow implements ThreeDWindow
{
- private App _app = null;
private Track _track = null;
private JFrame _parentFrame = null;
private JFrame _frame = null;
/**
* 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;
}
{
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)
{
_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 */
_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
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);
}
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);
}
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();
}
*/
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");
}