📄 peerinfoview.java
字号:
return peerInfoComposite;
}
public void fillPeerInfoSection() {
if (imageLabel.getImage() != null) {
Image image = imageLabel.getImage();
imageLabel.setImage(null);
image.dispose();
}
if (peer == null) {
topLabel.setText("");
} else {
String s = peer.getClient();
if (s == null)
s = "";
if (s != "")
s += "; ";
s += peer.getIp()
+ "; "
+ DisplayFormatters.formatPercentFromThousands(peer
.getPercentDoneInThousandNotation());
topLabel.setText(s);
if (countryLocator != null) {
try {
String sCountry = (String) countryLocator.getClass().getMethod(
"getIPCountry", new Class[] { String.class, Locale.class })
.invoke(countryLocator,
new Object[] { peer.getIp(), Locale.getDefault() });
String sCode = (String) countryLocator.getClass().getMethod(
"getIPISO3166", new Class[] { String.class }).invoke(
countryLocator, new Object[] { peer.getIp() });
imageLabel.setToolTipText(sCode + "- " + sCountry);
InputStream is = countryLocator.getClass().getClassLoader()
.getResourceAsStream(
sCountryImagesDir + "/" + sCode.toLowerCase() + ".png");
if (is != null) {
Image img = new Image(imageLabel.getDisplay(), is);
img.setBackground(imageLabel.getBackground());
imageLabel.setImage(img);
}
} catch (Exception e) {
// ignore
}
}
}
refreshInfoCanvas();
}
public void refresh() {
super.refresh();
if (loopFactor++ % graphicsUpdate == 0) {
refreshInfoCanvas();
}
}
protected void refreshInfoCanvas() {
peerInfoCanvas.layout(true);
Rectangle bounds = peerInfoCanvas.getClientArea();
if (bounds.width <= 0 || bounds.height <= 0)
return;
if (img != null && !img.isDisposed()) {
img.dispose();
img = null;
}
if (peer == null || peer.getPeerState() != PEPeer.TRANSFERING) {
GC gc = new GC(peerInfoCanvas);
gc.fillRectangle(bounds);
gc.dispose();
return;
}
BitFlags peerHavePieces = peer.getAvailable();
if (peerHavePieces == null) {
GC gc = new GC(peerInfoCanvas);
gc.fillRectangle(bounds);
gc.dispose();
return;
}
DiskManagerPiece[] dm_pieces = null;
PEPeerManager pm = peer.getManager();
DiskManager dm = pm.getDiskManager();
dm_pieces = dm.getPieces();
int iNumCols = bounds.width / BLOCK_SIZE;
int iNeededHeight = (((dm.getNbPieces() - 1) / iNumCols) + 1)
* BLOCK_SIZE;
if (sc.getMinHeight() != iNeededHeight) {
sc.setMinHeight(iNeededHeight);
sc.layout(true, true);
bounds = peerInfoCanvas.getClientArea();
}
img = new Image(peerInfoCanvas.getDisplay(), bounds.width, iNeededHeight);
GC gcImg = new GC(img);
try {
gcImg.setBackground(peerInfoCanvas.getBackground());
gcImg.fillRectangle(0, 0, bounds.width, iNeededHeight);
int[] availability = pm.getAvailability();
int iNextDLPieceID = -1;
int iDLPieceID = -1;
int[] ourRequestedPieces = peer.getOutgoingRequestedPieceNumbers();
if (ourRequestedPieces != null) {
if (!peer.isChokingMe()) {
// !choking == downloading
if (ourRequestedPieces.length > 0) {
iDLPieceID = ourRequestedPieces[0];
if (ourRequestedPieces.length > 1)
iNextDLPieceID = ourRequestedPieces[1];
}
} else {
if (ourRequestedPieces.length > 0)
iNextDLPieceID = ourRequestedPieces[0];
}
// if (iNextDLPieceID == -1) {
// iNextDLPieceID = peer.getNextPieceNumberGuess();
// }
}
int[] peerRequestedPieces = peer.getIncomingRequestedPieceNumbers();
if (peerRequestedPieces == null)
peerRequestedPieces = new int[0];
int peerNextRequestedPiece = -1;
if (peerRequestedPieces.length > 0)
peerNextRequestedPiece = peerRequestedPieces[0];
Arrays.sort(peerRequestedPieces);
int iRow = 0;
int iCol = 0;
for (int i = 0; i < peerHavePieces.flags.length; i++) {
int colorIndex;
boolean done = (dm_pieces == null) ? false : dm_pieces[i].isDone();
int iXPos = iCol * BLOCK_SIZE;
int iYPos = iRow * BLOCK_SIZE;
if (done) {
if (peerHavePieces.flags[i])
colorIndex = BLOCKCOLOR_AVAIL_HAVE;
else
colorIndex = BLOCKCOLOR_NOAVAIL_HAVE;
gcImg.setBackground(blockColors[colorIndex]);
gcImg.fillRectangle(iXPos, iYPos, BLOCK_FILLSIZE, BLOCK_FILLSIZE);
} else {
// !done
boolean partiallyDone = (dm_pieces == null) ? false : dm_pieces[i]
.getNbWritten() > 0;
int x = iXPos;
int width = BLOCK_FILLSIZE;
if (partiallyDone) {
if (peerHavePieces.flags[i])
colorIndex = BLOCKCOLOR_AVAIL_HAVE;
else
colorIndex = BLOCKCOLOR_NOAVAIL_HAVE;
gcImg.setBackground(blockColors[colorIndex]);
int iNewWidth = (int) (((float) dm_pieces[i].getNbWritten() / dm_pieces[i]
.getNbBlocks()) * width);
if (iNewWidth >= width)
iNewWidth = width - 1;
else if (iNewWidth <= 0)
iNewWidth = 1;
gcImg.fillRectangle(x, iYPos, iNewWidth, BLOCK_FILLSIZE);
width -= iNewWidth;
x += iNewWidth;
}
if (peerHavePieces.flags[i])
colorIndex = BLOCKCOLOR_AVAIL_NOHAVE;
else
colorIndex = BLOCKCOLOR_NOAVAIL_NOHAVE;
gcImg.setBackground(blockColors[colorIndex]);
gcImg.fillRectangle(x, iYPos, width, BLOCK_FILLSIZE);
}
// Down Arrow inside box for "dowloading" piece
if (i == iDLPieceID) {
gcImg.setBackground(blockColors[BLOCKCOLOR_TRANSFER]);
gcImg.fillPolygon(new int[] { iXPos, iYPos, iXPos + BLOCK_FILLSIZE,
iYPos, iXPos + (BLOCK_FILLSIZE / 2), iYPos + BLOCK_FILLSIZE });
}
// Small Down Arrow inside box for next download piece
if (i == iNextDLPieceID) {
gcImg.setBackground(blockColors[BLOCKCOLOR_NEXT]);
gcImg.fillPolygon(new int[] { iXPos + 2, iYPos + 2,
iXPos + BLOCK_FILLSIZE - 1, iYPos + 2,
iXPos + (BLOCK_FILLSIZE / 2), iYPos + BLOCK_FILLSIZE - 1 });
}
// Up Arrow in uploading piece
if (i == peerNextRequestedPiece) {
gcImg.setBackground(blockColors[BLOCKCOLOR_TRANSFER]);
gcImg.fillPolygon(new int[] { iXPos, iYPos + BLOCK_FILLSIZE,
iXPos + BLOCK_FILLSIZE, iYPos + BLOCK_FILLSIZE,
iXPos + (BLOCK_FILLSIZE / 2), iYPos });
} else if (Arrays.binarySearch(peerRequestedPieces, i) >= 0) {
// Small Up Arrow each upload request
gcImg.setBackground(blockColors[BLOCKCOLOR_NEXT]);
gcImg.fillPolygon(new int[] { iXPos + 1, iYPos + BLOCK_FILLSIZE - 2,
iXPos + BLOCK_FILLSIZE - 2, iYPos + BLOCK_FILLSIZE - 2,
iXPos + (BLOCK_FILLSIZE / 2), iYPos + 2 });
}
if (availability != null) {
gcImg.setFont(font);
String sNumber = String.valueOf(availability[i]);
Point size = gcImg.stringExtent(sNumber);
if (availability[i] < 100) {
int x = iXPos + (BLOCK_FILLSIZE / 2) - (size.x / 2);
int y = iYPos + (BLOCK_FILLSIZE / 2) - (size.y / 2);
gcImg.setForeground(blockColors[BLOCKCOLOR_AVAILCOUNT]);
gcImg.drawText(sNumber, x, y, true);
}
}
iCol++;
if (iCol >= iNumCols) {
iCol = 0;
iRow++;
}
}
} catch (Exception e) {
Logger.log(new LogEvent(LogIDs.GUI, "drawing piece map", e));
} finally {
gcImg.dispose();
}
peerInfoCanvas.redraw();
}
/* (non-Javadoc)
* @see org.gudy.azureus2.ui.swt.views.AbstractIView#getComposite()
*/
public Composite getComposite() {
return peerInfoComposite;
}
/* (non-Javadoc)
* @see org.gudy.azureus2.ui.swt.views.AbstractIView#delete()
*/
public void delete() {
if (!imageLabel.isDisposed() && imageLabel.getImage() != null) {
Image image = imageLabel.getImage();
imageLabel.setImage(null);
image.dispose();
}
if (img != null && !img.isDisposed()) {
img.dispose();
img = null;
}
if (font != null && !font.isDisposed()) {
font.dispose();
font = null;
}
super.delete();
}
public Image obfusticatedImage(Image image, Point shellOffset) {
UIDebugGenerator.obfusticateArea(image, topLabel, shellOffset, "");
return image;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -