📄 bsrostertreeview.java
字号:
mi == clearAllPresenceMenuItem) { // clears all individual presences
setIndividualPresence(mi);
tree.repaint();
}
// sets individual presences policy
else if (mi == policyPresenceMenuItem) {
int oldPolicy = presenceBean.getIndividualPresences().getPolicy();
if (oldPolicy == BSIndividualPresences.BETTER_TAKES_POLICY)
presenceBean.getIndividualPresences().setPolicy(BSIndividualPresences.WORSE_TAKES_POLICY);
else
presenceBean.getIndividualPresences().setPolicy(BSIndividualPresences.BETTER_TAKES_POLICY);
// makes the presences to re-generate and re-send
BSPresenceInfo curPi = presenceBean.getResourcePresence(new JID(BSMainFrame.username,
BSMainFrame.server, BSMainFrame.resource));
presenceBean.sendPresence(curPi, null);
}
// IX panels stuff
/*else if (mi == relSupMenuItem) setRelation("superiors");
else if (mi == relSubMenuItem) setRelation("subordinates");
else if (mi == relPeerMenuItem) setRelation("peers");
else if (mi == relContactMenuItem) setRelation("contacts");
else if (mi == relDeleteMenuItem) setRelation(null);*/
// end ofIX panels stuff
}
// IX panels stuff
/** Sets my relation to jid. I-X process panels stuff. */
private void setRelation(String category) {
TreePath tp = tree.getSelectionPath();
if (tp == null) return;
DefaultMutableTreeNode buddy = (DefaultMutableTreeNode) tp.getLastPathComponent();
if (!(buddy.getUserObject() instanceof BSJIDItem))
return;
BSJIDItem jidItem = (BSJIDItem) buddy.getUserObject();
JID jid = jidItem.getJID();
//String jidStr = BSPresenceBean.getJIDHashString(jid, false);
JID key = jid.getSimpleJID();
if (category == null)
//relations.remove(jidStr);
relations.remove(key);
else
//relations.put(jidStr, category);
relations.put(key, category);
//IXPrefsIO.saveRelations2(relations, BSMainFrame.ixPropsPath);
updateRoster();
}
// end ofIX panels stuff
/** Called from outside the roster tree to delete selected node. */
public void deleteContact() {
TreePath tp = tree.getSelectionPath();
if (tp != null)
deleteContact((DefaultMutableTreeNode) tp.getLastPathComponent());
}
/** Called from outside the roster tree to change selected node. */
public void changeContact() {
TreePath tp = tree.getSelectionPath();
if (tp != null)
changeContact((DefaultMutableTreeNode) tp.getLastPathComponent());
}
/** Called when addContact selected. */
protected void addContact() {
BSAddContactDialog dlg = new BSAddContactDialog(mainFrame, rosterBean, presenceBean);
dlg.show();
}
/** Called when deleteContact selected. */
protected void deleteContact(DefaultMutableTreeNode buddy) {
JID jid = null;
if (buddy.getUserObject() instanceof BSJIDItem &&
buddy.getParent() instanceof BSGroupNode) {
BSJIDItem jidItem = (BSJIDItem) buddy.getUserObject();
jid = jidItem.getJID();
}
else if (buddy instanceof BSComponentNode &&
buddy.getParent() instanceof BSGroupNode) {
BSComponentNode cmpNode = (BSComponentNode) buddy;
jid = cmpNode.getJID();
}
if (jid == null) return;
BSGroupNode groupNode = (BSGroupNode) buddy.getParent();
String group = groupNode.getName();
// some condition for TOP LEVEL group without name...
/*int result = JOptionPane.showConfirmDialog(mainFrame,
"Do you really delete contact "
+ jidItem.toString() + " (" + jid.toString() + ") "
+ "from group " + group + "?",
"Delete item", JOptionPane.YES_NO_OPTION);*/
int result = JOptionPane.showConfirmDialog(mainFrame,
"Do you really delete contact "
+ buddy.toString() + " (" + jid.toString() + ") "
+ "from group " + group + "?",
"Delete item", JOptionPane.YES_NO_OPTION);
if (result == 0)
rosterBean.deleteJIDFromGroup(jid, group);
}
/** Called when changeContact selected. */
protected void changeContact(DefaultMutableTreeNode buddy) {
JID jid = null;
if (buddy.getUserObject() instanceof BSJIDItem &&
buddy.getParent() instanceof BSGroupNode) {
BSJIDItem jidItem = (BSJIDItem) buddy.getUserObject();
jid = jidItem.getJID();
}
else if (buddy instanceof BSComponentNode &&
buddy.getParent() instanceof BSGroupNode) {
BSComponentNode cmpNode = (BSComponentNode) buddy;
jid = cmpNode.getJID();
}
if (jid == null) return;
BSGroupNode groupNode = (BSGroupNode) buddy.getParent();
String group = groupNode.getName();
// some condition for TOP LEVEL group without name...
BSAddContactDialog dlg = new BSAddContactDialog(mainFrame, rosterBean, presenceBean,
jid, buddy.toString(), group);
dlg.show();
}
/** Called when getPlan selected. */
protected void getPlan(DefaultMutableTreeNode buddy) {
JID jid = null;
if (buddy.getUserObject() instanceof BSJIDItem &&
buddy.getParent() instanceof BSGroupNode) {
BSJIDItem jidItem = (BSJIDItem) buddy.getUserObject();
jid = jidItem.getJID();
}
if (jid == null) return;
mainFrame.performAction(jid, "http://jabber.open.ac.uk/tags/plan#get");
}
/** Called when setIndividualPresence selected. */
protected void setIndividualPresence(Object source) {
DefaultMutableTreeNode n = (DefaultMutableTreeNode)
tree.getSelectionPath().getLastPathComponent();
String show = null;
String status = null;
boolean available = true;
if (source == onlinePresenceMenuItem)
show = BSPresenceInfo.SHOW_ONLINE;
else if (source == chatPresenceMenuItem)
show = BSPresenceInfo.SHOW_CHAT;
else if (source == busyPresenceMenuItem) {
show = BSPresenceInfo.SHOW_ONLINE;
status = BSMainFrame.STATUS_BUSY_STR;
}
else if (source == elsePresenceMenuItem) {
show = BSPresenceInfo.SHOW_ONLINE;
status = BSMainFrame.STATUS_ELSE_STR;
}
else if (source == awayPresenceMenuItem)
show = BSPresenceInfo.SHOW_AWAY;
else if (source == xaPresenceMenuItem)
show = BSPresenceInfo.SHOW_XA;
else if (source == dndPresenceMenuItem)
show = BSPresenceInfo.SHOW_DND;
else if (source == invisiblePresenceMenuItem)
available = false;
BSPresenceInfo indPi = new BSPresenceInfo(null, available, show, status);
if (n.getUserObject() instanceof BSJIDItem &&
n.getParent() instanceof BSGroupNode) {
BSJIDItem jidItem = (BSJIDItem) n.getUserObject();
JID jid = jidItem.getJID();
if (jid == null) return;
if (source == clearPresenceMenuItem)
presenceBean.getIndividualPresences().clearPresence(jid);
else if (source == clearAllPresenceMenuItem)
presenceBean.getIndividualPresences().clearAll();
else
presenceBean.getIndividualPresences().setPresence(jid, indPi);
}
else if (n instanceof BSGroupNode) {
BSGroupNode groupNode = (BSGroupNode) n;
String groupName = groupNode.getName();
if (groupName == null) return;
if (source == clearPresenceMenuItem)
presenceBean.getIndividualPresences().clearPresence(groupName);
else if (source == clearAllPresenceMenuItem)
presenceBean.getIndividualPresences().clearAll();
else
presenceBean.getIndividualPresences().setPresence(groupName, indPi);
}
BSPresenceInfo curPi = presenceBean.getResourcePresence(new JID(BSMainFrame.username,
BSMainFrame.server, BSMainFrame.resource));
presenceBean.sendPresence(curPi, null);
}
/** Called when sendFile selected. */
protected void sendFileTo(DefaultMutableTreeNode buddy) {
if (buddy == null) return;
if (!(buddy instanceof BSResourceNode)) return;
BSResourceNode resNode = (BSResourceNode) buddy;
JID jid = resNode.getJID();
mainFrame.sendFile(jid);
}
/*public void treeWillCollapse(TreeExpansionEvent evt)
throws ExpandVetoException {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)evt.getPath().getLastPathComponent();
//if (!(node instanceof BSGroupNode))
if (!expand) {
expand = true;
throw new ExpandVetoException(evt);
}
}
public void treeWillExpand(TreeExpansionEvent evt)
throws ExpandVetoException {
DefaultMutableTreeNode node = (DefaultMutableTreeNode)evt.getPath().getLastPathComponent();
//if (!(node instanceof BSGroupNode))
if (!expand) {
expand = true;
throw new ExpandVetoException(evt);
}
}*/
// *** inner classes ***
/**
* <code>BSGroupNode</code> is one of the <code>BSRosterTreeView</code>
* nodes. This represents a group. It includes hashtable of nodes for
* particular jids.
*/
public class BSGroupNode extends DefaultMutableTreeNode {
protected String name = null;
protected TreeMap jidNodes = null;
protected DefaultMutableTreeNode node = null;
/** Constructor */
public BSGroupNode(String name) {
this.name = name;
jidNodes = new TreeMap();
}
/** Returns text displayed in tree */
public String toString() {
return name;
}
/** Returns name of group */
public String getName() {
return name;
}
/** Returns hash code used by tree */
public int hashCode() {
return name.hashCode();
}
/** Adds a node for given jid item into the group */
public void addItem(BSJIDItem ji) {
DefaultMutableTreeNode jidNode = new DefaultMutableTreeNode(ji);
ji.addNode(jidNode);
add(jidNode);
jidNodes.put(jidNode.toString(), jidNode);
}
/** Adds a node for transport into the group */
public void addItem(BSComponentNode node) {
add(node);
jidNodes.put(node.toString(), node);
}
/** Sorts the jid nodes inside the group */
public void sortNodes() {
// doesn't sort for "my resources" group
if (getChildAt(0) instanceof BSResourceNode) return;
this.removeAllChildren();
TreeMap tmpMap = (TreeMap) jidNodes.clone();
while (!tmpMap.isEmpty()) {
Object o = tmpMap.firstKey();
this.add((DefaultMutableTreeNode)jidNodes.get(o));
tmpMap.remove(o);
}
}
public boolean equals(Object o) {
if (o == null || !(o instanceof BSGroupNode)) return false;
String otherName = ((BSGroupNode)o).name;
return ((name != null && name.equals(otherName)) ||
(name == null && otherName == null));
}
} // BSGroupNode
/**
* <code>BSJIDItem</code> holds information needed for displaying a jid in
* tree. This record appears in the tree only once for particular jid.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -