package com.kolakcc.loljclient.view.ui.renderer; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; import javax.swing.border.EmptyBorder; import org.jivesoftware.smack.RosterEntry; import org.jivesoftware.smack.packet.Presence; import com.kolakcc.loljclient.model.XMPPWrapper; import com.kolakcc.loljclient.util.FontUtils; import com.kolakcc.loljclient.util.StatusIcon; public class FriendListItemRenderer implements ListCellRenderer<RosterEntry> { public Component getListCellRendererComponent( JList<? extends RosterEntry> list, RosterEntry value, int index, boolean isSelected, boolean cellHasFocus) { JPanel ret = new JPanel(new BorderLayout()); ret.setOpaque(false); ret.setBorder(new EmptyBorder(0,0,5,0)); Presence p = XMPPWrapper.getConnection().getRoster().getPresence(value.getUser().split("/")[0]); JLabel statusIconLabel = new JLabel(StatusIcon.getOffline()); statusIconLabel.setBorder(new EmptyBorder(0,5,0,5)); JLabel nameLabel = new JLabel(value.getName()); nameLabel.setFont(FontUtils.emSize(nameLabel.getFont(), Font.BOLD, 1)); ret.add(nameLabel,BorderLayout.CENTER); String statusMsg = "<no message>"; if (p.getStatus() != null) { Matcher statusMatcher = Pattern.compile("<statusMsg>(.+?)</statusMsg>").matcher(p.getStatus()); while (statusMatcher.find()) { statusMsg = statusMatcher.group(1); } } statusIconLabel.setIcon(StatusIcon.fromPresence(p)); ret.add(statusIconLabel,BorderLayout.WEST); if (!p.getType().equals(Presence.Type.unavailable)) { JLabel statusLabel = new JLabel(statusMsg); statusLabel.setFont(FontUtils.emSize(statusLabel.getFont(), Font.PLAIN, 0.7)); statusLabel.setForeground(Color.DARK_GRAY); ret.add(statusLabel,BorderLayout.SOUTH); } return ret; } }