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 }