001 package com.croftsoft.apps.chat.controller; 002 003 import java.awt.*; 004 import java.awt.event.*; 005 import javax.swing.*; 006 007 import com.croftsoft.core.gui.event.UserInputAdapter; 008 import com.croftsoft.core.lang.NullArgumentException; 009 import com.croftsoft.core.math.geom.Point2DD; 010 import com.croftsoft.core.security.Authentication; 011 import com.croftsoft.core.util.queue.Queue; 012 013 import com.croftsoft.apps.chat.request.CreateModelRequest; 014 import com.croftsoft.apps.chat.request.MoveRequest; 015 import com.croftsoft.apps.chat.request.TalkRequest; 016 017 /********************************************************************* 018 * Chat controller. 019 * 020 * @version 021 * 2003-06-17 022 * @since 023 * 2003-06-06 024 * @author 025 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 026 *********************************************************************/ 027 028 public final class ChatController 029 extends UserInputAdapter 030 implements ActionListener, ItemListener 031 ////////////////////////////////////////////////////////////////////// 032 ////////////////////////////////////////////////////////////////////// 033 { 034 035 private final Authentication authentication; 036 037 private final Queue requestQueue; 038 039 // 040 041 private JMenu avatarMenu; 042 043 private JComponent moveComponent; 044 045 private JCheckBoxMenuItem musicCheckBoxMenuItem; 046 047 private JTextField talkTextField; 048 049 ////////////////////////////////////////////////////////////////////// 050 ////////////////////////////////////////////////////////////////////// 051 052 public ChatController ( 053 Authentication authentication, 054 Queue requestQueue ) 055 ////////////////////////////////////////////////////////////////////// 056 { 057 NullArgumentException.check ( 058 this.authentication = authentication ); 059 060 NullArgumentException.check ( this.requestQueue = requestQueue ); 061 } 062 063 ////////////////////////////////////////////////////////////////////// 064 // mutator methods 065 ////////////////////////////////////////////////////////////////////// 066 067 public void setAvatarMenu ( JMenu avatarMenu ) 068 ////////////////////////////////////////////////////////////////////// 069 { 070 if ( this.avatarMenu != null ) 071 { 072 throw new IllegalStateException ( ); 073 } 074 075 NullArgumentException.check ( this.avatarMenu = avatarMenu ); 076 077 Component [ ] menuComponents = avatarMenu.getMenuComponents ( ); 078 079 for ( int i = 0; i < menuComponents.length; i++ ) 080 { 081 Component menuComponent = menuComponents [ i ]; 082 083 if ( menuComponent instanceof JRadioButtonMenuItem ) 084 { 085 ( ( JRadioButtonMenuItem ) menuComponent ).addItemListener ( 086 this ); 087 } 088 } 089 } 090 091 public void setMusicCheckBoxMenuItem ( 092 JCheckBoxMenuItem musicCheckBoxMenuItem ) 093 ////////////////////////////////////////////////////////////////////// 094 { 095 NullArgumentException.check ( musicCheckBoxMenuItem ); 096 097 if ( this.musicCheckBoxMenuItem != null ) 098 { 099 this.musicCheckBoxMenuItem.removeItemListener ( this ); 100 } 101 102 this.musicCheckBoxMenuItem = musicCheckBoxMenuItem; 103 104 musicCheckBoxMenuItem.addItemListener ( this ); 105 } 106 107 public void setMoveComponent ( JComponent moveComponent ) 108 ////////////////////////////////////////////////////////////////////// 109 { 110 NullArgumentException.check ( moveComponent ); 111 112 if ( this.moveComponent != null ) 113 { 114 this.moveComponent.removeMouseListener ( this ); 115 } 116 117 this.moveComponent = moveComponent; 118 119 moveComponent.addMouseListener ( this ); 120 } 121 122 public void setTalkTextField ( JTextField talkTextField ) 123 ////////////////////////////////////////////////////////////////////// 124 { 125 NullArgumentException.check ( talkTextField ); 126 127 if ( this.talkTextField != null ) 128 { 129 this.talkTextField.removeActionListener ( this ); 130 } 131 132 this.talkTextField = talkTextField; 133 134 talkTextField.addActionListener ( this ); 135 } 136 137 ////////////////////////////////////////////////////////////////////// 138 // interface ActionListener method 139 ////////////////////////////////////////////////////////////////////// 140 141 public void actionPerformed ( ActionEvent actionEvent ) 142 ////////////////////////////////////////////////////////////////////// 143 { 144 if ( actionEvent.getSource ( ) == talkTextField ) 145 { 146 String text = talkTextField.getText ( ); 147 148 talkTextField.setText ( "" ); 149 150 requestQueue.replace ( new TalkRequest ( authentication, text ) ); 151 } 152 else 153 { 154 throw new IllegalArgumentException ( ); 155 } 156 } 157 158 ////////////////////////////////////////////////////////////////////// 159 // interface ItemListener method 160 ////////////////////////////////////////////////////////////////////// 161 162 public void itemStateChanged ( ItemEvent itemEvent ) 163 ////////////////////////////////////////////////////////////////////// 164 { 165 Object item = itemEvent.getItem ( ); 166 167 if ( item == musicCheckBoxMenuItem ) 168 { 169 System.out.println ( 170 "Music: " + musicCheckBoxMenuItem.isSelected ( ) ); 171 } 172 else if ( item instanceof JRadioButtonMenuItem ) 173 { 174 JRadioButtonMenuItem radioButtonMenuItem 175 = ( JRadioButtonMenuItem ) item; 176 177 if ( itemEvent.getStateChange ( ) == ItemEvent.SELECTED ) 178 { 179 String avatarType 180 = radioButtonMenuItem.getText ( ); 181 182 requestQueue.replace ( new CreateModelRequest ( 183 authentication, avatarType, 0.0, 0.0 ) ); 184 } 185 } 186 else 187 { 188 throw new IllegalArgumentException ( ); 189 } 190 } 191 192 ////////////////////////////////////////////////////////////////////// 193 // interface MouseListener method 194 ////////////////////////////////////////////////////////////////////// 195 196 public void mousePressed ( MouseEvent mouseEvent ) 197 ////////////////////////////////////////////////////////////////////// 198 { 199 if ( mouseEvent.getSource ( ) == moveComponent ) 200 { 201 Point mousePoint = mouseEvent.getPoint ( ); 202 203 requestQueue.replace ( 204 new MoveRequest ( 205 authentication, 206 new Point2DD ( mousePoint.x, mousePoint.y ) ) ); 207 } 208 else 209 { 210 throw new IllegalArgumentException ( ); 211 } 212 } 213 214 ////////////////////////////////////////////////////////////////////// 215 ////////////////////////////////////////////////////////////////////// 216 }