/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.java.sip.communicator.impl.gui.main.chat;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import net.java.sip.communicator.impl.gui.*;
import net.java.sip.communicator.impl.gui.main.chat.conference.*;
import net.java.sip.communicator.impl.gui.main.contactlist.*;
import net.java.sip.communicator.impl.gui.utils.*;
import net.java.sip.communicator.plugin.desktoputil.*;
import net.java.sip.communicator.util.*;
/**
* The photo label corresponding to the current chat.
*/
public class ContactPhotoPanel extends JLayeredPane
{
private final JLabel photoLabel = new JLabel();
private final JLabel addContactButton = new JLabel(
new ImageIcon(ImageLoader.getImage(
ImageLoader.ADD_CONTACT_CHAT_ICON)));
private ImageIcon tooltipIcon;
private ChatSession chatSession;
/**
* Creates an instance of ContactPhotoPanel by specifying the
* parent window where the photo panel will be added.
*
* @param parentWindow the parent window
*/
public ContactPhotoPanel()
{
this.setLayout(null);
this.setPreferredSize(
new Dimension( ChatContact.AVATAR_ICON_WIDTH + 10,
ChatContact.AVATAR_ICON_HEIGHT));
this.add(photoLabel, 1);
this.photoLabel.setBounds(5, 0,
ChatContact.AVATAR_ICON_WIDTH,
ChatContact.AVATAR_ICON_HEIGHT);
addContactButton.setBounds(
ChatContact.AVATAR_ICON_WIDTH - 6,
ChatContact.AVATAR_ICON_HEIGHT - 16,
16, 16);
this.addContactButton.addMouseListener(new MouseAdapter()
{
@Override
public void mousePressed(MouseEvent e)
{
if(chatSession != null)
{
AddContactDialog dialog
= new AddContactDialog(
GuiActivator.getUIService().getMainFrame());
dialog.setSelectedAccount(
chatSession.getCurrentChatTransport()
.getProtocolProvider());
// this is the current contact address we want to add
dialog.setContactAddress(
chatSession.getPersistableAddress()
);
dialog.setVisible(true);
}
}
});
}
/**
* Sets the given chatSession parameters to this contact
* photo label.
*
* @param chatSession The ChatSession to set.
*/
public void setChatSession(ChatSession chatSession)
{
this.chatSession = chatSession;
byte[] chatAvatar = chatSession.getChatAvatar();
if (chatAvatar != null && chatAvatar.length > 0)
{
this.tooltipIcon = new ImageIcon(chatAvatar);
ImageIcon contactPhotoIcon
= ImageUtils.getScaledRoundedIcon(chatAvatar,
ChatContact.AVATAR_ICON_WIDTH ,
ChatContact.AVATAR_ICON_HEIGHT);
if (contactPhotoIcon != null)
this.photoLabel.setIcon(contactPhotoIcon);
}
else
{
// Even if we don't have the icon of the current contact we
// should remove the one of the previously selected contact.
this.photoLabel.setIcon(null);
this.tooltipIcon = null;
}
// Need to set the tooltip in order to have createToolTip called
// from the TooltipManager.
this.setToolTipText("");
// if its multichat don't show addContactButton, cause
// it sa mutlichat room which
// cannot be saved with add contact dialog
if (!chatSession.isDescriptorPersistent()
&& !(chatSession instanceof ConferenceChatSession)
&& !ConfigurationUtils.isAddContactDisabled()
&& !(chatSession.getPersistableAddress() == null))
this.add(addContactButton, 0);
else
this.remove(addContactButton);
this.revalidate();
this.repaint();
}
/**
* Creates a tooltip.
* @return the created tool tip
*/
@Override
public JToolTip createToolTip()
{
ExtendedTooltip tip = new ExtendedTooltip(true);
if (tooltipIcon != null)
tip.setImage(tooltipIcon);
tip.setTitle(chatSession.getChatName());
Iterator transports = chatSession.getChatTransports();
while (transports.hasNext())
{
ChatTransport transport = transports.next();
ImageIcon protocolStatusIcon;
if (transport.getStatus() != null)
{
protocolStatusIcon
= new ImageIcon(transport.getStatus().getStatusIcon());
}
else
protocolStatusIcon = new ImageIcon();
String transportAddress = transport.getName();
tip.addLine( protocolStatusIcon,
transportAddress);
}
tip.setComponent(this);
return tip;
}
/**
* Returns the string to be used as the tooltip for event. We
* don't really use this string, but we need to return different string
* each time in order to make the TooltipManager change the tooltip over
* the different cells in the JList.
*
* @param event the MouseEvent
* @return the string to be used as the tooltip for event.
*/
@Override
public String getToolTipText(MouseEvent event)
{
return chatSession.getChatName();
}
}