package org.limewire.ui.swing.transfer; import java.awt.Component; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import org.jdesktop.swingx.decorator.ColorHighlighter; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; import org.limewire.ui.swing.table.MouseableTable; import org.limewire.ui.swing.table.TableColors; import ca.odell.glazedlists.EventList; import ca.odell.glazedlists.gui.TableFormat; import ca.odell.glazedlists.swing.DefaultEventTableModel; /** * Base class for transfer tables to display downloads and uploads. */ public abstract class TransferTable<E> extends MouseableTable { private final DefaultEventTableModel<E> model; private final TransferRendererResources resources; /** * Constructs a new TransferTable with the specified event list and table * format. */ public TransferTable(EventList<E> eventList, TableFormat<E> tableFormat) { this(new DefaultEventTableModel<E>(eventList, tableFormat)); } /** * Constructs a new TransferTable with the specified table model. */ public TransferTable(DefaultEventTableModel<E> model) { this.model = model; this.resources = new TransferRendererResources(); setModel(model); setShowGrid(true, false); setEmptyRowsPainted(true); TableColors colors = getTableColors(); setHighlighters( new ColorHighlighter(HighlightPredicate.EVEN, colors.evenColor, resources.getForeground(), colors.selectionColor, colors.selectionForeground), new ColorHighlighter(HighlightPredicate.ODD, colors.evenColor, resources.getForeground(), colors.selectionColor, colors.selectionForeground)); } /** * Creates a highlighter for a disabled row using the specified predicate. */ public Highlighter createDisabledHighlighter(HighlightPredicate predicate) { TableColors colors = getTableColors(); return new ColorHighlighter(predicate, colors.evenColor, resources.getDisabledForeground(), colors.selectionColor, colors.selectionForeground); } /** * Sets the column editor for the specified column index. */ public void setColumnEditor(int column, TableCellEditor editor) { getColumnModel().getColumn(column).setCellEditor(editor); } /** * Sets the column renderer for the specified column index. */ public void setColumnRenderer(int column, TableCellRenderer renderer) { getColumnModel().getColumn(column).setCellRenderer(renderer); } /** * Sets the column widths for the specified column index. */ public void setColumnWidths(int index, int minWidth, int prefWidth, int maxWidth) { TableColumn column = getColumnModel().getColumn(index); column.setMinWidth(minWidth); column.setPreferredWidth(prefWidth); column.setMaxWidth(maxWidth); } /** * Returns the element at the specified table model row. */ public E getElementAt(int index) { return model.getElementAt(index); } /** * Cell renderer for gap columns in the table. */ public static class GapRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { return super.getTableCellRendererComponent(table, null, isSelected, false, row, column); } } }