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="https://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        }