~seh999/jcog/proto3

« back to all changes in this revision

Viewing changes to spacetime/src.ui.swing.vr/opencog/spacetime/vr/LoadPluginVR.java

  • Committer: SeH
  • Date: 2009-09-19 22:59:48 UTC
  • Revision ID: seh999@gmail.com-20090919225948-q3ab80xa57i74mm6
start of major jReality refactoring

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
package opencog.spacetime.vr;
2
 
 
3
 
import java.awt.BorderLayout;
4
 
import java.awt.FlowLayout;
5
 
import java.awt.event.ActionEvent;
6
 
import java.awt.event.ActionListener;
7
 
import java.io.File;
8
 
import java.io.IOException;
9
 
import java.security.AccessController;
10
 
import java.security.PrivilegedAction;
11
 
import java.util.HashMap;
12
 
 
13
 
import javax.swing.Box;
14
 
import javax.swing.BoxLayout;
15
 
import javax.swing.ButtonGroup;
16
 
import javax.swing.JButton;
17
 
import javax.swing.JCheckBox;
18
 
import javax.swing.JFileChooser;
19
 
import javax.swing.JPanel;
20
 
import javax.swing.JRadioButton;
21
 
import javax.swing.border.EmptyBorder;
22
 
 
23
 
import opencog.spacetime.geometry.IndexedFaceSetUtility;
24
 
import opencog.spacetime.reader.Readers;
25
 
import opencog.spacetime.scene.IndexedFaceSet;
26
 
import opencog.spacetime.scene.SceneGraphComponent;
27
 
import opencog.spacetime.scene.SceneGraphVisitor;
28
 
import opencog.spacetime.scene.data.Attribute;
29
 
import opencog.spacetime.ui.viewerapp.FileLoaderDialog;
30
 
import opencog.spacetime.util.Input;
31
 
import opencog.spacetime.util.Secure;
32
 
 
33
 
 
34
 
public class LoadPluginVR extends AbstractPluginVR {
35
 
 
36
 
        // load tab
37
 
        private JPanel loadPanel;
38
 
        private JPanel fileChooserPanel;
39
 
 
40
 
        private HashMap<String, Integer> exampleIndices = new HashMap<String, Integer>();
41
 
 
42
 
        public LoadPluginVR(final String[][] examples) {
43
 
                super("load");
44
 
                Secure.doPrivileged(new PrivilegedAction<Object>() {
45
 
                        public Object run() {
46
 
                                makeContentFileChooser();
47
 
                                return null;
48
 
                        }
49
 
                });
50
 
                loadPanel = new JPanel(new BorderLayout());
51
 
                loadPanel.setBorder(new EmptyBorder(10, 10, 10, 10));
52
 
                
53
 
                if (examples != null) {
54
 
                        ActionListener examplesListener = new ActionListener() {
55
 
                                public void actionPerformed(ActionEvent e) {
56
 
                                        String selectedBox = e.getActionCommand();
57
 
                                        int selectionIndex = ((Integer) exampleIndices.get(selectedBox)).intValue();
58
 
                                        try {
59
 
                                                SceneGraphComponent read = Readers.read(Input
60
 
                                                                .getInput(examples[selectionIndex][1]));
61
 
                                                getViewerVR().setContent(read);
62
 
                                        } catch (IOException e1) {
63
 
                                                e1.printStackTrace();
64
 
                                        }
65
 
                                }
66
 
                        };
67
 
                        
68
 
                        Box buttonGroupPanel = new Box(BoxLayout.Y_AXIS);
69
 
                        ButtonGroup group = new ButtonGroup();
70
 
                        for (int i = 0; i < examples.length; i++) {
71
 
                                JRadioButton button = new JRadioButton(examples[i][0]);
72
 
                                button.addActionListener(examplesListener);
73
 
                                buttonGroupPanel.add(button);
74
 
                                group.add(button);
75
 
                                exampleIndices.put(examples[i][0], new Integer(i));
76
 
                        }
77
 
                        loadPanel.add("Center", buttonGroupPanel);
78
 
                }
79
 
                JButton loadButton = new JButton("load ...");
80
 
                loadButton.addActionListener(new ActionListener() {
81
 
                        public void actionPerformed(ActionEvent arg0) {
82
 
                                switchToFileBrowser();
83
 
                        }
84
 
                });
85
 
                loadPanel.add("South", loadButton);
86
 
        }
87
 
 
88
 
        @Override
89
 
        public JPanel getPanel() {
90
 
                return loadPanel;
91
 
        }
92
 
        
93
 
        private void makeContentFileChooser() {
94
 
                this.fileChooserPanel = new JPanel(new BorderLayout());
95
 
                final JFileChooser fileChooser = FileLoaderDialog.createFileChooser();
96
 
                final JCheckBox smoothNormalsCheckBox = new JCheckBox("smooth normals");
97
 
                final JCheckBox removeAppsCheckBox = new JCheckBox("ignore appearances");
98
 
                JPanel checkBoxPanel = new JPanel(new FlowLayout());
99
 
                fileChooserPanel.add(BorderLayout.CENTER, fileChooser);
100
 
                checkBoxPanel.add(smoothNormalsCheckBox);
101
 
                checkBoxPanel.add(removeAppsCheckBox);
102
 
                fileChooserPanel.add(BorderLayout.SOUTH, checkBoxPanel);
103
 
                fileChooser.addActionListener(new ActionListener() {
104
 
                        public void actionPerformed(ActionEvent ev) {
105
 
                                File file = fileChooser.getSelectedFile();
106
 
                                try {
107
 
                                        if (ev.getActionCommand() == JFileChooser.APPROVE_SELECTION
108
 
                                                        && file != null) {
109
 
                                                SceneGraphComponent read = Readers.read(Input.getInput(file));
110
 
                                                SceneGraphComponent tempRoot = new SceneGraphComponent();
111
 
                                                tempRoot.addChild(read);
112
 
                                                tempRoot.accept(new SceneGraphVisitor() {
113
 
                                                        public void visit(SceneGraphComponent c) {
114
 
                                                                if (removeAppsCheckBox.isSelected() && c.getAppearance() != null) c.setAppearance(null); 
115
 
                                                                c.childrenWriteAccept(this, false, false, false, false, true,
116
 
                                                                                true);
117
 
                                                        }
118
 
                                                        public void visit(IndexedFaceSet i) {
119
 
                                                                if (i.getFaceAttributes(Attribute.NORMALS) == null) IndexedFaceSetUtility.calculateAndSetFaceNormals(i);
120
 
                                                                if (i.getVertexAttributes(Attribute.NORMALS) == null) IndexedFaceSetUtility.calculateAndSetVertexNormals(i);
121
 
                                                                if (smoothNormalsCheckBox.isSelected()) IndexedFaceSetUtility.assignSmoothVertexNormals(i, -1);
122
 
                                                        }
123
 
                                                });
124
 
                                                tempRoot.removeChild(read);
125
 
                                                getViewerVR().setContent(read);
126
 
                                        }
127
 
                                } catch (IOException e) {
128
 
                                        e.printStackTrace();
129
 
                                }
130
 
                                smoothNormalsCheckBox.setSelected(false);
131
 
                                removeAppsCheckBox.setSelected(false);
132
 
                                getViewerVR().switchToDefaultPanel();
133
 
                        }
134
 
                });
135
 
        }
136
 
        
137
 
        public void switchToFileBrowser() {
138
 
                getViewerVR().switchToFileChooser(fileChooserPanel);
139
 
        }
140
 
}