package org.limewire.ui.swing.library.navigator;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.table.TableCellRenderer;
import org.jdesktop.application.Resource;
import org.limewire.core.api.library.SharedFileList;
import org.limewire.ui.swing.library.navigator.LibraryNavItem.NavType;
import org.limewire.ui.swing.util.GuiUtils;
import com.google.inject.Inject;
class LibraryNavTableRenderer extends JLabel implements TableCellRenderer {
private Border border;
private Border dropBorder;
private @Resource Color selectedColor;
private @Resource Font font;
private @Resource Color fontColor;
private @Resource int iconGap;
private @Resource Icon libraryIcon;
private @Resource Icon publicIcon;
private @Resource Icon listIcon;
private @Resource Icon listSharedIcon;
private @Resource Color dropBackgroundColor;
private @Resource Color dropBorderColor;
@Inject
public LibraryNavTableRenderer() {
GuiUtils.assignResources(this);
border = BorderFactory.createEmptyBorder(5,6,5,6);
dropBorder = new CompoundBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, dropBorderColor),
BorderFactory.createEmptyBorder(3,4,3,4));
setBackground(selectedColor);
setFont(font);
setIconTextGap(iconGap);
setForeground(fontColor);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(value instanceof LibraryNavItem) {
LibraryNavItem item = (LibraryNavItem) value;
setText(item.getDisplayText());
setToolTipText(item.getDisplayText());
setIconType(item);
} else {
setText("");
setToolTipText("");
setIcon(null);
}
JTable.DropLocation dropLocation = table.getDropLocation();
if(dropLocation != null
&& dropLocation.getRow() == row
&& dropLocation.getColumn() == column) {
setOpaque(true);
setBorder(dropBorder);
setBackground(dropBackgroundColor);
} else {
setBorder(border);
setOpaque(isSelected);
setBackground(selectedColor);
}
return this;
}
private void setIconType(LibraryNavItem item) {
if(item.getType() == NavType.LIBRARY)
setIcon(libraryIcon);
else if(item.getType() == NavType.PUBLIC_SHARED)
setIcon(publicIcon);
else {
if(item.getLocalFileList() instanceof SharedFileList) {
if(((SharedFileList)item.getLocalFileList()).getFriendIds().size() > 0)
setIcon(listSharedIcon);
else
setIcon(listIcon);
} else {
setIcon(listIcon);
}
}
}
}