KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > zirc > gui > ChatFrame


1 package zirc.gui ;
2
3 import java.awt.* ;
4 import java.awt.event.* ;
5 import javax.swing.* ;
6 import javax.swing.event.* ;
7
8 import zirc.base.* ;
9 import zirc.msg.* ;
10 import zirc.threads.* ;
11
12 //zIrc, irc client.
13
// Copyright (C) 2004 CoolBytes(Stephane Claret, Andre Aymon, Alban Zumofen) coolbytes@hotmail.com
14
//
15
// This program is free software; you can redistribute it and/or
16
// modify it under the terms of the GNU General Public License
17
// as published by the Free Software Foundation; either version 2
18
// of the License, or (at your option) any later version.
19
//
20
// This program is distributed in the hope that it will be useful,
21
// but WITHOUT ANY WARRANTY; without even the implied warranty of
22
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
// GNU General Public License for more details.
24

25 /**
26  * <p>Title: ChatFrame</p>
27  * <p>Description: internalFrame qui sert a chatter...</p>
28  * <p>Copyright: Copyright (c) 2004</p>
29  * <p>Company: CoolBytes(Stephane Claret, Andre Aymon, Alban Zumofen) coolbytes@hotmail.com</p>
30  * @version 1.0
31  */

32
33 public class ChatFrame extends AbstractChatFrame
34 {
35
36   private final ImageIcon chatIMG = new ImageIcon("fichiers/images/chatIcon.png") ;
37
38   //le nom du chan
39
private String JavaDoc Chanel ;
40
41   //la refernce a ircconnexion
42
private IRCconnexion IRCchat ;
43
44   //la jdialog qui affiche les actions dispo
45
ActionDialog ActionDLG ;
46
47   //la list des user avec son model
48
private JList userList = new JList() ;
49   private DefaultListModel lm = new DefaultListModel() ;
50
51   private JSplitPane splitPane = new JSplitPane() ;
52   private JScrollPane scrollPane = new JScrollPane() ;
53
54   //devient vrai si une commande part ou quit a déjà été envoyée
55
private boolean departAnnonce = false ;
56
57   public ChatFrame(IRCconnexion _IRCchat, String JavaDoc _chan)
58   {
59     super(_IRCchat) ;
60     this.setFrameIcon(chatIMG) ;
61     IRCchat = _IRCchat ;
62     Chanel = _chan ;
63     this.setName(Chanel) ;
64     jPanel3.remove(jScrollPane1) ;
65     jPanel3.add(splitPane) ;
66     splitPane.setLeftComponent(jScrollPane1) ;
67     splitPane.setRightComponent(scrollPane) ;
68     jScrollPane1.setVerticalScrollBarPolicy(jScrollPane1.VERTICAL_SCROLLBAR_ALWAYS) ;
69     scrollPane.setHorizontalScrollBarPolicy(scrollPane.HORIZONTAL_SCROLLBAR_NEVER) ;
70     splitPane.setBorder(null) ;
71     scrollPane.getViewport().add(userList) ;
72     scrollPane.setBorder(null) ;
73     splitPane.setDividerLocation(this.getWidth() * 4 / 5) ;
74     splitPane.setDividerSize(4) ;
75     userList.setModel(lm) ;
76     userList.setBorder(BorderFactory.createLineBorder(Color.gray)) ;
77     userList.setFont(new Font(IRCchat.FIXEDSYS.getName(), 0, 15)) ; //getName(), );
78
ActionDLG = new ActionDialog(IRCchat, this.getChan(), this) ;
79     userList.addListSelectionListener(new javax.swing.event.ListSelectionListener JavaDoc()
80     {
81       public void valueChanged(ListSelectionEvent e)
82       {
83         userList_valueChanged(e) ;
84       }
85     }) ;
86
87     splitPane.addComponentListener(new java.awt.event.ComponentAdapter JavaDoc()
88     {
89       public void componentResized(ComponentEvent e)
90       {
91         splitPane_componentResized(e) ;
92       }
93     }) ;
94
95     userList.addMouseListener(new java.awt.event.MouseAdapter JavaDoc()
96     {
97       public void mouseClicked(MouseEvent e)
98       {
99         userList_mouseClicked(e) ;
100       }
101     }) ;
102   }
103
104   void splitPane_componentResized(ComponentEvent e)
105   {
106     splitPane.setDividerLocation(this.getWidth() * 4 / 5) ;
107   }
108
109   //c'est égal si
110
public String JavaDoc getChan()
111   {
112     return Chanel ;
113   }
114
115   //
116
//Pour les 3 methode suivantes, les threads sont geres dans ChanThreadProcessor
117
//(lol le nom de la classe, mdr)
118

119   //ajout d'un seul user
120
public void addNewUserInChan(String JavaDoc user)
121   {
122     IRCchat.ajouteTache(new AddUserInChanThread(this, user)) ;
123   }
124
125   //ajout d'un seul user
126
public void addNewUserInChan(ChanUser user)
127   {
128     IRCchat.ajouteTache(new AddUserInChanThread(this, user)) ;
129   }
130
131   //ajout suite a un NAMES
132
public void addUserListInChan(String JavaDoc users)
133   {
134     IRCchat.ajouteTache(new AddUserListInChanThread(this, users)) ;
135   }
136
137   //au PART de ququn
138
public void removeUserFromChan(String JavaDoc user)
139   {
140     IRCchat.ajouteTache(new RemoveUserInChanThread(this, user)) ;
141   }
142
143   public DefaultListModel getListModel()
144   {
145     return lm ;
146   }
147
148   public void setListModel(DefaultListModel _lm)
149   {
150     userList.setModel(_lm) ;
151   }
152
153   private void userList_valueChanged(ListSelectionEvent e)
154   {
155
156   }
157
158   void this_internalFrameClosed(InternalFrameEvent e)
159   {
160     super.this_internalFrameClosed(e) ;
161     destroy() ;
162   }
163
164   public void destroy()
165   {
166
167     //on ferme la connexion avec le chan si ca a pas deja été fait
168
if (!departAnnonce)
169     {
170       IRCchat.sendCommand("PART " + this.getTitle() + " " + IRCchat.getPartMSG()) ;
171     }
172
173     IRCchat.removeChan(this) ;
174
175     try
176     {
177       setClosed(true) ;
178     }
179     catch (java.beans.PropertyVetoException JavaDoc e)
180     {
181       System.out.println("propertyVeto...") ;
182     }
183   }
184
185   public void destroyForKick()
186   {
187     IRCchat.removeChan(this) ;
188
189     try
190     {
191       setClosed(true) ;
192     }
193     catch (java.beans.PropertyVetoException JavaDoc e)
194     {
195       System.out.println("propertyVeto...") ;
196     }
197   }
198
199   //appelé cette méthode si on recoit une notification "PART" du serveur
200
public void setDepartAnnonce(boolean _flag)
201   {
202     departAnnonce = _flag ;
203   }
204
205   void jTextField1_actionPerformed(ActionEvent e)
206   {
207     String JavaDoc txt = jTextField1.getText() ;
208
209     if (txt.length() > 0)
210     {
211
212       if (txt.charAt(0) == '/')
213       {
214         //envoyer une commande
215

216         System.err.println(txt.substring(0, 4)) ;
217         //envoyer une commande
218
if (txt.length() > 3 && txt.substring(0, 4).equalsIgnoreCase("/msg"))
219         {
220           IRCchat.sendCommand("PRIV" + txt.substring(1)) ;
221         }
222         else
223         {
224           if (txt.length() > 3 && txt.substring(0, 4).equalsIgnoreCase("/ctcp"))
225           { ///ctcp huckle !tv
226
IRCchat.sendCommand("PRIVMSG " + txt.substring(5)) ;
227           }
228           else
229           {
230             IRCchat.sendCommand(txt.substring(1)) ;
231           }
232         }
233       }
234       else
235       {
236         //envoyer le message
237
String JavaDoc send = "PRIVMSG " + Chanel + " :" + txt ;
238         IRCchat.sendCommand(send) ;
239
240         //displayer le message envoyé
241
MSGprivMsg msg = new MSGprivMsg(IRCchat, ":" + IRCchat.GetUser_nickName() + "!", Chanel, send) ;
242         msg.reagit() ;
243         msg.affiche() ;
244       }
245     }
246
247     jTextField1.setText("") ;
248
249   }
250
251   public void userList_mouseClicked(MouseEvent e)
252   {
253     ActionDLG.setLocationRelativeTo(userList) ;
254     ActionDLG.setLocation(ActionDLG.getX() + ActionDLG.getWidth() / 2, ActionDLG.getY()) ;
255     ActionDLG.setUserForAction(userList.getSelectedValue().toString()) ;
256     ActionDLG.setVisible(true) ;
257   }
258
259   public JList getUserList()
260   {
261     return userList ;
262   }
263
264   //si activee, on replace le splitter
265
void this_internalFrameActivated(InternalFrameEvent e)
266   {
267     super.this_internalFrameActivated(e) ;
268     splitPane.setDividerLocation(this.getWidth() * 4 / 5) ;
269   }
270 }
271
Popular Tags