KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > rero > gui > windows > ChannelWindow


1 package rero.gui.windows;
2
3 import rero.ircfw.*;
4 import rero.ircfw.data.*;
5 import rero.ircfw.interfaces.*;
6
7 import rero.client.*;
8 import javax.swing.*;
9 import text.*;
10 import text.event.*;
11 import java.awt.*;
12 import java.awt.event.*;
13
14 import rero.bridges.menu.*;
15
16 import text.list.*;
17
18 import java.util.*;
19
20 import rero.config.*;
21
22 public class ChannelWindow extends StatusWindow implements ChannelDataWatch
23 {
24    protected Channel channel;
25    protected ListDisplay listbox;
26    protected ChannelListData data;
27    protected Capabilities capabilities;
28    protected MouseAdapter mouseListener; // for nicklist popups.
29
protected ListBoxOptions watcher;
30
31    public ListDisplay getListbox()
32    {
33       return listbox;
34    }
35
36    public void cleanup()
37    {
38       ((InternalDataList)capabilities.getDataStructure("clientInformation")).installChannelWatch(channel.getName(), null);
39       watcher = null;
40       listeners.clear(); // this can't hurt to do.
41
super.cleanup();
42    }
43
44    public ChannelWindow(Channel _channel)
45    {
46       channel = _channel;
47    }
48
49    public void init(ClientWindow _temp)
50    {
51       super.init(_temp);
52
53       data = new ChannelListData(channel);
54       listbox = new ListDisplay(data);
55
56       watcher = new ListBoxOptions(this, listbox);
57
58       mouseListener = new MouseAdapter()
59       {
60           public void mousePressed(MouseEvent ev)
61           {
62              maybeShowPopupNicklist(ev, "nicklist");
63           }
64
65           public void mouseReleased(MouseEvent ev)
66           {
67              maybeShowPopupNicklist(ev, "nicklist");
68           }
69
70           public void mouseClicked(MouseEvent ev)
71           {
72              if (ev.getClickCount() >= 2 && !ev.isPopupTrigger() && (ev.getButton() & MouseEvent.BUTTON3) != MouseEvent.BUTTON3)
73              {
74                 fireClickEvent(ev);
75              }
76              else
77              {
78                 maybeShowPopupNicklist(ev, "nicklist");
79              }
80           }
81       };
82
83       listbox.addMouseListener(mouseListener);
84    }
85
86    protected void maybeShowPopupNicklist(MouseEvent ev, String JavaDoc desc)
87    {
88       JPopupMenu menu = getPopupMenu(desc, null);
89
90       if (ev.isPopupTrigger() && menu != null)
91       {
92          ListElement element = listbox.getSelectedElement();
93          if (element != null)
94          {
95             HashMap eventData = new HashMap();
96             User user = (User)element.getSource();
97             eventData.put("$snick", user.getNick());
98
99             Iterator i = listbox.getSelectedElements().iterator();
100             StringBuffer JavaDoc values = new StringBuffer JavaDoc();
101
102             while (i.hasNext())
103             {
104                User temp = (User)((ListElement)i.next()).getSource();
105
106                values.append(temp.getNick());
107                if (i.hasNext())
108                  values.append(" ");
109             }
110             eventData.put("$data", getName() + " " + values.toString());
111
112             ScriptedPopupMenu.SetMenuData(eventData);
113          }
114
115          menu.show((JComponent)ev.getComponent(), ev.getX(), ev.getY());
116          ev.consume();
117       }
118    }
119
120    // called when a ChannelWindow object already exists and you just joined a channel...
121
public void createChannel(Channel c)
122    {
123       channel = c;
124       data.installCapabilities(capabilities);
125       data.updateChannel(channel);
126    }
127
128    public void userAdded(User u)
129    {
130       listbox.repaint();
131    }
132
133    public void userRemoved(User u)
134    {
135       data.removeUser(u);
136       listbox.repaint();
137    }
138
139    public void userChanged()
140    {
141       listbox.repaint();
142    }
143
144    public void touch()
145    {
146       super.touch();
147       listbox.repaint();
148    }
149
150    public void installCapabilities(Capabilities c)
151    {
152       capabilities = c;
153
154       super.installCapabilities(c);
155       data.installCapabilities(c);
156
157       ((InternalDataList)c.getDataStructure("clientInformation")).installChannelWatch(channel.getName(), this);
158    }
159
160    public ImageIcon getImageIcon()
161    {
162       if (icon == null)
163       {
164          icon = new ImageIcon(ClientState.getClientState().getResource("channel.gif"));
165       }
166
167       return icon;
168    }
169
170    public String JavaDoc getQuery()
171    {
172       return channel.getName();
173    }
174
175    public String JavaDoc getName()
176    {
177       return channel.getName();
178    }
179
180    public String JavaDoc getWindowType()
181    {
182       return "channel";
183    }
184
185    protected LinkedList listeners = new LinkedList();
186
187    public void addClickListener(ClickListener l)
188    {
189       listeners.add(l);
190    }
191
192    public void fireClickEvent(MouseEvent mev)
193    {
194       String JavaDoc target = "";
195
196       ListElement element = listbox.getSelectedElement();
197       if (element != null)
198       {
199           User user = (User)element.getSource();
200           target = user.getNick();
201
202           ClickEvent ev = new ClickEvent(target, target, mev);
203
204           ListIterator i = listeners.listIterator();
205           while (i.hasNext() && !ev.isConsumed())
206           {
207              ClickListener l = (ClickListener)i.next();
208              l.wordClicked(ev);
209           }
210
211           if (!ev.isConsumed())
212           {
213              capabilities.getUserInterface().openQueryWindow(target, true);
214           }
215       }
216    }
217
218    public int compareWindowType()
219    {
220       return 2;
221    }
222 }
223
Popular Tags