📄 bsmapview.java
字号:
if (labels == null) {
labels = new BSJIDLabelList(jid);
//jidLabels.put(str, labels);
jidLabels.put(jid, labels);
}
labels.addLabel(lbl);
}
/** Registers cluster label to receive presence changes */
protected void registerClusterLabel(BSClusterLabel lbl) {
clusterLabels.add(lbl);
}
/** Set the collection of JIDs that should be highlighted */
public void setEmphasizedJIDs(Collection emphasizedJIDs) {
this.emphasizedJIDs = emphasizedJIDs;
refreshPresences();
}
/** Refreshes presences and icon of labels */
protected void refreshPresences() {
if (presenceBean == null) return;
// for all jid labels
Enumeration labelLists = jidLabels.elements();
while (labelLists.hasMoreElements()) {
BSJIDLabelList labels = (BSJIDLabelList) labelLists.nextElement();
JID jid = labels.getJID();
Icon img = getIconForPresence(jid);
labels.setImg(img);
}
// for all cluster labels
Enumeration clusterEnum = clusterLabels.elements();
while (clusterEnum.hasMoreElements()) {
BSClusterLabel label = (BSClusterLabel) clusterEnum.nextElement();
label.setEmphasizedJIDs(emphasizedJIDs);
label.refreshPresences(presenceBean);
}
}
/** Returns icon for given presence (with emphasis as required) */
protected Icon getIconForPresence(JID jid) {
// *** what about people who are not in roster !!!
BSPresenceInfo pi = presenceBean.getResourcePresence(jid);
if (pi == null) pi = new BSPresenceInfo(jid, false, null, null);
Icon icon = BSJIDLabel.getIconForPresence(pi);
if (emphasizedJIDs != null) {
String user = jid.toString().toLowerCase();
boolean emphasis = emphasizedJIDs.contains(user);
if (emphasis) icon = (Icon)xicons.get(icon);
}
return icon;
}
/** Opens chat if clicked on jid label */
private void maybeOpenChatWindow(MouseEvent e) {
Object src = e.getSource();
if (src instanceof BSJIDLabel)
mapPanel.openChat(((BSJIDLabel)src).getJID());
}
/** Shows popup menu if supposed to */
private void maybeShowPopup(MouseEvent e) {
// if that was context popup event
if (e.isPopupTrigger()) {
//if (e.getClickCount() == 1 && SwingUtilities.isRightMouseButton(e)) {
// gets the clicked label
Object src = e.getSource();
boolean connected = mapPanel.isConnected();
// if we clicked on the group node
if (src instanceof BSJIDLabel) {
JID jid = ((BSJIDLabel)src).getJID();
jidPopupMenu.removeAll();
if (connected) {
chatMenuItem.setJID(jid);
jidPopupMenu.add(chatMenuItem);
msgMenuItem.setJID(jid);
jidPopupMenu.add(msgMenuItem);
//sendFileMenuItem.setJID(((BSJIDLabel)src).getJID());
//jidPopupMenu.add(sendFileMenuItem);
subscribeMenuItem.setJID(jid);
jidPopupMenu.add(subscribeMenuItem);
if (mapPanel.supportsPlans()) {
getPlanMenuItem.setJID(jid);
jidPopupMenu.add(getPlanMenuItem);
}
jidPopupMenu.add(new JSeparator());
} //if connected
BSPresenceInfo pi = presenceBean.getResourcePresence(jid);
if (pi == null) pi = new BSPresenceInfo(jid, false, null, null);
Icon img = getIconForPresence(jid);
presenceMenuItem.setIcon(img);
String status = pi.getStatus();
if (status == null) status = "";
presenceMenuItem.setText(pi.getFriendlyShow() + " - " + status);
jidPopupMenu.add(presenceMenuItem);
jidPopupMenu.show(e.getComponent(), e.getX(), e.getY());
//adjustPopupPosition(jidPopupMenu);
}
// else if we clicked on cluster label
else if (src instanceof BSClusterLabel) {
clusterPopupMenu.removeAll();
Enumeration jids = ((BSClusterLabel)src).getJIDs();
// for all jid in cluster
while (jids.hasMoreElements()) {
JID j = (JID) jids.nextElement();
BSPresenceInfo pi = presenceBean.getResourcePresence(j);
Icon img = getIconForPresence(j);
String nick = null;
if (rosterBean != null) nick = rosterBean.getFriendlyName(j);
if (rosterBean == null || nick == null) nick = "?";
JMenu jidSubmenu = new JMenu(nick + " (" + j.toString() + ")");
jidSubmenu.setIcon(img);
clusterPopupMenu.add(jidSubmenu);
if (connected) {
BSJIDActionMenuItem mi;
mi = new BSJIDActionMenuItem(CHAT_MENU_STR, j);
mi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mapPanel.openChat(((BSJIDActionMenuItem)e.getSource()).getJID());
}
});
jidSubmenu.add(mi);
mi = new BSJIDActionMenuItem(MSG_MENU_STR, j);
mi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mapPanel.sendMessage(((BSJIDActionMenuItem)e.getSource()).getJID());
}
});
jidSubmenu.add(mi);
mi = new BSJIDActionMenuItem(SUBSCRIBE_MENU_STR, j);
mi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mapPanel.sendSubscriptionRequest(((BSJIDActionMenuItem)e.getSource()).getJID());
}
});
jidSubmenu.add(mi);
if (mapPanel.supportsPlans()) {
mi = new BSJIDActionMenuItem(GET_PLAN_MENU_STR, j);
mi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
mapPanel.getPlan(((BSJIDActionMenuItem)e.getSource()).getJID());
}
});
jidSubmenu.add(mi);
}
jidSubmenu.add(new JSeparator());
} // if connected
if (pi == null) pi = new BSPresenceInfo(j, false, null, null);
String status = pi.getStatus();
if (status == null) status = "";
JMenuItem presenceMI = new JMenuItem(pi.getFriendlyShow() + " - " + status);
presenceMI.setIcon(img);
jidSubmenu.add(presenceMI);
} //while
clusterPopupMenu.show(e.getComponent(), e.getX(), e.getY());
//adjustPopupPosition(clusterPopupMenu);
} // else(cluster)
} //if(popup)
}
// *** presence listener stuff ***
/** <code>BSPresenceListener</code> method. */
public void presenceChanged(BSPresenceInfo pi) {
if (pi == null || pi.getJID() == null || presenceBean == null)
return;
JID jid = pi.getJID();
// sets resource-specific presence
if (jid.getResource() != null && jid.getResource() != "") {
pi = presenceBean.getResourcePresence(jid);
if (pi == null)
pi = new BSPresenceInfo(jid, false, null, null);
updatePresence(pi);
}
// sets best presence for JID without resource
//JID jidWORes = BSPresenceBean.getJidWithoutRes(jid);
JID jidWORes = jid.getSimpleJID();
pi = presenceBean.getResourcePresence(jidWORes);
if (pi == null)
pi = new BSPresenceInfo(jidWORes, false, null, null);
else {
boolean isMyself = pi.isMyself();
pi = new BSPresenceInfo(jidWORes, pi.isOnline(), pi.getShow(),
pi.getStatus());
pi.setIsMyself(isMyself);
}
updatePresence(pi);
}
/** Sets given presence to clusters and labels */
protected void updatePresence(BSPresenceInfo pi) {
if (pi == null || pi.getJID() == null)
return;
// for all clusters
Enumeration clusterEnum = clusterLabels.elements();
while (clusterEnum.hasMoreElements()) {
BSClusterLabel label = (BSClusterLabel) clusterEnum.nextElement();
// sets presence and updates icon
label.setPresence(pi);
}
// for jid labels for given jid
//String str = BSPresenceBean.getJIDHashString(pi.getJID(), true);
JID key = pi.getJID();
//BSJIDLabelList labels = (BSJIDLabelList) jidLabels.get(str);
BSJIDLabelList labels = (BSJIDLabelList) jidLabels.get(key);
if (labels == null)
return;
// sets the right icon
Icon img = getIconForPresence(pi.getJID());
labels.setImg(img);
}
/** <code>BSPresenceListener</code> method. */
public void presencesCleared() {
// for all clusters
Enumeration clusterEnum = clusterLabels.elements();
while (clusterEnum.hasMoreElements()) {
BSClusterLabel label = (BSClusterLabel) clusterEnum.nextElement();
// sets presence and updates icon
label.clearPresences();
}
// for all jid labels
Enumeration allLabels = jidLabels.elements();
while (allLabels.hasMoreElements()) {
BSJIDLabelList labels = (BSJIDLabelList) allLabels.nextElement();
if (labels == null)
return;
// sets the right icon
Icon img = getIconForPresence(null);
labels.setImg(img);
}
}
/** Empty */
public void subscriptionApproved(JID jid) { }
/** Empty */
public void subscriptionRequested(JID jid) { }
/** <code>MouseListener</code> method - catches double-clicks */
public void mouseClicked(MouseEvent e) {
// handles only double clicks on JID nodes
if ( e.getClickCount() == 2 ) {
maybeOpenChatWindow(e);
//tree.repaint();
}
}
/** <code>MouseListener</code> method - catches popup-menu clicks */
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
/** <code>MouseListener</code> method - catches popup-menu clicks */
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
/** <code>MouseListener</code> method - empty implementation */
public void mouseEntered(MouseEvent e) { }
/** <code>MouseListener</code> method - empty implementation */
public void mouseExited(MouseEvent e) { }
/** Handles actions from GUI controls */
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
// opens chat
if (src == chatMenuItem) {
JID j = chatMenuItem.getJID();
if (j != null)
mapPanel.openChat(j);
}
// sends message
if (src == msgMenuItem) {
JID j = msgMenuItem.getJID();
if (j != null)
mapPanel.sendMessage(j);
}
// subscribes for presence
else if (src == subscribeMenuItem) {
JID j = subscribeMenuItem.getJID();
if (j != null)
mapPanel.sendSubscriptionRequest(j);
}
// subscribes for presence
else if (src == getPlanMenuItem) {
JID j = getPlanMenuItem.getJID();
if (j != null)
mapPanel.getPlan(j);
}
// a resource must be specified !!!
/*else if (src == sendFileMenuItem) {
JID j = chatMenuItem.getJID();
if (j != null)
mapPanel.sendFile(j);
}*/
}
public void cancelListening() {
if (presenceBean != null)
presenceBean.removePresenceListener(this);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -