rateitem.java
来自「SANCHO」· Java 代码 · 共 133 行
JAVA
133 行
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.statusline;import java.util.Observable;import org.eclipse.jface.action.IMenuListener;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.CLabel;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.layout.RowData;import org.eclipse.swt.widgets.Composite;import sancho.core.Sancho;import sancho.model.mldonkey.ClientStats;import sancho.view.StatusLine;import sancho.view.statusline.actions.DNDBoxAction;import sancho.view.statusline.actions.RateBandwidthDialogAction;import sancho.view.utility.SResources;import sancho.view.utility.WidgetFactory;public class RateItem implements IStatusItem { private Composite statusLineComposite; private CLabel downCLabel; private CLabel upCLabel; private boolean updateImages; private boolean connected; private MenuManager popupMenu; private StatusLine statusLine; private int oldLength; public RateItem(StatusLine statusline) { this.statusLine = statusline; this.statusLineComposite = statusline.getStatusline(); this.createContent(); updateImages = true; setConnected(true); } public void setConnected(boolean connected) { this.connected = connected; if (Sancho.hasCollectionFactory()) { Sancho.getCore().getClientStats().addObserver(this); } else { updateDisconnected(); } } private void createContent() { statusLineComposite = new Composite(statusLineComposite, SWT.NONE); statusLineComposite.setLayoutData(new GridData(GridData.FILL_VERTICAL)); statusLineComposite.setLayout(WidgetFactory.createRowLayout(false, true, false, SWT.HORIZONTAL, 0, 0, 0, 0, 0)); popupMenu = new MenuManager(); popupMenu.setRemoveAllWhenShown(true); popupMenu.addMenuListener(new RateMenuListener()); downCLabel = new CLabel(statusLineComposite, SWT.RIGHT); downCLabel.setLayoutData(new RowData()); downCLabel.setMenu(popupMenu.createContextMenu(downCLabel)); upCLabel = new CLabel(statusLineComposite, SWT.NONE); upCLabel.setLayoutData(new RowData()); upCLabel.setMenu(popupMenu.createContextMenu(upCLabel)); } public void update(final Observable o, final Object arg) { if (!(o instanceof ClientStats) || o == null || upCLabel == null || upCLabel.isDisposed()) return; statusLineComposite.getDisplay().asyncExec(new Runnable() { public void run() { if (connected) updateClientStats((ClientStats) o); } }); } public void updateClientStats(ClientStats stats) { if (upCLabel == null || upCLabel.isDisposed()) return; if (updateImages) { downCLabel.setImage(SResources.getImage("rateDownArrow")); upCLabel.setImage(SResources.getImage("rateUpArrow")); } downCLabel.setText(stats.getTcpDownRateString()); upCLabel.setText(stats.getTcpUpRateString()); downCLabel.setToolTipText(stats.getDownloadToolTip()); upCLabel.setToolTipText(stats.getUploadToolTip()); int newLength = downCLabel.getText().length() + upCLabel.getText().length(); // only run Layout() if needed.. it seems to be an expensive call if (newLength != oldLength || updateImages) { oldLength = newLength; statusLineComposite.getParent().layout(); updateImages = false; } } public void updateDisconnected() { if (upCLabel == null || upCLabel.isDisposed()) return; downCLabel.setImage(SResources.getImage("RedCrossSmall")); downCLabel.setText(SResources.getString("l.disconnected")); downCLabel.setToolTipText(SResources.S_ES); upCLabel.setImage(null); upCLabel.setText(SResources.S_ES); upCLabel.setToolTipText(SResources.S_ES); statusLineComposite.getParent().layout(); updateImages = true; } class RateMenuListener implements IMenuListener { public void menuAboutToShow(IMenuManager manager) { if (!Sancho.monitorMode) { manager.add(new DNDBoxAction(statusLine.getMainWindow())); manager.add(new RateBandwidthDialogAction(downCLabel.getShell())); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?