package eu.jucy.gui.statusline; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import helpers.SizeEnum; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.CompoundContributionItem; import org.eclipse.ui.menus.CommandContributionItem; import org.eclipse.ui.menus.CommandContributionItemParameter; import org.eclipse.ui.services.IServiceLocator; import eu.jucy.gui.Lang; import eu.jucy.gui.representation.PresentationImages; import eu.jucy.gui.transferview.TransferColumns.UserColumn; import uc.PI; import uc.files.transfer.AbstractFileTransfer; import uihelpers.SUIJob; public class TotalSpeedLabel extends CLabel implements IStatusLineComp { private final boolean up; public TotalSpeedLabel(Composite comp,boolean up) { super(comp,SWT.BORDER);//up? UPID:DOWNID); this.up = up; new SUIJob(this) { @Override public void run() { setText(); schedule(1000); } }.schedule(1000); setText(); MenuManager menuManager = new MenuManager(); menuManager.add(new SpeedContrib(up)); Menu menu = menuManager.createContextMenu(this); setMenu(menu); setImage(up?UserColumn.UPLOAD_ICON:UserColumn.DOWNLOAD_ICON); } public void setText() { int limit = PI.getInt(up? PI.uploadLimit: PI.downloadLimit); String text= limit > 0? "["+ SizeEnum.getShortSize(1024*limit)+"]":"";// = up? "U": "D"; text += SizeEnum.toSpeedString(1000, AbstractFileTransfer.getTotalSpeed(up)); setText(text); } public int getNumberOfCharacters() { return 21; //16 } public static class SpeedContrib extends CompoundContributionItem { private final boolean up; public SpeedContrib(boolean up) { super(); this.up = up; } @Override protected IContributionItem[] getContributionItems() { List<IContributionItem> topLevel = new ArrayList<IContributionItem>(); int c = PI.getInt(up? PI.uploadLimit: PI.downloadLimit); int incmin = Math.max(1, c/100); for (int i : new int[] { Math.min(c-20*incmin,c/2), c-10*incmin, c-5*incmin, c-2*incmin, c-1*incmin, c, c+1*incmin, c+2*incmin, c+5*incmin, c+10*incmin, Math.max(c+20*incmin,2*c)}) { if (i > 0) { topLevel.add(create(i,SizeEnum.toSpeedString(1000,i*1024),i == c)); } } topLevel.add(new Separator()); topLevel.add(create(0,Lang.Unlimited,false)); return topLevel.toArray( new IContributionItem[]{}); } private IContributionItem create(int speed,String s,boolean marker) { IServiceLocator sl = PlatformUI.getWorkbench(); CommandContributionItemParameter ccip = new CommandContributionItemParameter(sl, null, SetSpeedHandler.COMMAND_ID,SWT.PUSH); Map<String,String> map = new HashMap<String,String>(); ccip.parameters = map; map.put(SetSpeedHandler.SPEED,""+speed); map.put(SetSpeedHandler.UPLIMIT,""+up); ccip.label = s; if (marker) { ccip.icon = PresentationImages.getImageDescriptor(PresentationImages.CLOSE_VIEW); } return new CommandContributionItem(ccip); } } }