/* * Copyright 2004 - 2008 Christian Sprajc. All rights reserved. * * This file is part of PowerFolder. * * PowerFolder is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * PowerFolder is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PowerFolder. If not, see <http://www.gnu.org/licenses/>. * * $Id$ */ package de.dal33t.powerfolder.ui.render; import java.awt.Component; import java.util.Collection; import java.util.Date; import javax.swing.JProgressBar; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import com.jgoodies.forms.factories.Borders; import de.dal33t.powerfolder.Controller; import de.dal33t.powerfolder.light.FileInfo; import de.dal33t.powerfolder.light.FolderInfo; import de.dal33t.powerfolder.transfer.Download; import de.dal33t.powerfolder.transfer.DownloadManager; import de.dal33t.powerfolder.transfer.Transfer; import de.dal33t.powerfolder.ui.util.ColorUtil; import de.dal33t.powerfolder.ui.util.Icons; import de.dal33t.powerfolder.ui.util.UIUtil; import de.dal33t.powerfolder.util.EstimatedTime; import de.dal33t.powerfolder.util.Format; import de.dal33t.powerfolder.util.TransferCounter; import de.dal33t.powerfolder.util.Translation; /** * Renderer for any transfer table * * @author <a href="mailto:totmacher@powerfolder.com">Christian Sprajc </a> * @version $Revision: 1.20 $ */ public class DownloadManagerTableCellRenderer extends DefaultTableCellRenderer { // private static final Logger LOG = // Logger.getLogger(TransferTableCellRenderer.class); private Controller controller; private JProgressBar bar; /** * Initalizes the renderer for a transfertable. renderDownloads determines * if we are rendering ul or dls. Maybe split this class up into two * * @param controller */ public DownloadManagerTableCellRenderer(Controller controller) { this.controller = controller; bar = new JProgressBar(); bar.setBorderPainted(false); bar.setBorder(Borders.EMPTY_BORDER); bar.setStringPainted(true); // Listen for ui l&f changes UIUtil.addUIChangeTask(new Runnable() { public void run() { bar.updateUI(); } }); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component defaultComp = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (value instanceof DownloadManager) { DownloadManager downloadManager = (DownloadManager) value; TransferCounter counter = downloadManager.getCounter(); // Show bar bar.setValue((int) (Math.max(0, downloadManager.getState() .getProgress()) * 100)); // bar.setBackground(defaultComp.getBackground()); Transfer.State state = downloadManager.getState(); if (state == null) { state = new Transfer.State(); state.setState(Transfer.TransferState.NONE); } switch (state.getState()) { case VERIFYING : bar.setString(Translation.getTranslation(state.getState() .getTranslationId())); bar.setValue(100); break; case MATCHING : case FILERECORD_REQUEST : case COPYING : bar.setString(Translation.getTranslation(state.getState() .getTranslationId())); break; case DOWNLOADING : EstimatedTime et = new EstimatedTime(downloadManager .getCounter().calculateEstimatedMillisToCompletion(), downloadManager.isCompleted() && downloadManager.isStarted()); String kbs = Translation.getTranslation("transfers.kbs", Format.formatDecimal(counter.calculateCurrentKBS())); String text = (et.isActive() ? et.toString() + " - " : "") + kbs; bar.setString(text); break; default : if (downloadManager.isCompleted()) { Date completedDate = downloadManager.getCompletedDate(); String dateStr = completedDate != null ? Format .formatDateShort(completedDate, true) : ""; bar.setValue(100); bar.setString(Translation.getTranslation( "transfers.completed", dateStr)); } else if (downloadManager.isStarted()) { bar.setString(Translation .getTranslation("transfers.started")); } else { bar.setString(Translation .getTranslation("transfers.requested")); } } return bar; } else if (value instanceof FileInfo) { if (column == 0) { // File type FileInfo fInfo = (FileInfo) value; setIcon(Icons.getEnabledIconFor(fInfo, controller)); setText(""); } else { // File info FileInfo fInfo = (FileInfo) value; setText(fInfo.getFilenameOnly()); setIcon(null); setHorizontalAlignment(LEFT); } } else if (value instanceof Long) { Long size = (Long) value; setText(Format.formatBytesShort(size)); setIcon(null); setHorizontalAlignment(RIGHT); } else if (value instanceof FolderInfo) { FolderInfo foInfo = (FolderInfo) value; setText(foInfo.name); setHorizontalAlignment(LEFT); } else if (value instanceof Collection) { Collection<Download> sources = (Collection<Download>) value; if (sources.isEmpty()) { // This happens on abort setText(""); setIcon(null); } else { Download primaryDownload = sources.iterator().next(); if (sources.size() == 1) { String nickText = primaryDownload.getPartner().getNick(); setText(nickText); } else { setText(Translation.getTranslation("transfers.swarm", String.valueOf(sources.size()))); } setHorizontalAlignment(LEFT); } } else if (value instanceof EstimatedTime) { EstimatedTime time = (EstimatedTime) value; if (time.isActive()) { setText(Format.formatDeltaTime(time.getDeltaTimeMillis())); } else { setText(""); } setIcon(null); setHorizontalAlignment(CENTER); } else { setText(Translation.getTranslation("transfers.searching")); setIcon(null); setHorizontalAlignment(LEFT); } if (!isSelected) { setBackground(row % 2 == 0 ? ColorUtil.EVEN_TABLE_ROW_COLOR : ColorUtil.ODD_TABLE_ROW_COLOR); } return defaultComp; } }