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

📄 bsmapview.java

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