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 }