package org.limewire.ui.swing.images; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.ListCellRenderer; import javax.swing.border.Border; import net.miginfocom.swing.MigLayout; import org.jdesktop.application.Resource; import org.limewire.core.api.library.LocalFileItem; import org.limewire.ui.swing.library.table.RemoveButton; import org.limewire.ui.swing.util.GuiUtils; import com.google.inject.Inject; /** * Renderers an image with a border. */ public class ImageCellRenderer extends JPanel implements ListCellRenderer { protected Border border; private final ThumbnailManager thumbnailManager; private final ImageRenderer imageRenderer; private final RemoveButton removeButton; @Resource protected Color cellBackgroundColor; @Resource protected Color cellBorderColor; @Resource protected Color cellSelectedBackground; @Resource protected Icon errorIcon; @Resource private int height; @Resource private int width; @Resource private int insetTop; @Resource private int insetBottom; @Resource private int insetLeft; @Resource private int insetRight; @Inject public ImageCellRenderer(ThumbnailManager thumbnailManager, ImageRenderer imageRenderer, RemoveButton removeButton) { this.thumbnailManager = thumbnailManager; this.imageRenderer = imageRenderer; this.removeButton = removeButton; GuiUtils.assignResources(this); setOpaque(false); setPreferredSize(new Dimension(width, height)); setSize(getPreferredSize()); setBackground(cellBackgroundColor); setLayout(new MigLayout("insets 0, gap 0, fill")); add(removeButton, "gaptop 5, gapright 5, alignx right, aligny top, wrap"); add(imageRenderer, "grow, alignx 50%"); border = BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(insetTop, insetLeft, insetBottom, insetRight), BorderFactory.createMatteBorder(1, 1, 1, 1, cellBorderColor)); } public Insets getPaddingInsets() { return new Insets(insetTop, insetLeft, insetBottom, insetRight); } public void setShowButtons(boolean value) { removeButton.setVisible(value); } @Override public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { LocalFileItem item = (LocalFileItem)value; imageRenderer.setIcon(thumbnailManager.getThumbnailForFile(item.getFile(), list, index)); if(thumbnailManager.isErrorIcon(item.getFile())) imageRenderer.setText(item.getFileName()); else imageRenderer.setText(""); setToolTipText(item.getFileName()); if(isSelected) setBackground(cellSelectedBackground); else setBackground(cellBackgroundColor); this.setBorder(border); return this; } @Override public void paintComponent(Graphics g) { g.setColor(getBackground()); g.fillRect(insetLeft, insetTop, getWidth() - insetLeft - insetRight, getHeight() - insetTop - insetBottom); super.paintComponent(g); } }