⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 piecedistributionview.java

📁 java 文件下载器。可自定义
💻 JAVA
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space 
// Source File Name:   PieceDistributionView.java

package org.gudy.azureus2.ui.swt.views;

import com.aelitis.azureus.core.peermanager.piecepicker.PiecePicker;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.gudy.azureus2.core3.disk.DiskManager;
import org.gudy.azureus2.core3.disk.DiskManagerPiece;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.views.utils.CoordinateTransform;

// Referenced classes of package org.gudy.azureus2.ui.swt.views:
//			AbstractIView

public abstract class PieceDistributionView extends AbstractIView
{

	private Composite comp;
	private Canvas pieceDistCanvas;
	private GC pieceDistGC;
	protected PEPeerManager pem;
	protected boolean hasPieces[];
	protected boolean isMe;
	private boolean initialized;

	public PieceDistributionView()
	{
		isMe = false;
		initialized = false;
	}

	public abstract void dataSourceChanged(Object obj);

	public String getData()
	{
		return "PiecesView.DistributionView.title";
	}

	public void initialize(Composite parent)
	{
		comp = new Composite(parent, 0);
		createPieceDistPanel();
		initialized = true;
		refresh();
	}

	private void createPieceDistPanel()
	{
		comp.setLayout(new FillLayout());
		pieceDistCanvas = new Canvas(comp, 0);
		pieceDistGC = new GC(pieceDistCanvas);
	}

	private final void updateDistribution()
	{
		Rectangle rect;
		int seeds;
		int connected;
		int upperBound;
		int minAvail;
		int globalPiecesPerAvailability[];
		int datasourcePiecesPerAvailability[];
		boolean downloading[];
		int avlPeak;
		Image img;
		GC gc;
		if (!initialized || pem.getPiecePicker() == null || pem.getDiskManager() == null)
			return;
		rect = pieceDistCanvas.getBounds();
		if (rect.height <= 0 || rect.width <= 0)
			return;
		PiecePicker picker = pem.getPiecePicker();
		seeds = pem.getNbSeeds() + (pem.isSeeding() ? 1 : 0);
		connected = pem.getNbPeers() + seeds + (pem.isSeeding() ? 0 : 1);
		upperBound = 1 + (1 << (int)Math.ceil(Math.log((double)connected + 0.0D) / Math.log(2D)));
		minAvail = (int)picker.getMinAvailability();
		int maxAvail = picker.getMaxAvailability();
		int nbPieces = picker.getNumberOfPieces();
		int availabilties[] = picker.getAvailability();
		DiskManagerPiece dmPieces[] = pem.getDiskManager().getPieces();
		org.gudy.azureus2.core3.peer.PEPiece pePieces[] = pem.getPieces();
		globalPiecesPerAvailability = new int[upperBound];
		datasourcePiecesPerAvailability = new int[upperBound];
		downloading = new boolean[upperBound];
		avlPeak = 0;
		int avlPeakIdx = -1;
		for (int i = 0; i < nbPieces; i++)
		{
			if (availabilties[i] >= upperBound)
				return;
			int newPeak;
			if (avlPeak < (newPeak = ++globalPiecesPerAvailability[availabilties[i]]))
			{
				avlPeak = newPeak;
				avlPeakIdx = availabilties[i];
			}
			if (isMe && dmPieces[i].isDone() || !isMe && hasPieces != null && hasPieces[i])
				datasourcePiecesPerAvailability[availabilties[i]]++;
			if (isMe && pePieces[i] != null)
				downloading[availabilties[i]] = true;
		}

		img = new Image(pieceDistGC.getDevice(), pieceDistCanvas.getBounds());
		gc = new GC(img);
		int stepWidthX = (int)Math.floor(rect.width / upperBound);
		int barGap = 1;
		int barWidth = stepWidthX - barGap - 1;
		int barFillingWidth = barWidth - 1;
		double stepWidthY = (1.0D * (double)(rect.height - 1)) / (double)avlPeak;
		int offsetY = rect.height;
		gc.setForeground(Colors.green);
		for (int i = 0; i <= connected; i++)
		{
			org.eclipse.swt.graphics.Color curColor;
			if (i == 0)
				curColor = Colors.colorError;
			else
			if (i <= seeds)
				curColor = Colors.green;
			else
				curColor = Colors.blues[9];
			gc.setBackground(curColor);
			gc.setForeground(curColor);
			if (globalPiecesPerAvailability[i] == 0)
			{
				gc.setLineWidth(2);
				gc.drawLine(stepWidthX * i, offsetY - 1, stepWidthX * (i + 1) - barGap, offsetY - 1);
			} else
			{
				gc.setLineWidth(1);
				if (downloading[i])
					gc.setLineStyle(2);
				gc.fillRectangle(stepWidthX * i + 1, offsetY - 1, barFillingWidth, (int)(Math.ceil(stepWidthY * (double)datasourcePiecesPerAvailability[i] - 1.0D) * -1D));
				gc.drawRectangle(stepWidthX * i, offsetY, barWidth, (int)(Math.ceil(stepWidthY * (double)globalPiecesPerAvailability[i]) + 1.0D) * -1);
			}
			if (i == minAvail)
			{
				gc.setForeground(Colors.blue);
				gc.drawRectangle(stepWidthX * i + 1, offsetY - 1, barWidth - 2, (int)Math.ceil(stepWidthY * (double)globalPiecesPerAvailability[i] - 1.0D) * -1);
			}
			gc.setLineStyle(1);
		}

		gc.setLineWidth(1);
		CoordinateTransform t = new CoordinateTransform(rect);
		t.shiftExternal(rect.width, 0);
		t.scale(-1D, 1.0D);
		String boxContent[] = {
			MessageText.getString("PiecesView.DistributionView.NoAvl"), MessageText.getString("PiecesView.DistributionView.SeedAvl"), MessageText.getString("PiecesView.DistributionView.PeerAvl"), MessageText.getString("PiecesView.DistributionView.RarestAvl", new String[] {
				(new StringBuilder()).append(globalPiecesPerAvailability[minAvail]).append("").toString(), (new StringBuilder()).append(minAvail).append("").toString()
			}), MessageText.getString((new StringBuilder()).append("PiecesView.DistributionView.").append(isMe ? "weHave" : "theyHave").toString()), MessageText.getString("PiecesView.DistributionView.weDownload")
		};
		int charWidth = gc.getFontMetrics().getAverageCharWidth();
		int charHeight = gc.getFontMetrics().getHeight();
		int maxBoxOffsetY = charHeight + 2;
		int maxBoxWidth = 0;
		int maxBoxOffsetX = 0;
		for (int i = 0; i < boxContent.length; i++)
			maxBoxWidth = Math.max(maxBoxWidth, boxContent[i].length());

		maxBoxOffsetX = (maxBoxWidth + 5) * charWidth;
		maxBoxWidth = ++maxBoxWidth * charWidth;
		int boxNum = 1;
		gc.setForeground(Colors.colorError);
		gc.setBackground(Colors.background);
		gc.drawRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth, charHeight);
		gc.drawString(boxContent[boxNum - 1], t.x(maxBoxOffsetX - 5), t.y(maxBoxOffsetY * boxNum), true);
		boxNum++;
		gc.setForeground(Colors.green);
		gc.setBackground(Colors.background);
		gc.drawRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth, charHeight);
		gc.drawString(boxContent[boxNum - 1], t.x(maxBoxOffsetX - 5), t.y(maxBoxOffsetY * boxNum), true);
		boxNum++;
		gc.setForeground(Colors.blues[9]);
		gc.drawRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth, charHeight);
		gc.drawString(boxContent[boxNum - 1], t.x(maxBoxOffsetX - 5), t.y(maxBoxOffsetY * boxNum), true);
		boxNum++;
		gc.setForeground(Colors.blue);
		gc.drawRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth, charHeight);
		gc.drawString(boxContent[boxNum - 1], t.x(maxBoxOffsetX - 5), t.y(maxBoxOffsetY * boxNum), true);
		boxNum++;
		gc.setForeground(Colors.black);
		gc.setBackground(Colors.black);
		gc.drawRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth, charHeight);
		gc.fillRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth / 2, charHeight);
		gc.setForeground(Colors.grey);
		gc.setBackground(Colors.background);
		gc.drawString(boxContent[boxNum - 1], t.x(maxBoxOffsetX - 5), t.y(maxBoxOffsetY * boxNum), true);
		if (isMe)
		{
			boxNum++;
			gc.setForeground(Colors.black);
			gc.setLineStyle(2);
			gc.drawRectangle(t.x(maxBoxOffsetX), t.y(maxBoxOffsetY * boxNum), maxBoxWidth, charHeight);
			gc.drawString(boxContent[boxNum - 1], t.x(maxBoxOffsetX - 5), t.y(maxBoxOffsetY * boxNum), true);
		}
		gc.setLineStyle(1);
		gc.dispose();
		break MISSING_BLOCK_LABEL_1501;
		Exception exception;
		exception;
		gc.dispose();
		throw exception;
		pieceDistGC.drawImage(img, 0, 0);
		img.dispose();
		return;
	}

	public void refresh()
	{
		if (!initialized || pem == null)
		{
			return;
		} else
		{
			updateDistribution();
			super.refresh();
			return;
		}
	}

	public Composite getComposite()
	{
		return comp;
	}

	public void delete()
	{
		if (!initialized)
		{
			return;
		} else
		{
			initialized = false;
			Utils.disposeSWTObjects(new Object[] {
				pieceDistGC, pieceDistCanvas, comp
			});
			super.delete();
			return;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -