Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: edu/ou/kmi/buddyspace/gui/BSStatusesBar.java


1   package edu.ou.kmi.buddyspace.gui;
2   
3   /*
4    * BSStatusesBar.java
5    *
6    * Project: BuddySpace
7    * (C) Copyright Knowledge Media Institute 2002
8    *
9    *
10   * Created on 3 December 2002, 15:19
11   */
12  
13  import javax.swing.*;
14  import java.awt.event.*;
15  import java.util.*;
16  import java.awt.*;
17  
18  /*
19  import org.jabber.jabberbeans.*;
20  import org.jabber.jabberbeans.Extension.*;
21  */
22  
23  import org.jabber.jabberbeans.util.*;
24  
25  import edu.ou.kmi.buddyspace.core.*;
26  //import edu.ou.kmi.buddyspace.utils.*;
27  
28  /**
29   * Window displaying presence statuses of favourite JIDs.
30   * Uses <code>BSPresenceBean</code> to receive presence info.
31   *
32   * @author  Jiri Komzak, Knowledge Media Institute, Open University, United Kingdom
33   */
34  public class BSStatusesBar //extends DockableWindow 
35                             implements ActionListener, MouseListener,
36                                        BSPresenceListener {
37                                
38      private BSMainFrame mainFrame;
39      private BSPresenceBean presenceBean = null;
40      private BSRosterBean rosterBean = null;
41      private Vector jids;
42      private Hashtable buttons;
43      //private JButton myButton;
44      private JButton dockButton;
45      private JButton addButton;
46      private JToolBar toolBar;
47      private JFrame frame;
48      private boolean docked;
49      
50      private JPopupMenu buddyPopupMenu;
51      private BSJIDActionMenuItem deleteMenuItem;
52      private BSJIDActionMenuItem chatMenuItem;
53      
54      /** Constructor */
55      BSStatusesBar(BSMainFrame parent, BSPresenceBean presenceBean, 
56                    BSRosterBean rosterBean, Vector jids, boolean docked) {
57                      
58          this.jids = jids;
59          if (jids == null) this.jids = new Vector();
60          this.docked = docked;
61          mainFrame = parent;
62          
63          initComponents();
64          
65          setPresenceBean(presenceBean);
66          setRosterBean(rosterBean);
67          updatePresences();
68      }
69      
70      /** Inits components */
71      private void initComponents() {
72          frame = new JFrame("BuddyBar");
73          frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
74          frame.getContentPane().setLayout(new BorderLayout());
75          frame.setResizable(false);
76          
77          toolBar = new JToolBar();
78          toolBar.setFloatable(false);
79              
80          //frame.setIconImage(mainFrame.getCurrentPresenceImage());
81          frame.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(
82             mainFrame.isNewMessage()? "images/alert3_status_lights.gif" : "images/3_status_lights.gif")));
83          /*myButton = new JButton(new ImageIcon(mainFrame.getCurrentPresenceImage()));
84          myButton.setMargin(new Insets(1,1,1,1));
85          myButton.setToolTipText("My presence");
86          toolBar.add(myButton);*/
87          
88          buttons = new Hashtable();
89          
90          if (jids != null) {
91              Enumeration jidEnum = jids.elements();
92              while (jidEnum.hasMoreElements()) {
93                  JID jid = (JID) jidEnum.nextElement();
94                  String jidStr = BSPresenceBean.getJIDHashString(jid, true);
95                  BSJIDActionButton button = new BSJIDActionButton(mainFrame.getPresenceIcon(false, null, null), jid);
96                  button.addActionListener(this);
97                  button.addMouseListener(this);
98                  button.setToolTipText(jidStr);
99                  button.setMargin(new Insets(1,1,1,1));
100                 toolBar.add(button);
101                 buttons.put(jidStr, button);
102             }
103         }
104         
105         toolBar.addSeparator();
106         
107         //ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource("images/add_user.gif"));
108         ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource("images/add_statuslight.gif"));
109         addButton = new JButton(icon);
110         addButton.setToolTipText("Add status light");
111         //addButton.setPreferredSize(new Dimension(14,14));
112         addButton.setMargin(new Insets(1,1,1,1));
113         addButton.addActionListener(this);
114         toolBar.add(addButton);
115         
116         icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
117                                 "images/dock.gif" : "images/float.gif"));
118         dockButton = new JButton(icon);
119         dockButton.setToolTipText(docked? "Float" : "Dock");
120         //dockButton.setPreferredSize(new Dimension(14,14));
121         dockButton.setMargin(new Insets(1,1,1,1));
122         dockButton.addActionListener(this);
123         toolBar.add(dockButton);
124         
125         buddyPopupMenu = new JPopupMenu();
126         chatMenuItem = new BSJIDActionMenuItem("Open chat");
127         chatMenuItem.addActionListener(this);
128         deleteMenuItem = new BSJIDActionMenuItem("Delete");
129         deleteMenuItem.addActionListener(this);
130         
131         setDocked(docked);
132     }
133     
134     public void setDocked(boolean docked) {
135         frame.setVisible(!docked);
136         ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
137                                 "images/dock.gif" : "images/float.gif"));
138         dockButton.setIcon(icon);
139         dockButton.setToolTipText(docked? "Float" : "Dock");
140         
141         if (!docked) {
142             mainFrame.getContentPane().remove(toolBar);
143             frame.getContentPane().add(toolBar, BorderLayout.NORTH);
144             frame.toFront();
145             frame.pack();
146             frame.validate();
147             mainFrame.validate();
148         }
149         else {
150             frame.getContentPane().remove(toolBar);
151             mainFrame.getContentPane().add(toolBar, BorderLayout.SOUTH);
152             mainFrame.validate();
153         }
154         this.docked = docked;
155     }
156     
157     public void setPresenceBean(BSPresenceBean presenceBean) {
158         if (this.presenceBean != null)
159             this.presenceBean.removePresenceListener(this);
160         this.presenceBean = presenceBean;
161         if (presenceBean != null)
162             presenceBean.addPresenceListener(this);
163         
164         updatePresences();
165     }
166     
167     public void setRosterBean(BSRosterBean rosterBean) {
168         this.rosterBean = rosterBean;
169         
170         setToolTips();
171     }
172     
173     public void setMyPresenceImage(Image img) {
174         //frame.setIconImage(img);
175         frame.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(
176            mainFrame.isNewMessage()? "images/alert3_status_lights.gif" : "images/3_status_lights.gif")));
177         //myButton.setIcon(new ImageIcon(img));
178     }
179     
180     public void setToolTips() {
181         if (jids != null) {
182             Enumeration jidEnum = jids.elements();
183             while (jidEnum.hasMoreElements()) {
184                 JID jid = (JID) jidEnum.nextElement();
185                 String jidStr = BSPresenceBean.getJIDHashString(jid, true);
186                 BSJIDActionButton button = (BSJIDActionButton) buttons.get(jidStr);
187                 if (button == null) continue;
188                 if (rosterBean == null)
189                     button.setToolTipText(jidStr);
190                 else {
191                     String name = rosterBean.getFriendlyName(jid);
192                     button.setToolTipText((name != null)? name : jidStr);
193                 }
194             }
195         }
196     }
197     
198     public void updatePresences() {
199         //frame.setIconImage(mainFrame.getCurrentPresenceImage());
200         frame.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(
201            mainFrame.isNewMessage()? "images/alert3_status_lights.gif" : "images/3_status_lights.gif")));
202         //myButton.setIcon(new ImageIcon(mainFrame.getCurrentPresenceImage()));
203         
204         if (jids != null) {
205             Enumeration jidEnum = jids.elements();
206             while (jidEnum.hasMoreElements()) {
207                 JID jid = (JID) jidEnum.nextElement();
208                 String jidStr = BSPresenceBean.getJIDHashString(jid, true);
209                 BSJIDActionButton button = (BSJIDActionButton) buttons.get(jidStr);
210                 if (button == null) continue;
211                 if (presenceBean == null)
212                     button.setIcon(mainFrame.getPresenceIcon(false, null, null));
213                 else {
214                     BSPresenceInfo pi = presenceBean.getResourcePresence(jid);
215                     if (pi == null) {
216                         String showStr = BSMainFrame.SHOW_OFFLINE_STR;
217                         button.setIcon(mainFrame.getPresenceIcon(false, showStr, null));
218                     }
219                     else {
220                         String showStr = pi.getFriendlyShow();
221                         String statusStr = pi.getStatus();
222                         button.setIcon(mainFrame.getPresenceIcon(pi.isOnline(), showStr, statusStr));
223                     }
224                 }
225             }
226         }
227            
228         if (!docked) {
229             frame.pack();
230             frame.invalidate();
231         }
232     }
233     
234     /** Removes itself from listening */
235     public void cancelListening() {
236         if (presenceBean != null)
237             presenceBean.removePresenceListener(this);
238     }
239 
240     /** Displays change of presence in chat window */
241     public void presenceChanged(BSPresenceInfo pi) {
242         updatePresences();
243         /*if (pi == null)
244             updatePresences();
245         else {
246             JID jid = pi.getJID();
247             if (jid == null)
248                 updatePresences();
249             else { 
250                 String jidStr = BSPresenceBean.getJIDHashString(jid, true);
251                 String jidStr2 = BSPresenceBean.getJIDHashString(jid, false);
252                 BSJIDActionButton button = null;
253                 //JLabel button = null;
254                 if (buttons.keySet().contains(jidStr))
255                     button = (BSJIDActionButton) buttons.get(jidStr);
256                 else if (buttons.keySet().contains(jidStr2))
257                     button = (BSJIDActionButton) buttons.get(jidStr2);
258                 
259                 if (button != null) {
260                     String show = pi.getFriendlyShow();
261                     String status = pi.getStatus();
262                     button.setIcon(mainFrame.getPresenceIcon(pi.isOnline(), show, status));
263                 }
264             }
265         }*/
266     }
267 
268     /** Called after disconnecting - no presence info is available  */
269     public void presencesCleared() {
270         updatePresences();
271     }
272     
273     /** Called when subscription request was approved  */
274     public void subscriptionApproved(JID jid) {}
275     
276     /** Called when subscription request was received  */
277     public void subscriptionRequested(JID jid) { }
278     
279     /** Handles actions from buttons */
280     public void actionPerformed(ActionEvent evt) {
281         
282         if (evt.getSource() == dockButton)
283             setDocked(!docked);
284         
285         else if (evt.getSource() == deleteMenuItem) {
286             JID jid = deleteMenuItem.getJID();
287             String jidStr = BSPresenceBean.getJIDHashString(jid, true);
288             jids.remove(jid);
289             BSJIDActionButton button = (BSJIDActionButton) buttons.get(jidStr);
290             if (button != null)
291                 toolBar.remove(button);
292             buttons.remove(jidStr);
293             toolBar.invalidate();
294             toolBar.doLayout();
295             if (!docked) {
296                 frame.pack();
297                 frame.validate();
298             }
299             mainFrame.saveStatusesBarJIDs(jids.elements());
300         }
301         
302         else if (evt.getSource() == addButton) {
303             BSChooseJIDDialog dlg = new BSChooseJIDDialog(mainFrame, "Add status light", rosterBean.entries());
304             dlg.show();
305             if (dlg.jid != null) {
306                 String jidStr = BSPresenceBean.getJIDHashString(dlg.jid, true);
307                 jids.add(dlg.jid);
308                 BSJIDActionButton button = new BSJIDActionButton(mainFrame.getPresenceIcon(false, null, null), dlg.jid);
309                 button.setMargin(new Insets(1,1,1,1));
310                 button.addMouseListener(this);
311                 button.addActionListener(this);
312                 buttons.put(jidStr, button);
313                 toolBar.add(button, toolBar.getComponentIndex(addButton)-1);
314                 updatePresences();
315                 setToolTips();
316                 toolBar.invalidate();
317                 toolBar.doLayout();
318                 if (!docked) {
319                     frame.pack();
320                     frame.validate();
321                 }
322                 mainFrame.saveStatusesBarJIDs(jids.elements());
323             }
324         }
325         
326         else if (evt.getSource() instanceof BSJIDActionButton) {
327             JID jid = ((BSJIDActionButton)evt.getSource()).getJID();
328             mainFrame.openChatWindow(jid, true, false);
329         }
330         
331         else if (evt.getSource() == chatMenuItem) {
332             JID jid = chatMenuItem.getJID();
333             mainFrame.openChatWindow(jid, true, false);
334         }
335     }
336     
337     public void mousePressed(MouseEvent e) { 
338         maybeShowPopup(e);
339     }
340     
341     public void mouseReleased(MouseEvent e) { 
342         maybeShowPopup(e);
343     }
344     
345     protected void maybeShowPopup(MouseEvent e) {
346         // if that was context popup event
347         if (e.isPopupTrigger()) {
348         //if (e.getClickCount() == 1 && SwingUtilities.isRightMouseButton(e)) {
349             // gets the selected node
350             if (e.getSource() instanceof BSJIDActionButton) {
351                 BSJIDActionButton button = (BSJIDActionButton) e.getSource();
352                 JID jid = button.getJID();
353                 
354                 buddyPopupMenu.removeAll();
355                 
356                 chatMenuItem.setJID(jid);
357                 buddyPopupMenu.add(chatMenuItem);
358                 
359                 deleteMenuItem.setJID(jid);
360                 buddyPopupMenu.add(deleteMenuItem);
361                 
362                 buddyPopupMenu.show(e.getComponent(), e.getX(), e.getY());
363             }
364         }
365     }
366     
367     public void mouseClicked(java.awt.event.MouseEvent mouseEvent) { }
368     public void mouseEntered(java.awt.event.MouseEvent mouseEvent) { }
369     public void mouseExited(java.awt.event.MouseEvent mouseEvent) { }
370     
371 }