summaryrefslogtreecommitdiff
path: root/src/main/java/simulator/VSMain.java
blob: 5718b72d82ba874b1b3aceb8d3022286006a2830 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package simulator;

import java.awt.Component;
import java.util.Locale;

import javax.swing.UIManager;

import events.VSRegisteredEvents;
import prefs.VSDefaultPrefs;
import prefs.VSPrefs;

/**
 * The class VSMain. This class contains the static main method. The simulator
 * starts here!
 *
 * @author Paul C. Buetow
 */
public class VSMain {
    /** The global preferences */
    public static VSPrefs prefs;

    /**
     * Instantiates a new VSMain object.
     *
     * @param prefs the prefs
     */
    public VSMain(VSPrefs prefs) {
        init(prefs, null);
    }

    /**
     * Instantiates a new VSMain object
     *
     * @param prefs the prefs
     * @param relativeTo the component to open the window relative to
     */
    public VSMain(VSPrefs prefs, Component relativeTo) {
        init(prefs, relativeTo);
    }

    /**
     * Inits the VSMain object.
     *
     * @param prefs the prefs
     * @param relativeTo the component to open the window relative to
     */
    private void init(VSPrefs prefs, Component relativeTo) {
        //VSSimulatorFrame simulatorFrame =
        VSMain.prefs = prefs;
        new VSSimulatorFrame(prefs, relativeTo);
    }

    /**
     * Resolves the initial simulation filename from the CLI arguments.
     *
     * @param args the arguments passed to main
     *
     * @return the first non-blank argument, or null if none was provided
     */
    static String resolveStartupSimulationFile(String[] args) {
        if (args == null || args.length == 0 || args[0] == null)
            return null;

        String filename = args[0].trim();
        return filename.isEmpty() ? null : filename;
    }

    /**
     * The main method.
     *
     * @param args the arguments
     */
    public static void main(String[] args) {
        // Show splash screen
        VSSplashScreen splash = new VSSplashScreen();
        splash.showSplash();
        
        try {
            UIManager.setLookAndFeel(
                UIManager.getCrossPlatformLookAndFeelClassName());
        } catch (Exception e) { }

        Locale.setDefault(Locale.ENGLISH);
        javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false);
        VSPrefs prefs = VSDefaultPrefs.init();
        VSRegisteredEvents.init(prefs);
        VSMain.prefs = prefs;

        // Wait for splash screen to finish before showing main window
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        VSSimulatorFrame simulatorFrame = new VSSimulatorFrame(prefs, null);
        String startupSimulationFile = resolveStartupSimulationFile(args);
        if (startupSimulationFile != null)
            simulatorFrame.openAndStartSimulator(startupSimulationFile);
    }
}