001        package com.croftsoft.apps.exemplar;
002         
003        import java.awt.*;
004        import java.awt.event.*;
005        import javax.swing.*;
006         
007        import com.croftsoft.core.animation.ComponentAnimator;
008        import com.croftsoft.core.animation.animator.NullComponentAnimator;
009        import com.croftsoft.core.lang.NullArgumentException;
010        import com.croftsoft.core.lang.lifecycle.Lifecycle;
011        import com.croftsoft.core.lang.lifecycle.Updatable;
012        import com.croftsoft.core.util.mail.Mail;
013         
014        /***********************************************************************
015        * Exemplar view.
016        *  
017        * @version
018        *   $Id: ExemplarView.java,v 1.9 2008/02/15 22:38:03 croft Exp $
019        * @since
020        *   2006-01-03
021        * @author
022        *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
023        ***********************************************************************/
024    
025        public final class  ExemplarView
026          implements Lifecycle, Updatable
027        ////////////////////////////////////////////////////////////////////////
028        ////////////////////////////////////////////////////////////////////////
029        {
030             
031        private final ExemplarConfig         exemplarConfig;
032        
033        private final Mail<ExemplarMessage>  mail;
034        
035        private final ExemplarModel          exemplarModel;
036         
037        private final JComponent             jComponent;
038         
039        //
040         
041        private ComponentAnimator  componentAnimator;
042         
043        ////////////////////////////////////////////////////////////////////////
044        ////////////////////////////////////////////////////////////////////////
045         
046        public  ExemplarView (
047          final ExemplarConfig         exemplarConfig,
048          final Mail<ExemplarMessage>  mail,
049          final ExemplarModel          exemplarModel )
050        ////////////////////////////////////////////////////////////////////////
051        {
052          NullArgumentException.checkArgs (
053            this.exemplarConfig = exemplarConfig,
054            this.mail           = mail,
055            this.exemplarModel  = exemplarModel );
056           
057          componentAnimator = NullComponentAnimator.INSTANCE;
058           
059          jComponent = new JComponent ( )
060            {
061              private static final long  serialVersionUID = 0L;
062               
063              @Override
064              public void  paintComponent ( final Graphics  graphics )
065              {
066                componentAnimator.paint ( this, ( Graphics2D ) graphics );
067              }
068            };
069        }
070         
071        ////////////////////////////////////////////////////////////////////////
072        // mutator methods
073        ////////////////////////////////////////////////////////////////////////
074         
075        public void  addMouseListener ( final MouseListener  mouseListener )
076        ////////////////////////////////////////////////////////////////////////
077        {
078          jComponent.addMouseListener ( mouseListener );
079        }
080         
081        public void  setContentPane ( final Container  contentPane )
082        ////////////////////////////////////////////////////////////////////////
083        {
084          contentPane.setLayout ( new BorderLayout ( ) );
085           
086          contentPane.add ( jComponent, BorderLayout.CENTER );
087        }
088         
089        ////////////////////////////////////////////////////////////////////////
090        // lifecycle methods
091        ////////////////////////////////////////////////////////////////////////
092         
093        public void  init ( )
094        ////////////////////////////////////////////////////////////////////////
095        {
096          System.out.println ( "ExemplarView.init()" );
097           
098          componentAnimator = new ExemplarAnimator (
099            exemplarConfig,
100            exemplarModel,
101            jComponent );
102        }
103         
104        public void  start ( )
105        ////////////////////////////////////////////////////////////////////////
106        {
107          System.out.println ( "ExemplarView.start()" );       
108        }
109         
110        public void  stop ( )
111        ////////////////////////////////////////////////////////////////////////
112        {
113          System.out.println ( "ExemplarView.stop()" );       
114        }
115         
116        public void  destroy ( )
117        ////////////////////////////////////////////////////////////////////////
118        {
119          System.out.println ( "ExemplarView.destroy()" );
120        }
121         
122        public void  update ( )
123        ////////////////////////////////////////////////////////////////////////
124        {
125          final int  size = mail.size ( );
126          
127          for ( int  i = 0; i < size; i++ )
128          {
129            final ExemplarMessage  exemplarMessage = mail.get ( i );
130            
131            final ExemplarMessage.Type  type = exemplarMessage.getType ( );
132             
133            switch ( type )
134            {
135              case CLICK_COUNT_CHANGED:
136                 
137                Toolkit.getDefaultToolkit ( ).beep ( );
138                 
139                break;
140                 
141              default:
142                
143                // ignore
144            }
145          }
146           
147          componentAnimator.update ( jComponent );
148        }       
149         
150        ////////////////////////////////////////////////////////////////////////
151        ////////////////////////////////////////////////////////////////////////
152        }