package org.limewire.ui.swing.table;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import org.jdesktop.application.Resource;
import org.limewire.core.api.library.FileItem;
import org.limewire.core.api.library.LocalFileItem;
import org.limewire.ui.swing.search.model.VisualSearchResult;
import org.limewire.ui.swing.util.CategoryIconManager;
import org.limewire.ui.swing.util.GuiUtils;
import org.limewire.ui.swing.util.I18n;
import org.limewire.ui.swing.util.IconManager;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.assistedinject.Assisted;
/**
* Renders a table cell with a string and the system icon representing that
* file type.
*/
public class IconLabelRenderer extends DefaultTableCellRenderer implements TableCellRenderer {
private final Provider<IconManager> iconManager;
private final CategoryIconManager categoryIconManager;
private final boolean showAudioArtist;
@Resource private Icon spamIcon;
@Resource private Icon downloadingIcon;
@Resource private Icon libraryIcon;
@Resource private Color disabledForegroundColor;
@Resource private Font font;
@Inject
public IconLabelRenderer(Provider<IconManager> iconManager,
CategoryIconManager categoryIconManager,
@Assisted boolean showAudioArtist) {
GuiUtils.assignResources(this);
this.iconManager = iconManager;
this.categoryIconManager = categoryIconManager;
this.showAudioArtist = showAudioArtist;
setBorder(BorderFactory.createEmptyBorder(0,2,0,2));
setIconTextGap(5);
setFont(font);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
Color background;
Color foreground;
Icon icon;
String text;
if (table.getSelectedRow() == row) {
background = table.getSelectionBackground();
foreground = table.getSelectionForeground();
} else {
background = table.getBackground();
foreground = table.getForeground();
}
if (value instanceof FileItem) {
FileItem item = (FileItem) value;
if(item instanceof LocalFileItem) {
icon = iconManager.get().getIconForFile(((LocalFileItem) item).getFile());
LocalFileItem localFileItem = (LocalFileItem) item;
if(localFileItem.isIncomplete()) {
text = I18n.tr("{0} (downloading)", item.getFileName());
} else {
text = item.getFileName();
}
} else {
icon = null;
text = item.getFileName();
}
} else if (value instanceof VisualSearchResult){
VisualSearchResult vsr = (VisualSearchResult)value;
text = vsr.getNameProperty(showAudioArtist);
icon = getIcon(vsr);
if(vsr.isSpam()) {
foreground = disabledForegroundColor;
} else {
foreground = table.getForeground();
}
} else if (value != null) {
throw new IllegalArgumentException(value + " must be a FileItem or VisualSearchResult, not a " + value.getClass().getCanonicalName());
} else {
icon = null;
text = "";
}
setBackground(background);
setForeground(foreground);
setIcon(icon);
setText(text);
return this;
}
@Override
public String getToolTipText(){
return getText();
}
private Icon getIcon(VisualSearchResult vsr) {
if (vsr.isSpam()) {
return spamIcon;
}
switch (vsr.getDownloadState()) {
case DOWNLOADING:
return downloadingIcon;
case DOWNLOADED:
case LIBRARY:
return libraryIcon;
}
return categoryIconManager.getIcon(vsr);
}
}