summaryrefslogtreecommitdiff
path: root/java/src/org/singinst/uf/view/UfApplet.java
blob: 783f45b9160fdaefb739456d055d6a22dcf509a5 (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
package org.singinst.uf.view;

import java.awt.Component;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.beans.PropertyChangeListener;

import javax.swing.AbstractButton;
import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.UIManager;

import org.singinst.uf.model.ScalarValueHolder;
import org.singinst.uf.presenter.Completion;
import org.singinst.uf.presenter.Status;
import org.singinst.uf.presenter.Store;

@SuppressWarnings("serial")
public class UfApplet extends JApplet {
	
    @Override
	public void init() {
        try {
			javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
				public void run() {
			        createGUI();
			    }
			});
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    
    public void loadData(String jsonSubset) {
    	Store.getInstance().loadData(jsonSubset);
    }

	private void createGUI() {
		try {
			UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
		}
		catch (Exception e) {
			try {
				UIManager.setLookAndFeel("com.sun.java.swing.plaf.metal.OceanTheme");
			}
			catch (Exception e1) {}
		}
		
		Store.setInstance(new AppletStore(getAppletContext()));
		AppletBrowser.init(this);

		MainWindow mainWindow = new MainWindow();
		setContentPane(mainWindow.createContainer());
		JPanel glassPane = new JPanel();
		glassPane.add(mainWindow.createGlassPane(this));
		setGlassPane(glassPane);
		SwingHelp.getInstance().init(this, null);
//		SwingHelp.getInstance().init(this, UfHelp.getMainHelpString());
	}

	@Override
	public void destroy() {
		System.err.println("destroying applet and removing listeners");
		removeListenersAndChildren(this);
		Store.setInstance(null);
		Status.singleton.destroy();
		Completion.getInstance().destroy();
		ScalarValueHolder.destroyAll();
	}

	private void removeListenersAndChildren(Component component) {
		for (MouseListener listener : component.getMouseListeners()) {
			component.removeMouseListener(listener);
		}
		for (MouseMotionListener listener : component.getMouseMotionListeners()) {
			component.removeMouseMotionListener(listener);
		}
		for (PropertyChangeListener listener : component.getPropertyChangeListeners()) {
			component.removePropertyChangeListener(listener);
		}
		
		if (component instanceof AbstractButton) {
			AbstractButton button = (AbstractButton) component;
			for (ActionListener listener : button.getActionListeners()) {
				button.removeActionListener(listener);
			}
		}
		
		if (component instanceof Container) {
			Container container = (Container) component;
			for (Component child : container.getComponents()) {
				removeListenersAndChildren(child);
				remove(child);
			}
		}
	}
}