package de.uni_passau.fim.pkjab.view; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.Timer; import de.uni_passau.fim.pkjab.model.Contact; import de.uni_passau.fim.pkjab.util.Jid; import de.uni_passau.fim.pkjab.util.listener.ContactListener; import de.uni_passau.fim.pkjab.util.listener.ContactStateEvent; import de.uni_passau.fim.pkjab.util.listener.MessageReceivedEvent; public class ContactPanel extends JButton implements ContactListener { private final Contact contact; private MessageFrame messageFrame; private static final String STATUS_IS = "Status: "; private static final String ICON_MESSAGE = PKjabToolkit.ICON_DIR + "message.png"; private static final String ICON_BLANK = PKjabToolkit.ICON_DIR + "blank.png"; protected ImageIcon typingIcon; protected ImageIcon messageIcon; protected ImageIcon statusIcon; protected ImageIcon blankIcon; private static final int timerDelay = 1000; private boolean isStatusShowing = true; private JLabel statusLabel; private JLabel nickLabel; private Timer blinkTimer; public ContactPanel(final Contact contact, final String userNick) { super(); this.contact = contact; contact.addContactListener(this); readImageIcons(); createLabels(); createLayout(); initTimer(); defineAction(); messageFrame = new MessageFrame(contact, userNick); } private void readImageIcons() { statusIcon = (ImageIcon) PKjabToolkit.getStatusIcons().get(contact.getState()); messageIcon = PKjabToolkit.getImageIcon(ICON_MESSAGE); blankIcon = PKjabToolkit.getImageIcon(ICON_BLANK); } private void createLabels() { statusLabel = new JLabel(statusIcon); nickLabel = new JLabel(contact.getNick()); } private void createLayout() { setAlignmentX(Component.LEFT_ALIGNMENT); setLayout(new BorderLayout(5, 1)); add(statusLabel, BorderLayout.LINE_START); add(nickLabel, BorderLayout.CENTER); String statusText = contact.getStateText(); if (statusText == null || statusText == "") statusText = contact.getState().toString(); setToolTipText(STATUS_IS + statusText); } private void initTimer() { blinkTimer = new Timer(timerDelay, new ActionListener() { public void actionPerformed(ActionEvent e) { if (isStatusShowing) statusLabel.setIcon(messageIcon); else statusLabel.setIcon(statusIcon); isStatusShowing = !isStatusShowing; } }); blinkTimer.setInitialDelay(0); } private void defineAction() { addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (blinkTimer.isRunning()) blinkTimer.stop(); statusLabel.setIcon(statusIcon); if (!messageFrame.isShowing()) messageFrame.setVisible(true); } }); } public void contactStateChanged(ContactStateEvent e) { statusIcon = (ImageIcon) PKjabToolkit.getStatusIcons().get(e.getState()); statusLabel.setIcon(statusIcon); setToolTipText(STATUS_IS + contact.getStateText()); nickLabel.setText(contact.getNick()); } public void messageReceived(MessageReceivedEvent e) { if (!messageFrame.isShowing()) blinkTimer.start(); } }