⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsstatusesbar.java

📁 一款即时通讯软件
💻 JAVA
字号:
package edu.ou.kmi.buddyspace.gui;

/*
 * BSStatusesBar.java
 *
 * Project: BuddySpace
 * (C) Copyright Knowledge Media Institute 2002
 *
 *
 * Created on 3 December 2002, 15:19
 */

import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.*;

/*
import org.jabber.jabberbeans.*;
import org.jabber.jabberbeans.Extension.*;
*/

import org.jabber.jabberbeans.util.*;

import edu.ou.kmi.buddyspace.core.*;
//import edu.ou.kmi.buddyspace.utils.*;

/**
 * Window displaying presence statuses of favourite JIDs.
 * Uses <code>BSPresenceBean</code> to receive presence info.
 *
 * @author  Jiri Komzak, Knowledge Media Institute, Open University, United Kingdom
 */
public class BSStatusesBar //extends DockableWindow 
                           implements ActionListener, MouseListener,
                                      BSPresenceListener {
                              
    private BSMainFrame mainFrame;
    private BSPresenceBean presenceBean = null;
    private BSRosterBean rosterBean = null;
    private Vector jids;
    private Hashtable buttons;
    //private JButton myButton;
    private JButton dockButton;
    private JButton addButton;
    private JToolBar toolBar;
    private JFrame frame;
    private boolean docked;
    
    private JPopupMenu buddyPopupMenu;
    private BSJIDActionMenuItem deleteMenuItem;
    private BSJIDActionMenuItem chatMenuItem;
    
    /** Constructor */
    BSStatusesBar(BSMainFrame parent, BSPresenceBean presenceBean, 
                  BSRosterBean rosterBean, Vector jids, boolean docked) {
                    
        this.jids = jids;
        if (jids == null) this.jids = new Vector();
        this.docked = docked;
        mainFrame = parent;
        
        initComponents();
        
        setPresenceBean(presenceBean);
        setRosterBean(rosterBean);
        updatePresences();
    }
    
    /** Inits components */
    private void initComponents() {
        frame = new JFrame("BuddyBar");
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.getContentPane().setLayout(new BorderLayout());
        frame.setResizable(false);
        
        toolBar = new JToolBar();
        toolBar.setFloatable(false);
            
        //frame.setIconImage(mainFrame.getCurrentPresenceImage());
        frame.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(
           mainFrame.isNewMessage()? "images/alert3_status_lights.gif" : "images/3_status_lights.gif")));
        /*myButton = new JButton(new ImageIcon(mainFrame.getCurrentPresenceImage()));
        myButton.setMargin(new Insets(1,1,1,1));
        myButton.setToolTipText("My presence");
        toolBar.add(myButton);*/
        
        buttons = new Hashtable();
        
        if (jids != null) {
            Enumeration jidEnum = jids.elements();
            while (jidEnum.hasMoreElements()) {
                JID jid = (JID) jidEnum.nextElement();
                //String jidStr = BSPresenceBean.getJIDHashString(jid, true);
                BSJIDActionButton button = new BSJIDActionButton(mainFrame.getPresenceIcon(false, null, null), jid);
                button.addActionListener(this);
                button.addMouseListener(this);
                //button.setToolTipText(jidStr);
                button.setToolTipText(jid.toString());
                button.setMargin(new Insets(1,1,1,1));
                toolBar.add(button);
                //buttons.put(jidStr, button);
                buttons.put(jid, button);
            }
        }
        
        toolBar.addSeparator();
        
        //ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource("images/add_user.gif"));
        ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource("images/add_statuslight.gif"));
        addButton = new JButton(icon);
        addButton.setToolTipText("Add status light");
        //addButton.setPreferredSize(new Dimension(14,14));
        addButton.setMargin(new Insets(1,1,1,1));
        addButton.addActionListener(this);
        toolBar.add(addButton);
        
        icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
                                "images/dock.gif" : "images/float.gif"));
        dockButton = new JButton(icon);
        dockButton.setToolTipText(docked? "Float" : "Dock");
        //dockButton.setPreferredSize(new Dimension(14,14));
        dockButton.setMargin(new Insets(1,1,1,1));
        dockButton.addActionListener(this);
        toolBar.add(dockButton);
        
        buddyPopupMenu = new JPopupMenu();
        chatMenuItem = new BSJIDActionMenuItem("Open chat");
        chatMenuItem.addActionListener(this);
        deleteMenuItem = new BSJIDActionMenuItem("Delete");
        deleteMenuItem.addActionListener(this);
        
        setDocked(docked);
    }
    
    public void setDocked(boolean docked) {
        frame.setVisible(!docked);
        ImageIcon icon = new ImageIcon(ClassLoader.getSystemResource(!docked?
                                "images/dock.gif" : "images/float.gif"));
        dockButton.setIcon(icon);
        dockButton.setToolTipText(docked? "Float" : "Dock");
        
        if (!docked) {
            mainFrame.getContentPane().remove(toolBar);
            frame.getContentPane().add(toolBar, BorderLayout.NORTH);
            frame.toFront();
            frame.pack();
            frame.validate();
            mainFrame.validate();
        }
        else {
            frame.getContentPane().remove(toolBar);
            mainFrame.getContentPane().add(toolBar, BorderLayout.SOUTH);
            mainFrame.validate();
        }
        this.docked = docked;
    }
    
    public void setPresenceBean(BSPresenceBean presenceBean) {
        if (this.presenceBean != null)
            this.presenceBean.removePresenceListener(this);
        this.presenceBean = presenceBean;
        if (presenceBean != null)
            presenceBean.addPresenceListener(this);
        
        updatePresences();
    }
    
    public void setRosterBean(BSRosterBean rosterBean) {
        this.rosterBean = rosterBean;
        
        setToolTips();
    }
    
    public void setMyPresenceImage(Image img) {
        //frame.setIconImage(img);
        frame.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(
           mainFrame.isNewMessage()? "images/alert3_status_lights.gif" : "images/3_status_lights.gif")));
        //myButton.setIcon(new ImageIcon(img));
    }
    
    public void setToolTips() {
        if (jids != null) {
            Enumeration jidEnum = jids.elements();
            while (jidEnum.hasMoreElements()) {
                JID jid = (JID) jidEnum.nextElement();
                //String jidStr = BSPresenceBean.getJIDHashString(jid, true);
                //BSJIDActionButton button = (BSJIDActionButton) buttons.get(jidStr);
                BSJIDActionButton button = (BSJIDActionButton) buttons.get(jid);
                if (button == null) continue;
                if (rosterBean == null)
                    //button.setToolTipText(jidStr);
                    button.setToolTipText(jid.toString());
                else {
                    String name = rosterBean.getFriendlyName(jid);
                    //button.setToolTipText((name != null)? name : jidStr);
                    button.setToolTipText((name != null)? name : jid.toString());
                }
            }
        }
    }
    
    public void updatePresences() {
        //frame.setIconImage(mainFrame.getCurrentPresenceImage());
        frame.setIconImage(Toolkit.getDefaultToolkit().getImage(ClassLoader.getSystemResource(
           mainFrame.isNewMessage()? "images/alert3_status_lights.gif" : "images/3_status_lights.gif")));
        //myButton.setIcon(new ImageIcon(mainFrame.getCurrentPresenceImage()));
        
        if (jids != null) {
            Enumeration jidEnum = jids.elements();
            while (jidEnum.hasMoreElements()) {
                JID jid = (JID) jidEnum.nextElement();
                //String jidStr = BSPresenceBean.getJIDHashString(jid, true);
                //BSJIDActionButton button = (BSJIDActionButton) buttons.get(jidStr);
                BSJIDActionButton button = (BSJIDActionButton) buttons.get(jid);
                if (button == null) continue;
                if (presenceBean == null)
                    button.setIcon(mainFrame.getPresenceIcon(false, null, null));
                else {
                    BSPresenceInfo pi = presenceBean.getResourcePresence(jid);
                    if (pi == null) {
                        String showStr = BSMainFrame.SHOW_OFFLINE_STR;
                        button.setIcon(mainFrame.getPresenceIcon(false, showStr, null));
                    }
                    else {
                        String showStr = pi.getFriendlyShow();
                        String statusStr = pi.getStatus();
                        button.setIcon(mainFrame.getPresenceIcon(pi.isOnline(), showStr, statusStr));
                    }
                }
            }
        }
           
        if (!docked) {
            frame.pack();
            frame.invalidate();
        }
    }
    
    /** Removes itself from listening */
    public void cancelListening() {
        if (presenceBean != null)
            presenceBean.removePresenceListener(this);
    }

    /** Displays change of presence in chat window */
    public void presenceChanged(BSPresenceInfo pi) {
        updatePresences();
        /*if (pi == null)
            updatePresences();
        else {
            JID jid = pi.getJID();
            if (jid == null)
                updatePresences();
            else { 
                String jidStr = BSPresenceBean.getJIDHashString(jid, true);
                String jidStr2 = BSPresenceBean.getJIDHashString(jid, false);
                BSJIDActionButton button = null;
                //JLabel button = null;
                if (buttons.keySet().contains(jidStr))
                    button = (BSJIDActionButton) buttons.get(jidStr);
                else if (buttons.keySet().contains(jidStr2))
                    button = (BSJIDActionButton) buttons.get(jidStr2);
                
                if (button != null) {
                    String show = pi.getFriendlyShow();
                    String status = pi.getStatus();
                    button.setIcon(mainFrame.getPresenceIcon(pi.isOnline(), show, status));
                }
            }
        }*/
    }

    /** Called after disconnecting - no presence info is available  */
    public void presencesCleared() {
        updatePresences();
    }
    
    /** Called when subscription request was approved  */
    public void subscriptionApproved(JID jid) {}
    
    /** Called when subscription request was received  */
    public void subscriptionRequested(JID jid) { }
    
    /** Handles actions from buttons */
    public void actionPerformed(ActionEvent evt) {
        
        if (evt.getSource() == dockButton)
            setDocked(!docked);
        
        else if (evt.getSource() == deleteMenuItem) {
            JID jid = deleteMenuItem.getJID();
            //String jidStr = BSPresenceBean.getJIDHashString(jid, true);
            jids.remove(jid);
            //BSJIDActionButton button = (BSJIDActionButton) buttons.get(jidStr);
            BSJIDActionButton button = (BSJIDActionButton) buttons.get(jid);
            if (button != null)
                toolBar.remove(button);
            //buttons.remove(jidStr);
            buttons.remove(jid);
            toolBar.invalidate();
            toolBar.doLayout();
            if (!docked) {
                frame.pack();
                frame.validate();
            }
            mainFrame.saveStatusesBarJIDs(jids.elements());
        }
        
        else if (evt.getSource() == addButton) {
            BSChooseJIDDialog dlg = new BSChooseJIDDialog(mainFrame, "Add status light", rosterBean.entries());
            dlg.show();
            if (dlg.jid != null) {
                //String jidStr = BSPresenceBean.getJIDHashString(dlg.jid, true);
                jids.add(dlg.jid);
                BSJIDActionButton button = new BSJIDActionButton(mainFrame.getPresenceIcon(false, null, null), dlg.jid);
                button.setMargin(new Insets(1,1,1,1));
                button.addMouseListener(this);
                button.addActionListener(this);
                //buttons.put(jidStr, button);
                buttons.put(dlg.jid, button);
                toolBar.add(button, toolBar.getComponentIndex(addButton)-1);
                updatePresences();
                setToolTips();
                toolBar.invalidate();
                toolBar.doLayout();
                if (!docked) {
                    frame.pack();
                    frame.validate();
                }
                mainFrame.saveStatusesBarJIDs(jids.elements());
            }
        }
        
        else if (evt.getSource() instanceof BSJIDActionButton) {
            JID jid = ((BSJIDActionButton)evt.getSource()).getJID();
            mainFrame.openChatWindow(jid, true, false);
        }
        
        else if (evt.getSource() == chatMenuItem) {
            JID jid = chatMenuItem.getJID();
            mainFrame.openChatWindow(jid, true, false);
        }
    }
    
    public void mousePressed(MouseEvent e) { 
        maybeShowPopup(e);
    }
    
    public void mouseReleased(MouseEvent e) { 
        maybeShowPopup(e);
    }
    
    protected void maybeShowPopup(MouseEvent e) {
        // if that was context popup event
        if (e.isPopupTrigger()) {
        //if (e.getClickCount() == 1 && SwingUtilities.isRightMouseButton(e)) {
            // gets the selected node
            if (e.getSource() instanceof BSJIDActionButton) {
                BSJIDActionButton button = (BSJIDActionButton) e.getSource();
                JID jid = button.getJID();
                
                buddyPopupMenu.removeAll();
                
                chatMenuItem.setJID(jid);
                buddyPopupMenu.add(chatMenuItem);
                
                deleteMenuItem.setJID(jid);
                buddyPopupMenu.add(deleteMenuItem);
                
                buddyPopupMenu.show(e.getComponent(), e.getX(), e.getY());
            }
        }
    }
    
    public void mouseClicked(java.awt.event.MouseEvent mouseEvent) { }
    public void mouseEntered(java.awt.event.MouseEvent mouseEvent) { }
    public void mouseExited(java.awt.event.MouseEvent mouseEvent) { }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -