package org.limewire.ui.swing.transfer;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.LineBorder;
import javax.swing.table.TableCellRenderer;
import net.miginfocom.swing.MigLayout;
import org.jdesktop.swingx.JXPanel;
import org.limewire.ui.swing.components.LimeProgressBar;
import org.limewire.ui.swing.components.decorators.ProgressBarDecorator;
/**
* Cell renderer for the progress column in the transfer tables.
*/
public class TransferProgressRenderer extends JXPanel implements TableCellRenderer {
protected final TransferRendererResources resources;
private final ProgressBarDecorator progressBarDecorator;
protected final LimeProgressBar progressBar;
protected final JLabel timeLabel;
/**
* Constructs a TransferProgressRenderer.
*/
public TransferProgressRenderer(ProgressBarDecorator progressBarDecorator) {
super(new MigLayout("insets 0, gap 0, novisualpadding, nogrid, aligny center"));
this.progressBarDecorator = progressBarDecorator;
resources = new TransferRendererResources();
progressBar = new LimeProgressBar(0, 100);
updateColor();
progressBar.setBorder(new LineBorder(resources.getProgressBarBorderColor()));
Dimension size = new Dimension(resources.getProgressBarWidth(), resources.getProgressBarHeight());
progressBar.setMaximumSize(size);
progressBar.setPreferredSize(size);
timeLabel = new JLabel();
resources.decorateComponent(timeLabel);
add(progressBar);
add(timeLabel);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
int columnWidth = table.getColumnModel().getColumn(column).getWidth();
updateProgress(value, columnWidth);
updateTime(value);
return this;
}
/**
* Updates the progress bar display. Subclasses should override this
* method to provide a meaningful display.
*/
protected void updateProgress(Object value, int columnWidth) {
progressBar.setValue(0);
progressBar.setVisible(true);
}
public void updateColor() {
progressBarDecorator.decoratePlain(progressBar);
}
/**
* Updates the time remaining display. By default, this is invisible.
* Subclasses may override this method to provide a meaningful display.
*/
protected void updateTime(Object value) {
timeLabel.setVisible(false);
}
}