package org.limewire.ui.swing.friends.chat;
import java.awt.Color;
import java.awt.Font;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.jdesktop.application.Resource;
import org.limewire.friend.api.FriendPresence;
import org.limewire.ui.swing.components.IconButton;
import org.limewire.ui.swing.components.PopupCloseButton;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.ResizeUtils;
import com.google.inject.Inject;
import net.miginfocom.swing.MigLayout;
/**
* Header in the ChatFrame. Contains the minimize icon and information
* about the currently selected chat if a conversation is open.
*/
class ChatHeader {
@Resource private Font textFont;
@Resource private Color textColor;
@Resource private Color background;
@Resource private Icon availableIcon;
@Resource private Icon doNotDisturbIcon;
@Resource private Icon awayIcon;
private JPanel panel;
private JLabel friendNameLabel;
@Inject
public ChatHeader(MinimizeAction minimizeAction) {
GuiUtils.assignResources(this);
panel = new JPanel(new MigLayout("insets 0, gap 0, fill"));
panel.setBackground(background);
ResizeUtils.forceHeight(panel, 21);
friendNameLabel = new JLabel();
friendNameLabel.setForeground(textColor);
friendNameLabel.setFont(textFont);
IconButton closeButton = new PopupCloseButton(minimizeAction);
panel.add(friendNameLabel, "gapleft 4, gapright 2, wmax 360, push");
panel.add(closeButton, "gapright 3");
}
public JComponent getComponent() {
return panel;
}
/**
* Removes any friend state from the header of the chat frame.
*/
public void clearFriend() {
friendNameLabel.setText("");
friendNameLabel.setIcon(null);
}
/**
* Sets the friend who the user is currently chatting with. This friend's
* information is displayed in the header of the chat frame.
*/
public void setFriend(ChatFriend friend) {
friendNameLabel.setText(getFriendText(friend));
friendNameLabel.setIcon(getIcon(friend.getMode()));
}
/**
* Returns the icon for the current state of the selected friend.
*/
private Icon getIcon(FriendPresence.Mode mode) {
switch(mode) {
case available:
return availableIcon;
case dnd:
return doNotDisturbIcon;
default:
return awayIcon;
}
}
/**
* Returns the Name of the current friend along with any status message if
* one is set.
*/
private String getFriendText(ChatFriend chatFriend) {
if(chatFriend.getStatus() != null && chatFriend.getStatus().length() > 0) {
return chatFriend.getName() + " - " + chatFriend.getStatus();
} else {
return chatFriend.getName();
}
}
}