1 package net.sf.openrocket.gui.dialogs;
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
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;
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;
19 public class MotorDatabaseLoadingDialog extends JDialog {
20 private static final LogHelper log = Application.getLogger();
23 private MotorDatabaseLoadingDialog(Window parent) {
24 super(parent, "Loading motors", ModalityType.APPLICATION_MODAL);
26 JPanel panel = new JPanel(new MigLayout("fill"));
27 panel.add(new JLabel("Loading motors..."), "wrap para");
29 JProgressBar progress = new JProgressBar();
30 progress.setIndeterminate(true);
31 panel.add(progress, "growx");
35 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
36 this.setLocationByPlatform(true);
37 GUIUtil.setWindowIcons(this);
42 * Check whether the motor database is loaded and block until it is.
43 * An uncloseable modal dialog window is opened while loading.
45 * @param parent the parent window for the dialog, or <code>null</code>
47 public static void check(Window parent) {
48 final ThrustCurveMotorSetDatabase db = Application.getMotorSetDatabase();
52 log.info(1, "Motor database not loaded yet, displaying dialog");
54 final MotorDatabaseLoadingDialog dialog = new MotorDatabaseLoadingDialog(parent);
56 final Timer timer = new Timer(100, new ActionListener() {
57 private int count = 0;
60 public void actionPerformed(ActionEvent e) {
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);
73 dialog.setVisible(true);
76 log.debug("Motor database now loaded");