📄 bsrostertreeview.java
字号:
*/
protected void updateRoster() {
if (!mainFrame.isConnected()) {
setOfflineTree();
return;
}
// saves current expansion state
Iterator allRosterGroups = (rosterBean != null)?
rosterBean.getGroups() :
new TreeSet().iterator();
tree.saveState(allRosterGroups);
// clears roster
if (rosterBean == null) return;
groups.clear();
items.clear();
root.removeAllChildren();
// IX panels stuff
//relations = IXPrefsIO.readRelations2(BSMainFrame.ixPropsPath);
// end of IX panels stuff
// adds my resources
addMyResources();
// for all entries in roster
Enumeration entries = rosterBean.entries();
while (entries != null && entries.hasMoreElements()) {
RosterItem ri = (RosterItem) entries.nextElement();
JID jid = ri.getJID();
if (jid == null) continue;
// checks if that is a transport / server component
boolean isTransport = (jid.getUsername() == null
|| jid.getUsername().equals(""));
BSPresenceInfo pi = presenceBean.getPresence(jid);
if (pi == null)
pi = new BSPresenceInfo(jid, false, null, null);
boolean messageWaiting = messengerBean.isMessageWaiting(jid);
if (onlyOnline && !messageWaiting && !pi.isOnline() && !isTransport)
continue;
// creates JID roster tree node
BSJIDItem ji = null;
BSComponentNode cn = null;
if (!isTransport) {
ji = new BSJIDItem(ri, pi, messageWaiting);
//String str = BSPresenceBean.getJIDHashString(jid, false);
JID key = jid.getSimpleJID();
//items.put(str, ji);
items.put(key, ji);
}
else
cn = new BSComponentNode(ri, pi);
// adds it into all groups
Enumeration itemGroups = ri.enumerateGroups();
// if no group
if (itemGroups == null || !itemGroups.hasMoreElements()) {
if (!isTransport) addRosterItem(ji, BSMainFrame.NO_GROUP_NAME);
else addRosterItem(cn, BSMainFrame.NO_GROUP_NAME);
}
// for all groups of roster element
while (itemGroups != null && itemGroups.hasMoreElements()) {
String gr = (String) itemGroups.nextElement();
if (!isTransport) addRosterItem(ji, gr);
else addRosterItem(cn, gr);
}
// IX panels stuff
/*String jidStr = BSPresenceBean.getJIDHashString(jid, false);
Object category = relations.get(jidStr);
if (category != null)
addRosterItem(ji, "[IX] " + (String)category);*/
// end of IX panels stuff
if (!isTransport) {
// adds all resources to the jid node
ji.updateResources();
// updates unread message flag
ji.updateMessageWaiting();
}
}
// sorts groups
sortGroups();
//tree.repaint();
model.reload();
// restores expansion state
tree.restoreState();
// expands all groups
//expandAllGroups();
}
protected void setOfflineTree() {
groups.clear();
items.clear();
root.removeAllChildren();
//BSGroupNode group = new BSGroupNode(myResGroupName);
//root.add(group);
//groups.put(myResGroupName, group);
BSPresenceInfo pi = new BSPresenceInfo(new JID("jid","server","Offline"), false, null, null);
BSResourceNode resNode = new BSResourceNode(pi);
//group.add(resNode);
root.add(resNode);
model.reload();
//TreePath path = new TreePath((group).getPath());
//tree.expandPath(path);
}
/** Adds given jid item into the group */
protected void addRosterItem(BSJIDItem ji, String groupName) {
BSGroupNode group = (BSGroupNode) groups.get(groupName);
if (group == null) {
group = new BSGroupNode(groupName);
root.add(group);
groups.put(groupName, group);
}
group.addItem(ji);
}
/** Adds given transport item into the group */
protected void addRosterItem(BSComponentNode node, String groupName) {
BSGroupNode group = (BSGroupNode) groups.get(groupName);
if (group == null) {
group = new BSGroupNode(groupName);
root.add(group);
groups.put(groupName, group);
}
group.addItem(node);
}
/** Sorts groups in roster tree */
protected void sortGroups() {
root.removeAllChildren();
TreeMap tmpMap = (TreeMap) groups.clone();
while (!tmpMap.isEmpty()) {
Object o = tmpMap.firstKey();
BSGroupNode gr = (BSGroupNode)tmpMap.get(o);
root.add(gr);
gr.sortNodes();
tmpMap.remove(o);
}
}
/** Expands all groups */
protected void expandAllGroups() {
Enumeration nodes = root.children();
while (nodes.hasMoreElements()) {
Object o = nodes.nextElement();
if (o instanceof BSGroupNode) {
TreePath path = new TreePath(((BSGroupNode)o).getPath());
tree.expandPath(path);
}
}
}
/** Collapses all groups */
protected void collapseAllGroups() {
Enumeration nodes = root.children();
while (nodes.hasMoreElements()) {
Object o = nodes.nextElement();
if (o instanceof BSGroupNode) {
TreePath path = new TreePath(((BSGroupNode)o).getPath());
tree.collapsePath(path);
}
}
}
/** Adds my resources into the tree */
protected void addMyResources() {
// *** get all your presences from new JID(BSCore.username, BSCore.server) ***
//JID myJID = new JID(BSCore.username, BSCore.server, BSCore.resource);
//if (myJID == null) return;
Enumeration pis = presenceBean.getMyResourcesPresences();
BSGroupNode group = null;
if (pis.hasMoreElements()) {
group = (BSGroupNode) groups.get(myResGroupName);
if (group == null) {
group = new BSGroupNode(myResGroupName);
root.add(group);
groups.put(myResGroupName, group);
}
else
group.removeAllChildren();
}
while (pis.hasMoreElements()) {
BSPresenceInfo pi = (BSPresenceInfo) pis.nextElement();
if (pi.isOnline()) {
BSResourceNode resNode = new BSResourceNode(pi);
resNode.updateMessageWaiting();
group.add(resNode);
}
}
}
/** <code>BSMessageListener</code> function - update unread msg flag. */
public void plainMessageReceived(Message msg) {
if (msg == null) return;
updateAfterMessageChange(msg.getFromAddress());
}
/** <code>BSMessageListener</code> function - update unread msg flag. */
public void chatMessageReceived(Message msg) {
if (msg == null) return;
updateAfterMessageChange(msg.getFromAddress());
}
/** <code>BSMessageListener</code> function - update unread msg flag. */
public void headlineMessageReceived(Message msg) {
if (msg == null) return;
updateAfterMessageChange(msg.getFromAddress());
}
/** <code>BSMessageListener</code> function - update unread msg flag. */
public void groupchatMessageReceived(Message msg) {
if (msg == null) return;
updateAfterMessageChange(msg.getFromAddress());
}
/** <code>BSMessageListener</code> function - update unread msg flag. */
public void messageRead(Message msg) {
if (msg == null) return;
updateAfterMessageChange(msg.getFromAddress());
}
/** <code>BSMessageListener</code> function - empty implementation. */
public void messageError(JID toAddress, String errType, String error) { }
/** <code>BSMessageListener</code> function - empty implementation. */
public void messageError(Message msg) { }
/** Updates unread msg flag for jid */
public void updateAfterMessageChange(JID fromAddress) {
if (fromAddress == null) return;
//String str = BSPresenceBean.getJIDHashString(fromAddress, false);
JID key = fromAddress.getSimpleJID();
//BSJIDItem i = (BSJIDItem) items.get(str);
BSJIDItem i = (BSJIDItem) items.get(key);
if (i == null) {
Iterator allRosterGroups = (rosterBean != null)?
rosterBean.getGroups() :
new TreeSet().iterator();
tree.saveState(allRosterGroups);
addMyResources();
model.reload();
//tree.expandRow(0);
tree.restoreState();
}
else
i.updateMessageWaiting();
tree.repaint();
}
/** <code>MouseListener</code> function - catches double-clicks. */
public void mouseClicked(MouseEvent e) {
// handles only double clicks on JID nodes
if (e.getClickCount() == 2) {
if (!mainFrame.isConnected())
return;
// hack to not change expansion state
TreePath curSelPath = tree.getSelectionPath();
if (tree.isExpanded(curSelPath)) tree.collapsePath(curSelPath);
else tree.expandPath(curSelPath);
openChatWindow();
tree.repaint();
}
}
/** <code>MouseListener</code> function - catches popup clicks. */
public void mousePressed(MouseEvent e) {
maybeShowPopup(e);
}
/** <code>MouseListener</code> function - catches popup clicks. */
public void mouseReleased(MouseEvent e) {
maybeShowPopup(e);
}
/** <code>MouseListener</code> function - empty implementation. */
public void mouseEntered(MouseEvent e) { }
/** <code>MouseListener</code> function - empty implementation. */
public void mouseExited(MouseEvent e) { }
/**
* Called when open chat is selected. Open chat with selected jid.
*/
protected void openChatWindow() {
// gets selected node
DefaultMutableTreeNode node = (DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
if (node == null) return;
// if jid node
if (node.getUserObject() instanceof BSJIDItem) {
// opens chat
BSJIDItem i = (BSJIDItem) node.getUserObject();
JID jid = i.getJID();
mainFrame.openChatWindow(jid, true, true);
i.updateMessageWaiting();
}
// if resource node
else if (node instanceof BSResourceNode) {
// opens chat
BSResourceNode resNode = (BSResourceNode) node;
JID jid = resNode.getJID();
mainFrame.openChatWindow(jid, true, true);
DefaultMutableTreeNode parentNode = (DefaultMutableTreeNode) resNode.getParent();
if (parentNode != null &&
parentNode.getUserObject() instanceof BSJIDItem) {
((BSJIDItem) parentNode.getUserObject()).updateMessageWaiting();
}
}
else
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -