create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / dialogs / motor / MotorChooserDialog.java
1 package net.sf.openrocket.gui.dialogs.motor;
2
3
4 import java.awt.Dialog;
5 import java.awt.Window;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8
9 import javax.swing.JButton;
10 import javax.swing.JComponent;
11 import javax.swing.JDialog;
12 import javax.swing.JPanel;
13
14 import net.miginfocom.swing.MigLayout;
15 import net.sf.openrocket.gui.dialogs.MotorDatabaseLoadingDialog;
16 import net.sf.openrocket.gui.dialogs.motor.thrustcurve.ThrustCurveMotorSelectionPanel;
17 import net.sf.openrocket.gui.util.GUIUtil;
18 import net.sf.openrocket.l10n.Translator;
19 import net.sf.openrocket.motor.Motor;
20 import net.sf.openrocket.motor.ThrustCurveMotor;
21 import net.sf.openrocket.startup.Application;
22
23 public class MotorChooserDialog extends JDialog implements CloseableDialog {
24         
25         private final ThrustCurveMotorSelectionPanel selectionPanel;
26         
27         private boolean okClicked = false;
28         private static final Translator trans = Application.getTranslator();
29
30         
31         public MotorChooserDialog(Motor current, double delay, double diameter, Window owner) {
32                 super(owner, trans.get ("MotorChooserDialog.title"), Dialog.ModalityType.APPLICATION_MODAL);
33                 
34                 // Check that the motor database has been loaded properly
35                 MotorDatabaseLoadingDialog.check(null);
36                 
37
38                 JPanel panel = new JPanel(new MigLayout("fill"));
39                 
40                 selectionPanel = new ThrustCurveMotorSelectionPanel((ThrustCurveMotor) current, delay, diameter);
41                 
42                 panel.add(selectionPanel, "grow, wrap para");
43                 
44
45                 // OK / Cancel buttons
46                 JButton okButton = new JButton(trans.get("dlg.but.ok"));
47                 okButton.addActionListener(new ActionListener() {
48                         @Override
49                         public void actionPerformed(ActionEvent e) {
50                                 close(true);
51                         }
52                 });
53                 panel.add(okButton, "tag ok, spanx, split");
54                 
55                 //// Cancel button
56                 JButton cancelButton = new JButton(trans.get("dlg.but.cancel"));
57                 cancelButton.addActionListener(new ActionListener() {
58                         @Override
59                         public void actionPerformed(ActionEvent e) {
60                                 close(false);
61                         }
62                 });
63                 panel.add(cancelButton, "tag cancel");
64                 
65                 this.add(panel);
66                 
67                 this.setModal(true);
68                 this.pack();
69                 this.setLocationByPlatform(true);
70                 GUIUtil.setDisposableDialogOptions(this, okButton);
71                 
72                 JComponent focus = selectionPanel.getDefaultFocus();
73                 if (focus != null) {
74                         focus.grabFocus();
75                 }
76                 
77                 // Set the closeable dialog after all initialization
78                 selectionPanel.setCloseableDialog(this);
79         }
80         
81         
82         /**
83          * Return the motor selected by this chooser dialog, or <code>null</code> if the selection has been aborted.
84          * 
85          * @return      the selected motor, or <code>null</code> if no motor has been selected or the selection was canceled.
86          */
87         public Motor getSelectedMotor() {
88                 if (!okClicked)
89                         return null;
90                 return selectionPanel.getSelectedMotor();
91         }
92         
93         /**
94          * Return the selected ejection charge delay.
95          * 
96          * @return      the selected ejection charge delay.
97          */
98         public double getSelectedDelay() {
99                 return selectionPanel.getSelectedDelay();
100         }
101         
102         
103
104         @Override
105         public void close(boolean ok) {
106                 okClicked = ok;
107                 this.setVisible(false);
108                 
109                 Motor selected = getSelectedMotor();
110                 if (okClicked && selected != null) {
111                         selectionPanel.selectedMotor(selected);
112                 }
113         }
114         
115 }