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

📄 bsrostertreeview.java

📁 一款即时通讯软件
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
                 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 + -