001 package com.croftsoft.apps.jogl;
002
003 import java.awt.*;
004 import java.awt.event.*;
005
006 import javax.media.opengl.*;
007
008 import com.croftsoft.core.lang.NullArgumentException;
009 import com.croftsoft.core.lang.lifecycle.Lifecycle;
010 import com.croftsoft.core.lang.lifecycle.Updatable;
011 import com.croftsoft.core.media.jogl.JoglAdapter;
012 import com.croftsoft.core.util.seq.Seq;
013
014 import com.croftsoft.apps.jogl.imp.JoglRendererImp;
015
016 /***********************************************************************
017 * Jogl view.
018 *
019 * @version
020 * $Id: JoglView.java,v 1.19 2008/05/17 00:18:02 croft Exp $
021 * @since
022 * 2008-02-10
023 * @author
024 * <a href="http://www.CroftSoft.com/">David Wallace Croft</a>
025 ***********************************************************************/
026
027 public final class JoglView
028 implements Lifecycle, Updatable
029 ////////////////////////////////////////////////////////////////////////
030 ////////////////////////////////////////////////////////////////////////
031 {
032
033 private final Seq<JoglMessage> eventSeq;
034
035 private final GLCanvas glCanvas;
036
037 private final JoglAdapter joglAdapter;
038
039 ////////////////////////////////////////////////////////////////////////
040 ////////////////////////////////////////////////////////////////////////
041
042 public JoglView (
043 final Seq<JoglMessage> eventSeq,
044 final JoglModel joglModel )
045 ////////////////////////////////////////////////////////////////////////
046 {
047 NullArgumentException.checkArgs (
048 this.eventSeq = eventSeq,
049 joglModel );
050
051 final GLCapabilities glCapabilities = new GLCapabilities ( );
052
053 glCanvas = new GLCanvas ( glCapabilities );
054
055 joglAdapter = new JoglAdapter ( new JoglRendererImp ( joglModel ) );
056
057 glCanvas.addGLEventListener ( joglAdapter );
058 }
059
060 ////////////////////////////////////////////////////////////////////////
061 // mutator methods
062 ////////////////////////////////////////////////////////////////////////
063
064 public void addKeyListener ( final KeyListener keyListener )
065 ////////////////////////////////////////////////////////////////////////
066 {
067 glCanvas.addKeyListener ( keyListener );
068 }
069
070 public void addMouseListener ( final MouseListener mouseListener )
071 ////////////////////////////////////////////////////////////////////////
072 {
073 glCanvas.addMouseListener ( mouseListener );
074 }
075
076 public void setContentPane ( final Container contentPane )
077 ////////////////////////////////////////////////////////////////////////
078 {
079 contentPane.setLayout ( new BorderLayout ( ) );
080
081 contentPane.add ( glCanvas, BorderLayout.CENTER );
082 }
083
084 ////////////////////////////////////////////////////////////////////////
085 // lifecycle methods
086 ////////////////////////////////////////////////////////////////////////
087
088 public void init ( )
089 ////////////////////////////////////////////////////////////////////////
090 {
091 // System.out.println ( "JoglView.init()" );
092
093 glCanvas.requestFocus ( );
094 }
095
096 public void start ( )
097 ////////////////////////////////////////////////////////////////////////
098 {
099 // System.out.println ( "JoglView.start()" );
100 }
101
102 public void stop ( )
103 ////////////////////////////////////////////////////////////////////////
104 {
105 // System.out.println ( "JoglView.stop()" );
106 }
107
108 public void destroy ( )
109 ////////////////////////////////////////////////////////////////////////
110 {
111 // System.out.println ( "JoglView.destroy()" );
112 }
113
114 public void update ( )
115 ////////////////////////////////////////////////////////////////////////
116 {
117 final int size = eventSeq.size ( );
118
119 for ( int i = 0; i < size; i++ )
120 {
121 final JoglMessage joglMessage = eventSeq.get ( i );
122
123 final JoglMessage.Type type = joglMessage.getType ( );
124
125 switch ( type )
126 {
127 case CHANGE_PERTURBATION_FACTOR_EVENT:
128
129 Toolkit.getDefaultToolkit ( ).beep ( );
130
131 break;
132
133 default:
134
135 // ignore
136 }
137 }
138
139 glCanvas.display ( );
140 }
141
142 ////////////////////////////////////////////////////////////////////////
143 ////////////////////////////////////////////////////////////////////////
144 }