statusbar.java.svn-base

来自「开源项目openfire的完整源程序」· SVN-BASE 代码 · 共 552 行 · 第 1/2 页

SVN-BASE
552
字号

        // Add change message
        final JMenuItem changeStatusMenu = new JMenuItem(Res.getString("menuitem.set.status.message"), SparkRes.getImageIcon(SparkRes.BLANK_IMAGE));
        popup.addSeparator();


        popup.add(changeStatusMenu);
        changeStatusMenu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                CustomMessages.addCustomMessage();
            }
        });


        Action editMessagesAction = new AbstractAction() {
            public void actionPerformed(ActionEvent actionEvent) {
                CustomMessages.editCustomMessages();
            }
        };

        editMessagesAction.putValue(Action.NAME, Res.getString("menuitem.edit.status.message"));
        popup.add(editMessagesAction);

        popup.show(statusPanel, 0, statusPanel.getHeight());
    }

    public void changeAvailability(final Presence presence) {
        if (!presence.isAvailable()) {
            return;
        }

        if ((presence.getMode() == currentPresence.getMode()) && (presence.getType() == currentPresence.getType()) && (presence.getStatus().equals(currentPresence.getStatus()))) {
            PacketExtension pe = presence.getExtension("x", "vcard-temp:x:update");
            if (pe != null) {
                // Update VCard
                loadVCard();
            }
            return;
        }

        final Runnable changePresenceRunnable = new Runnable() {
            public void run() {

                currentPresence = presence;

                setStatus(presence.getStatus());
                Icon icon = PresenceManager.getIconFromPresence(presence);
                if (icon != null) {
                    statusPanel.setIcon(icon);
                }
            }
        };

        SwingUtilities.invokeLater(changePresenceRunnable);
    }

    /**
     * Populates the current Dnd List.
     */
    private void buildStatusItemList() {
        for (Presence presence : PresenceManager.getPresences()) {
            Icon icon = PresenceManager.getIconFromPresence(presence);
            StatusItem item = new StatusItem(presence, icon);
            statusList.add(item);
        }

        final Icon availableIcon = PresenceManager.getIconFromPresence(new Presence(Presence.Type.available));

        // Set default presence icon (Avaialble)
        statusPanel.setIcon(availableIcon);
    }


    public Collection getStatusList() {
        return statusList;
    }

    public Presence getPresence() {
        return currentPresence;
    }

    public StatusItem getStatusItem(String label) {
        Iterator iter = statusList.iterator();
        while (iter.hasNext()) {
            StatusItem item = (StatusItem)iter.next();
            if (item.getText().equals(label)) {
                return item;
            }
        }
        return null;
    }

    public void paintComponent(Graphics g) {
        double scaleX = getWidth() / (double)backgroundImage.getWidth(null);
        double scaleY = getHeight() / (double)backgroundImage.getHeight(null);
        AffineTransform xform = AffineTransform.getScaleInstance(scaleX, scaleY);
        ((Graphics2D)g).drawImage(backgroundImage, xform, this);
    }


    public void loadVCard() {
        final Runnable loadVCard = new Runnable() {
            public void run() {
                VCard vcard = SparkManager.getVCardManager().getVCard();
                updatVCardInformation(vcard);
            }
        };

        TaskEngine.getInstance().submit(loadVCard);
    }

    private void updatVCardInformation(final VCard vCard) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                if (vCard.getError() == null) {
                    String firstName = vCard.getFirstName();
                    String lastName = vCard.getLastName();
                    String nickname = vCard.getNickName();
                    if (ModelUtil.hasLength(firstName) && ModelUtil.hasLength(lastName)) {
                        setNickname(firstName + " " + lastName);
                    }
                    else if (ModelUtil.hasLength(firstName)) {
                        setNickname(firstName);
                    }
                    else if (ModelUtil.hasLength(nickname)) {
                        setNickname(nickname);
                    }
                    else {
                        nickname = SparkManager.getSessionManager().getUsername();
                        setNickname(nickname);
                    }
                }
                else {
                    String nickname = SparkManager.getSessionManager().getUsername();
                    setNickname(nickname);
                    return;
                }


                byte[] avatarBytes = null;
                try {
                    avatarBytes = vCard.getAvatar();
                }
                catch (Exception e) {
                    Log.error("Cannot retrieve avatar bytes.", e);
                }


                if (avatarBytes != null) {
                    try {
                        ImageIcon avatarIcon = new ImageIcon(avatarBytes);
                        avatarIcon = VCardManager.scale(avatarIcon);
                        imageLabel.setIcon(avatarIcon);
                        imageLabel.setBorder(BorderFactory.createBevelBorder(0, Color.white, Color.lightGray));
                        imageLabel.invalidate();
                        imageLabel.validate();
                        imageLabel.repaint();
                    }
                    catch (Exception e) {
                        // no issue
                    }
                }
                else {
                    imageLabel.setIcon(null);
                    imageLabel.setBorder(null);
                    imageLabel.invalidate();
                    imageLabel.validate();
                    imageLabel.repaint();
                }
            }
        });

    }

    public static Presence copyPresence(Presence presence) {
        return new Presence(presence.getType(), presence.getStatus(), presence.getPriority(), presence.getMode());
    }

    /**
     * Return the nickname Component used to display the users profile name.
     *
     * @return the label.
     */
    public JLabel getNicknameLabel() {
        return nicknameLabel;
    }

    private class StatusPanel extends JPanel {
        private JLabel iconLabel;
        private JLabel statusLabel;

        public StatusPanel() {
            super();

            setOpaque(false);

            iconLabel = new JLabel();
            statusLabel = new JLabel();

            setLayout(new GridBagLayout());

            // Remove padding from icon label
            iconLabel.setIconTextGap(0);

            add(iconLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
            add(statusLabel, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 2, 0, 0), 0, 0));

            statusLabel.setFont(new Font("Dialog", Font.PLAIN, 11));
            statusLabel.setIcon(SparkRes.getImageIcon(SparkRes.DOWN_ARROW_IMAGE));
            statusLabel.setHorizontalTextPosition(JLabel.LEFT);

            setOpaque(false);

            final Border border = BorderFactory.createEmptyBorder(2, 2, 2, 2);
            setBorder(border);


            statusLabel.addMouseListener(new MouseAdapter() {
                public void mouseReleased(MouseEvent e) {
                    showPopup(e);
                }

                public void mouseEntered(MouseEvent e) {
                    setCursor(GraphicUtils.HAND_CURSOR);

                    setBorder(BorderFactory.createBevelBorder(0));
                }

                public void mouseExited(MouseEvent e) {
                    setCursor(GraphicUtils.DEFAULT_CURSOR);
                    setBorder(border);
                }

                public void mousePressed(MouseEvent e) {
                    setBorder(BorderFactory.createBevelBorder(1));
                }
            });

        }

        public void setStatus(String status) {
            int length = status.length();
            String visualStatus = status;
            if (length > 30) {
                visualStatus = status.substring(0, 27) + "...";
            }

            statusLabel.setText(visualStatus);
            statusLabel.setToolTipText(status);
        }

        public void setIcon(Icon icon) {
            iconLabel.setIcon(icon);
        }
    }

    public void setBackgroundImage(Image image) {
        this.backgroundImage = image;
    }

    public void setDescriptiveText(String text) {
        descriptiveLabel.setText(text);
    }

    public Dimension getPreferredSize() {
        Dimension dim = super.getPreferredSize();
        dim.width = 0;
        return dim;
    }


    public void vcardChanged(VCard vcard) {
        updatVCardInformation(vcard);
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?