/* * Created on Nov 3, 2005 * * TODO To change the template for this generated file go to * Window - Preferences - Java - Code Style - Code Templates */ package de.tuberlin.polymake.common; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.IOException; import java.util.Properties; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import de.jreality.scene.SceneGraphComponent; import de.jreality.scene.SceneGraphNode; import de.jreality.scene.Viewer; import de.jreality.ui.viewerapp.ViewerApp; import de.jreality.vr.AppearancePluginVR; import de.jreality.vr.ToolPluginVR; import de.jreality.vr.ViewerVR; /** * @author wotzlaw * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates */ public class JRealityFrame extends JFrame implements ChangeListener, WindowListener{ /** Help frame explaining jreality controls **/ protected static JRealityHelpFrame helpFrame = null; protected JButton helpButton; /** Contains parameters for display */ protected Properties parameters; /** Contains interactive parameters for display */ protected Properties iparameters; /** The complete scenegraph used for display **/ protected JRealityScene scene; /** The viewer of the scenegraph **/ protected Viewer viewer; protected ViewerVR viewerVR; /** Panel for geometry explosion **/ protected JRealitySpinner explode; //TODO: transparency does not work on hardware renderer ///** Panel for geometry transparency **/ //protected JRealitySpinner transparency; protected JRealityControl parent; protected Box box = new Box(BoxLayout.Y_AXIS); protected Box northBox = new Box(BoxLayout.X_AXIS); protected Box southBox = new Box(BoxLayout.X_AXIS); protected boolean isFullScreen = false; protected String title; protected SceneGraphNode geom; public JRealityFrame(SceneGraphComponent geom, String title, Properties params, Properties iparams, final JRealityControl parent) { this.parent = parent; this.title = title; this.geom = geom; scene = new JRealityScene(geom); try { viewerVR = new ViewerVR(); viewerVR.addAlignTab(); viewerVR.addTerrainTab(); viewerVR.addEnvTab(); viewerVR.setGeneratePickTrees(true); // configure the viewerVR AppearancePluginVR appPlugin = new AppearancePluginVR(); ToolPluginVR toolPlugin = new ToolPluginVR(); viewerVR.registerPlugin(appPlugin); viewerVR.registerPlugin(toolPlugin); ViewerApp va = viewerVR.initialize(); // overwrite restored preferences: appPlugin.setShowLines(true); appPlugin.setPointRadius(0.8); appPlugin.setShowPoints(true); appPlugin.setTubeRadius(0.6); appPlugin.setFaceReflection(0.2); toolPlugin.setRotationEnabled(true); toolPlugin.setDragEnabled(true); viewerVR.setContent(scene); viewerVR.setContentSize(10); viewerVR.setContentOffset(1); viewer = va.getViewer(); if(System.getProperty("polymake.debug") != null) { va.setAttachNavigator(true); va.setAttachBeanShell(true); } va.update(); Component viewingComponent = va.getComponent(); this.getContentPane().add(viewingComponent,BorderLayout.CENTER); box.add(southBox); this.setJMenuBar(va.getMenu().getMenuBar()); super.setName(geom.getName()); this.setTitle(title); this.setSize(800, 600); this.addWindowListener(this); helpButton = new JButton("Help"); helpButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (helpFrame == null) helpFrame = new JRealityHelpFrame(); if (!helpFrame.isVisible() || helpFrame.getState() == Frame.ICONIFIED) helpFrame.setLocation(getX() + 20, getY() + 20); helpFrame.setState(Frame.NORMAL); helpFrame.setVisible(true); } }); southBox.setPreferredSize(new Dimension(1000,20)); explode = new JRealitySpinner("explode",0.0, 0.0, 10.0, 0.1); explode.setPreferredSize(new Dimension(150,20)); explode.addChangeListener(this); //TODO: explodable as property of poly object if(geom.getChildComponentCount() <= 1) { explode.setVisible(false); } southBox.add(explode.getComponent()); southBox.add(Box.createHorizontalGlue()); southBox.add(helpButton); helpButton.setAlignmentY(Component.CENTER_ALIGNMENT); helpButton.setMinimumSize(new Dimension(20, 20)); helpButton.setPreferredSize(new Dimension(70, 20)); this.getContentPane().add(box,BorderLayout.SOUTH); this.validate(); this.setVisible(true); } catch (Exception e) { // TODO: handle exception } } void toggleFullScreen() { isFullScreen = !isFullScreen; if(isFullScreen) { this.dispose(); this.setUndecorated(true); } if (isFullScreen) { box.remove(northBox); box.remove(southBox); this.setJMenuBar(null); } else { box.add(northBox, 0); box.add(southBox); } this.getGraphicsConfiguration().getDevice().setFullScreenWindow (isFullScreen ? this : null); if(!isFullScreen) { this.dispose(); this.setUndecorated(false); } this.validate(); //try { Thread.sleep(500); } catch (Exception e) { } this.setVisible(true); } public void stateChanged(ChangeEvent e) { Object source = e.getSource(); if(source == explode) { double val = ((Double)explode.getValue()).doubleValue(); scene.explodeGeometry(val); } // if(source == transparency) { // double val = ((Double)transparency.getValue()).doubleValue(); // parent.setTransparency(getName(), val); // } } public void windowActivated(WindowEvent arg0) { // TODO Auto-generated method stub } public void windowClosing(WindowEvent e) { e.getWindow().dispose(); } public void windowClosed(WindowEvent e) { try { parent.removeFrame(title); parent.putMessage(SimpleGeometryParser.write(geom.getName(),"close",1.),false); parent.removeFrame(getName()); } catch (IOException e1) { e1.printStackTrace(); } } public void windowDeactivated(WindowEvent arg0) { // TODO Auto-generated method stub } public void windowDeiconified(WindowEvent arg0) { // TODO Auto-generated method stub } public void windowIconified(WindowEvent arg0) { // TODO Auto-generated method stub } public void windowOpened(WindowEvent arg0) { // TODO Auto-generated method stub } }