package eu.jucy.gui.downloadsview; import helpers.SizeEnum; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import eu.jucy.gui.ApplicationWorkbenchWindowAdvisor; import eu.jucy.gui.Lang; import eu.jucy.gui.UserColumns.Nick; import eu.jucy.gui.texteditor.NickColourerTextModificator; import eu.jucy.gui.transferview.TransferColumns.TimeLeftColumn; import uc.files.downloadqueue.AbstractDownloadQueueEntry; import uc.files.transfer.AbstractFileInterval; import uc.files.transfer.IFileTransfer; import uc.protocols.client.ClientProtocol; import uihelpers.IconManager; import uihelpers.TableViewerAdministrator.ColumnDescriptor; public abstract class DownloadsColumns extends ColumnDescriptor<Object> { public DownloadsColumns(int defaultColumnSize, String columnName, int style) { super(defaultColumnSize, columnName, style); } @Override public String getText(Object x) { if (x instanceof AbstractDownloadQueueEntry) { return getText((AbstractDownloadQueueEntry)x); } else if (x instanceof ClientProtocol) { x = ((ClientProtocol)x).getFileTransfer(); } if (x instanceof IFileTransfer) { return getText((IFileTransfer)x); } return null; } protected abstract String getText(AbstractDownloadQueueEntry adqe); protected abstract String getText(IFileTransfer ft); public static class Transferrer extends DownloadsColumns { public Transferrer() { super(250, Lang.FileCol + "/"+Lang.User, SWT.NONE); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { return adqe.getFileName(); } @Override protected String getText(IFileTransfer ft) { return ft.getOther().getNick(); } @Override public Font getFont(Object x) { if (x instanceof ClientProtocol && NickColourerTextModificator.isActive()) { return NickColourerTextModificator.getFont(((ClientProtocol)x).getUser()); } return null; } @Override public Color getForeground(Object x) { if (x instanceof ClientProtocol && NickColourerTextModificator.isActive()) { return NickColourerTextModificator.getColor(((ClientProtocol)x).getUser()); } return null; } @Override public Image getImage(Object x) { if (x instanceof ClientProtocol) { return Nick.getUserImage(((ClientProtocol)x).getUser(),false); } else if (x instanceof AbstractDownloadQueueEntry) { return IconManager.get().getIconByFilename( ((AbstractDownloadQueueEntry)x).getFileName() ); } return null; } } public static class StatusCol extends DownloadsColumns { public StatusCol() { super(250, Lang.Status, SWT.NONE); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { return "";//GuiHelpers.toPercentString( adqe.getDownloadedBytes(), adqe.getSize()) ; } @Override protected String getText(IFileTransfer ft) { //AbstractFileInterval fi = ft.getFileInterval(); return "";//GuiHelpers.toPercentString(fi.getRelativeCurrentPos(),fi.length()); } } public static class SpeedCol extends DownloadsColumns { public SpeedCol() { super(80, Lang.Speed, SWT.TRAIL); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { long totalSpeed = 0; for (IFileTransfer ft : adqe.getRunningFileTransfers()) { totalSpeed+= ft.getSpeed(); } return SizeEnum.toSpeedString(1000,totalSpeed ); } @Override protected String getText(IFileTransfer ft) { return ft != null ? SizeEnum.toSpeedString(1000,ft.getSpeed() ): ""; } } public static class TimeLeftCol extends DownloadsColumns { private TimeLeftColumn tlc = new TimeLeftColumn(); public TimeLeftCol() { super(80, Lang.TimeLeft, SWT.TRAIL); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { return SizeEnum.timeEstimation( adqe.getTimeRemaining() ); } @Override protected String getText(IFileTransfer ft) { return tlc.getText(null,ft,null); } } public static class TotalTimeLeftCol extends DownloadsColumns { public TotalTimeLeftCol() { super(100, Lang.TotalTimeLeft, SWT.TRAIL); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { //return SizeEnum.timeEstimation( adqe.getTimeRemaining() ); return ""; } @Override protected String getText(IFileTransfer ft) { //Total time for all files in queue return SizeEnum.timeEstimation( ft.getOther().sizeOfFilesInQueue() , ft.getSpeed()); } } public static class FilesLeftCol extends DownloadsColumns { public FilesLeftCol() { super(60, Lang.FilesLeft, SWT.TRAIL); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { return ""+ApplicationWorkbenchWindowAdvisor.get().getDownloadQueue().getTotalNrOfFiles(); } @Override protected String getText(IFileTransfer ft) { return ""+ft.getOther().nrOfFilesInQueue(); } } public static class SizeLeftCol extends DownloadsColumns { public SizeLeftCol() { super(80, Lang.SizeLeft, SWT.TRAIL); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { return SizeEnum.getReadableSize(adqe.getSize()- adqe.getDownloadedBytes()); } @Override protected String getText(IFileTransfer ft) { AbstractFileInterval fi =ft.getFileInterval(); return SizeEnum.getReadableSize(fi.length()-fi.getRelativeCurrentPos()); } } public static class TotalSizeLeftCol extends DownloadsColumns { public TotalSizeLeftCol() { super(100, Lang.TotalSizeLeft, SWT.TRAIL); } @Override protected String getText(AbstractDownloadQueueEntry adqe) { return SizeEnum.getReadableSize( ApplicationWorkbenchWindowAdvisor.get().getDownloadQueue().getTotalSize()); } @Override protected String getText(IFileTransfer ft) { return SizeEnum.getReadableSize(ft.getOther().sizeOfFilesInQueue()); } } }