Merged l10n branch to trunk
[debian/openrocket] / src / net / sf / openrocket / gui / dialogs / MotorDatabaseLoadingDialog.java
1 package net.sf.openrocket.gui.dialogs;
2
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6
7 import javax.swing.JDialog;
8 import javax.swing.JLabel;
9 import javax.swing.JPanel;
10 import javax.swing.JProgressBar;
11 import javax.swing.Timer;
12
13 import net.miginfocom.swing.MigLayout;
14 import net.sf.openrocket.database.ThrustCurveMotorSetDatabase;
15 import net.sf.openrocket.l10n.Translator;
16 import net.sf.openrocket.logging.LogHelper;
17 import net.sf.openrocket.startup.Application;
18 import net.sf.openrocket.util.GUIUtil;
19
20 public class MotorDatabaseLoadingDialog extends JDialog {
21         private static final LogHelper log = Application.getLogger();
22         private static final Translator trans = Application.getTranslator();
23
24         
25         private MotorDatabaseLoadingDialog(Window parent) {
26                 //// Loading motors
27                 super(parent, trans.get("MotorDbLoadDlg.title"), ModalityType.APPLICATION_MODAL);
28                 
29                 JPanel panel = new JPanel(new MigLayout("fill"));
30                 //// Loading motors...
31                 panel.add(new JLabel(trans.get("MotorDbLoadDlg.Loadingmotors")), "wrap para");
32                 
33                 JProgressBar progress = new JProgressBar();
34                 progress.setIndeterminate(true);
35                 panel.add(progress, "growx");
36                 
37                 this.add(panel);
38                 this.pack();
39                 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
40                 this.setLocationByPlatform(true);
41                 GUIUtil.setWindowIcons(this);
42         }
43         
44         
45         /**
46          * Check whether the motor database is loaded and block until it is.
47          * An uncloseable modal dialog window is opened while loading.
48          * 
49          * @param parent        the parent window for the dialog, or <code>null</code>
50          */
51         public static void check(Window parent) {
52                 final ThrustCurveMotorSetDatabase db = Application.getMotorSetDatabase();
53                 if (db.isLoaded())
54                         return;
55                 
56                 log.info(1, "Motor database not loaded yet, displaying dialog");
57                 
58                 final MotorDatabaseLoadingDialog dialog = new MotorDatabaseLoadingDialog(parent);
59                 
60                 final Timer timer = new Timer(100, new ActionListener() {
61                         private int count = 0;
62                         
63                         @Override
64                         public void actionPerformed(ActionEvent e) {
65                                 count++;
66                                 if (db.isLoaded()) {
67                                         log.debug("Database loaded, closing dialog");
68                                         dialog.setVisible(false);
69                                 } else if (count % 10 == 0) {
70                                         log.debug("Database not loaded, count=" + count);
71                                 }
72                         }
73                 });
74                 
75                 db.setInUse();
76                 timer.start();
77                 dialog.setVisible(true);
78                 timer.stop();
79                 
80                 log.debug("Motor database now loaded");
81         }
82         
83 }