added svn:ignores
[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.logging.LogHelper;
16 import net.sf.openrocket.startup.Application;
17 import net.sf.openrocket.util.GUIUtil;
18
19 public class MotorDatabaseLoadingDialog extends JDialog {
20         private static final LogHelper log = Application.getLogger();
21         
22         
23         private MotorDatabaseLoadingDialog(Window parent) {
24                 super(parent, "Loading motors", ModalityType.APPLICATION_MODAL);
25                 
26                 JPanel panel = new JPanel(new MigLayout("fill"));
27                 panel.add(new JLabel("Loading motors..."), "wrap para");
28                 
29                 JProgressBar progress = new JProgressBar();
30                 progress.setIndeterminate(true);
31                 panel.add(progress, "growx");
32                 
33                 this.add(panel);
34                 this.pack();
35                 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
36                 this.setLocationByPlatform(true);
37                 GUIUtil.setWindowIcons(this);
38         }
39         
40         
41         /**
42          * Check whether the motor database is loaded and block until it is.
43          * An uncloseable modal dialog window is opened while loading.
44          * 
45          * @param parent        the parent window for the dialog, or <code>null</code>
46          */
47         public static void check(Window parent) {
48                 final ThrustCurveMotorSetDatabase db = Application.getMotorSetDatabase();
49                 if (db.isLoaded())
50                         return;
51                 
52                 log.info(1, "Motor database not loaded yet, displaying dialog");
53                 
54                 final MotorDatabaseLoadingDialog dialog = new MotorDatabaseLoadingDialog(parent);
55                 
56                 final Timer timer = new Timer(100, new ActionListener() {
57                         private int count = 0;
58                         
59                         @Override
60                         public void actionPerformed(ActionEvent e) {
61                                 count++;
62                                 if (db.isLoaded()) {
63                                         log.debug("Database loaded, closing dialog");
64                                         dialog.setVisible(false);
65                                 } else if (count % 10 == 0) {
66                                         log.debug("Database not loaded, count=" + count);
67                                 }
68                         }
69                 });
70                 
71                 db.setInUse();
72                 timer.start();
73                 dialog.setVisible(true);
74                 timer.stop();
75                 
76                 log.debug("Motor database now loaded");
77         }
78         
79 }