📄 bsstatusesbar.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 + -