package org.limewire.ui.swing.upload.table;
import org.limewire.core.api.upload.UploadItem;
import org.limewire.core.api.upload.UploadState;
import org.limewire.core.api.upload.UploadItem.UploadItemType;
import org.limewire.ui.swing.components.decorators.ProgressBarDecorator;
import org.limewire.ui.swing.transfer.TransferProgressRenderer;
import org.limewire.ui.swing.util.I18n;
import org.limewire.util.CommonUtils;
/**
* Cell renderer for the progress column in the Uploads table.
*/
class UploadProgressRenderer extends TransferProgressRenderer {
/**
* Constructs an UploadProgressRenderer.
*/
public UploadProgressRenderer(ProgressBarDecorator progressBarDecorator) {
super(progressBarDecorator);
}
@Override
protected void updateProgress(Object value, int columnWidth) {
if (value instanceof UploadItem) {
UploadItem item = (UploadItem) value;
if (UploadItemType.GNUTELLA == item.getUploadItemType()) {
// Show progress for Gnutella uploads.
progressBar.setVisible((item.getState() == UploadState.UPLOADING) &&
(columnWidth > resources.getProgressBarCutoffWidth()));
if (progressBar.isVisible()) {
long size = item.getFileSize();
progressBar.setValue((size > 0) ?
(int) (100 * item.getTotalAmountUploaded() / size) : 0);
}
} else {
// Progress not shown for torrents.
progressBar.setVisible(false);
}
} else {
progressBar.setVisible(false);
}
progressBar.setEnabled(true);
}
@Override
protected void updateTime(Object value) {
if (value instanceof UploadItem) {
UploadItem item = (UploadItem) value;
if (UploadItemType.GNUTELLA == item.getUploadItemType()) {
// Show time left for Gnutella uploads.
if ((item.getState() == UploadState.UPLOADING) &&
(item.getRemainingUploadTime() <= Long.MAX_VALUE - 1000)) {
timeLabel.setText(I18n.tr("{0} left", CommonUtils.seconds2time(
item.getRemainingUploadTime())));
timeLabel.setMinimumSize(timeLabel.getPreferredSize());
timeLabel.setVisible(true);
} else {
timeLabel.setVisible(false);
}
} else {
// Time left not shown for torrents.
timeLabel.setVisible(false);
}
} else {
timeLabel.setVisible(false);
}
}
}