Beispiel #1
0
  /**
   * Gets the avatar of a specific <tt>MetaContact</tt> in the form of an <tt>ImageIcon</tt> value.
   *
   * @param isSelected indicates if the contact is selected
   * @param width the desired icon width
   * @param height the desired icon height
   * @return an <tt>ImageIcon</tt> which represents the avatar of the specified <tt>MetaContact</tt>
   */
  public ImageIcon getAvatar(boolean isSelected, int width, int height) {
    byte[] avatarBytes = metaContact.getAvatar(true);

    // If there's no avatar we have nothing more to do here.
    if ((avatarBytes == null) || (avatarBytes.length <= 0)) {
      if (!subscribed) {
        return ImageUtils.getScaledRoundedIcon(
            ImageLoader.getImage(ImageLoader.UNAUTHORIZED_CONTACT_PHOTO), width, height);
      }

      return null;
    }

    // If the cell is selected we return a zoomed version of the avatar
    // image.
    if (isSelected) return ImageUtils.getScaledRoundedIcon(avatarBytes, width, height);

    // In any other case try to get the avatar from the cache.
    Object[] avatarCache = (Object[]) metaContact.getData(AVATAR_DATA_KEY);
    ImageIcon avatar = null;

    if ((avatarCache != null) && (avatarCache[0] == avatarBytes))
      avatar = (ImageIcon) avatarCache[1];

    // If the avatar isn't available or it's not up-to-date, create it.
    if (avatar == null) {
      avatar = ImageUtils.getScaledRoundedIcon(avatarBytes, width, height);
    }

    // Cache the avatar in case it has changed.
    if (avatarCache == null) {
      if (avatar != null) metaContact.setData(AVATAR_DATA_KEY, new Object[] {avatarBytes, avatar});
    } else {
      avatarCache[0] = avatarBytes;
      avatarCache[1] = avatar;
    }

    return avatar;
  }
  /**
   * Set the image of the peer
   *
   * @param image new image
   */
  public void setPeerImage(byte[] image) {
    // If the image is still null we try to obtain it from one of the
    // available contact sources.
    if (image == null || image.length <= 0) {
      GuiActivator.getContactList().setSourceContactImage(peerName, photoLabel, 100, 100);
    } else {
      peerImage = ImageUtils.getScaledRoundedIcon(image, 100, 100);
      if (peerImage == null) peerImage = getPhotoLabelIcon();

      if (!SwingUtilities.isEventDispatchThread()) {
        SwingUtilities.invokeLater(
            new Runnable() {
              public void run() {
                photoLabel.setIcon(peerImage);
                photoLabel.repaint();
              }
            });
      } else {
        photoLabel.setIcon(peerImage);
        photoLabel.repaint();
      }
    }
  }