Package net.java.sip.communicator.impl.gui.main.chat.conference

Source Code of net.java.sip.communicator.impl.gui.main.chat.conference.ChatContactCellRenderer

/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/

package net.java.sip.communicator.impl.gui.main.chat.conference;

import java.awt.*;
import java.util.*;

import javax.swing.*;

import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.main.chat.*;
import net.java.sip.communicator.impl.gui.main.contactlist.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.ServerStoredDetails.BinaryDetail;
import net.java.sip.communicator.service.protocol.ServerStoredDetails.GenericDetail;
import net.java.sip.communicator.util.*;

/**
* The <tt>ChatContactCellRenderer</tt> is the renderer for the chat room
* contact list.
*
* @author Yana Stamcheva
* @author Valentin Martinet
* @author Lubomir Marinov
*/
public class ChatContactCellRenderer
    extends ContactListCellRenderer
{
    /**
     * Implements the <tt>ListCellRenderer</tt> method. Returns this panel that
     * has been configured to display a chat contact.
     *
     * @param list the source list
     * @param value the value of the current cell
     * @param index the index of the current cell in the source list
     * @param isSelected indicates if this cell is selected
     * @param cellHasFocus indicates if this cell is focused
     *
     * @return this panel
     */
    @Override
    public Component getListCellRendererComponentJList list,
                                                    Object value,
                                                    int index,
                                                    boolean isSelected,
                                                    boolean cellHasFocus)
    {
        this.index = index;

        this.rightLabel.setIcon(null);

        final ChatContact<?> chatContact = (ChatContact<?>) value;

        if(chatContact == null)
            return this;

        ChatRoomMember member = null;

        if (chatContact.getDescriptor() instanceof ChatRoomMember)
            member = (ChatRoomMember) chatContact.getDescriptor();

        this.setPreferredSize(new Dimension(20, 30));

        String displayName;

//        if(member != null && member.getContact() != null)
//        {
//            displayName = member.getContact().getDisplayName();
//        }
//        else
        displayName = chatContact.getName();

        if (displayName == null || displayName.length() < 1)
        {
            displayName = GuiActivator.getResources()
                .getI18NString("service.gui.UNKNOWN");
        }

        this.nameLabel.setFont(this.getFont().deriveFont(Font.PLAIN));
        this.nameLabel.setText(displayName);

        if(member != null)
        {
            ChatRoomMemberRole memberRole = member.getRole();

            if(memberRole != null)
                this.nameLabel.setIcon(
                    ChatContactRoleIcon.getRoleIcon(memberRole));
        }

        if (contactForegroundColor != null)
            this.nameLabel.setForeground(contactForegroundColor);

        this.setBorder(BorderFactory.createEmptyBorder(1, 5, 1, 1));

        ImageIcon avatar = chatContact.getAvatar();

        if (avatar != null)
            this.rightLabel.setIcon(avatar);
        else if (member != null)
        {
            ChatRoom memberChatRoom = member.getChatRoom();
            ProtocolProviderService protocolProvider
                = memberChatRoom.getParentProvider();

            if(chatContact.getName().equals(
                    memberChatRoom.getUserNickname()))
            {
                // Try to retrieve local user avatar:
                OperationSetServerStoredAccountInfo opSet
                    = protocolProvider.getOperationSet(
                        OperationSetServerStoredAccountInfo.class);

                if (opSet != null)
                {
                    Iterator<GenericDetail> itr;

                    try
                    {
                        itr = opSet.getAllAvailableDetails();
                    }
                    catch (IllegalStateException isex)
                    {
                        /*
                         * It may be wrong to try to utilize the OperationSet
                         * when the account is logged out but this is painting
                         * we're doing here i.e. we'll screw the whole window
                         * up.
                         */
                        itr = null;
                    }

                    if (itr != null)
                        while(itr.hasNext())
                        {
                            GenericDetail detail = itr.next();

                            if(detail instanceof BinaryDetail)
                            {
                                BinaryDetail bin = (BinaryDetail)detail;
                                byte[] binBytes = bin.getBytes();

                                if(binBytes != null)
                                    this.rightLabel.setIcon(
                                        ImageUtils.getScaledRoundedIcon(
                                            binBytes, 25, 25));
                                break;
                            }
                        }
                }

                ChatRoomMemberRole role;

                /*
                 * XXX I don't know why ChatRoom#getUserRole() would not be
                 * implemented when ChatRoomMember#getRole() is or why the
                 * former would exist at all as anything else but as a
                 * convenience delegating to the latter, but IRC seems to be the
                 * case and the whole IRC channel painting fails because of it.
                 */
                try
                {
                    role = memberChatRoom.getUserRole();
                }
                catch (UnsupportedOperationException uoex)
                {
                    role = member.getRole();
                }

                if (role != null)
                    this.nameLabel.setIcon(
                        ChatContactRoleIcon.getRoleIcon(role));
            }
            else
            {
                // Try to retrieve participant's avatar.
                OperationSetPersistentPresence opSet
                    = protocolProvider.getOperationSet(
                    OperationSetPersistentPresence.class);

                if (opSet != null)
                {
                    Contact c
                        = opSet.findContactByID(member.getContactAddress());

                    if (c != null)
                    {
                        byte[] cImage = c.getImage();

                        if (cImage != null)
                            this.rightLabel.setIcon(
                                    ImageUtils.getScaledRoundedIcon(
                                            cImage, 25, 25));
                    }
                }
            }
        }

        // We should set the bounds of the cell explicitly in order to make
        // getComponentAt work properly.
        int listWidth = list.getWidth();

        this.setBounds(0, 0, listWidth - 2, 30);
        this.nameLabel.setBounds(0, 0, listWidth - 28, 17);
        this.rightLabel.setBounds(listWidth - 28, 0, 25, 30);

        this.isLeaf = true;
        this.isSelected = isSelected;

        return this;
    }
}
TOP

Related Classes of net.java.sip.communicator.impl.gui.main.chat.conference.ChatContactCellRenderer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.