📄 piecedistributionview.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 + -