📄 generalview.java
字号:
/*
* Created on 2 juil. 2003
* Copyright (C) 2003, 2004, 2005, 2006 Aelitis, All Rights Reserved.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* AELITIS, SAS au capital de 46,603.30 euros
* 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France.
*
*/
package org.gudy.azureus2.ui.swt.views;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.program.Program;
import org.eclipse.swt.widgets.*;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.config.ParameterListener;
import org.gudy.azureus2.core3.disk.DiskManager;
import org.gudy.azureus2.core3.disk.DiskManagerPiece;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerStats;
import org.gudy.azureus2.core3.internat.MessageText;
import org.gudy.azureus2.core3.peer.PEPeerManager;
import org.gudy.azureus2.core3.torrent.TOTorrent;
import org.gudy.azureus2.core3.torrent.TOTorrentException;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.core3.tracker.client.TRTrackerScraperResponse;
import org.gudy.azureus2.core3.util.*;
import org.gudy.azureus2.ui.swt.Messages;
import org.gudy.azureus2.ui.swt.Utils;
import org.gudy.azureus2.ui.swt.components.BufferedLabel;
import org.gudy.azureus2.ui.swt.components.BufferedTruncatedLabel;
import org.gudy.azureus2.ui.swt.debug.ObfusticateImage;
import org.gudy.azureus2.ui.swt.debug.UIDebugGenerator;
import org.gudy.azureus2.ui.swt.mainwindow.Colors;
import org.gudy.azureus2.ui.swt.mainwindow.Cursors;
import org.gudy.azureus2.ui.swt.maketorrent.MultiTrackerEditor;
import org.gudy.azureus2.ui.swt.maketorrent.TrackerEditorListener;
/**
* View of General information on the torrent
*
* @author Olivier
*
*/
public class GeneralView extends AbstractIView implements ParameterListener,
ObfusticateImage
{
private Display display;
private DownloadManager manager = null;
boolean pieces[];
int loopFactor;
Composite genComposite;
Composite gFile;
Canvas piecesImage;
Image pImage;
BufferedLabel piecesPercent;
Canvas availabilityImage;
Image aImage;
BufferedLabel availabilityPercent;
Group gTransfer;
BufferedLabel timeElapsed;
BufferedLabel timeRemaining;
BufferedLabel download;
BufferedLabel downloadSpeed;
//Text maxDLSpeed;
BufferedLabel upload;
BufferedLabel uploadSpeed;
//Text maxULSpeed;
//Text maxUploads;
BufferedLabel totalSpeed;
BufferedLabel ave_completion;
BufferedLabel seeds;
BufferedLabel peers;
Group gInfo;
BufferedLabel fileName;
BufferedLabel fileSize;
BufferedLabel saveIn;
BufferedLabel hash;
BufferedTruncatedLabel tracker_status;
BufferedLabel trackerUpdateIn;
Menu menuTracker;
MenuItem itemSelect;
BufferedTruncatedLabel trackerUrlValue;
BufferedLabel pieceNumber;
BufferedLabel pieceSize;
Control lblComment;
BufferedLabel creation_date;
BufferedLabel user_comment;
BufferedLabel hashFails;
BufferedLabel shareRatio;
Button updateButton;
private int graphicsUpdate = COConfigurationManager.getIntParameter("Graphics Update");
/**
* Initialize GeneralView
*/
public GeneralView() {
}
public void dataSourceChanged(Object newDataSource) {
if (newDataSource == null)
manager = null;
else if (newDataSource instanceof Object[])
manager = (DownloadManager)((Object[])newDataSource)[0];
else
manager = (DownloadManager)newDataSource;
}
/* (non-Javadoc)
* @see org.gudy.azureus2.ui.swt.IView#initialize(org.eclipse.swt.widgets.Composite)
*/
public void initialize(Composite composite) {
if (manager == null)
return;
pieces = new boolean[manager.getNbPieces()];
this.display = composite.getDisplay();
genComposite = new Canvas(composite, SWT.NULL);
GridLayout genLayout = new GridLayout();
genLayout.marginHeight = 0;
try {
genLayout.marginTop = 5;
} catch (NoSuchFieldError e) {
// pre 3.1
}
genLayout.marginWidth = 2;
genLayout.numColumns = 1;
genComposite.setLayout(genLayout);
gFile = new Composite(genComposite, SWT.SHADOW_OUT);
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
gFile.setLayoutData(gridData);
GridLayout fileLayout = new GridLayout();
fileLayout.marginHeight = 0;
fileLayout.marginWidth = 10;
fileLayout.numColumns = 3;
gFile.setLayout(fileLayout);
Label piecesInfo = new Label(gFile, SWT.LEFT);
Messages.setLanguageText(piecesInfo, "GeneralView.section.downloaded");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
piecesInfo.setLayoutData(gridData);
piecesImage = new Canvas(gFile, SWT.NULL);
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.widthHint = 150;
gridData.heightHint = 25;
piecesImage.setLayoutData(gridData);
piecesPercent = new BufferedLabel(gFile, SWT.RIGHT);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
gridData.widthHint = 50;
piecesPercent.setLayoutData(gridData);
Label availabilityInfo = new Label(gFile, SWT.LEFT);
Messages.setLanguageText(availabilityInfo, "GeneralView.section.availability");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
availabilityInfo.setLayoutData(gridData);
availabilityImage = new Canvas(gFile, SWT.NULL);
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.widthHint = 150;
gridData.heightHint = 25;
availabilityImage.setLayoutData(gridData);
Messages.setLanguageText(availabilityImage, "GeneralView.label.status.pieces_available.tooltip");
availabilityPercent = new BufferedLabel(gFile, SWT.RIGHT);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
gridData.widthHint = 50;
availabilityPercent.setLayoutData(gridData);
Messages.setLanguageText(availabilityPercent.getWidget(), "GeneralView.label.status.pieces_available.tooltip");
gTransfer = new Group(genComposite, SWT.SHADOW_OUT);
Messages.setLanguageText(gTransfer, "GeneralView.section.transfer"); //$NON-NLS-1$
gridData = new GridData(GridData.FILL_HORIZONTAL);
gTransfer.setLayoutData(gridData);
GridLayout layoutTransfer = new GridLayout();
layoutTransfer.numColumns = 6;
gTransfer.setLayout(layoutTransfer);
Label label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.timeelapsed"); //$NON-NLS-1$
timeElapsed = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
timeElapsed.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.remaining"); //$NON-NLS-1$
timeRemaining = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
timeRemaining.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT); //$NON-NLS-1$
Messages.setLanguageText(label, "GeneralView.label.shareRatio");
shareRatio = new BufferedLabel(gTransfer, SWT.LEFT); //$NON-NLS-1$
gridData = new GridData(GridData.FILL_HORIZONTAL);
shareRatio.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.downloaded"); //$NON-NLS-1$
download = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
download.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.downloadspeed"); //$NON-NLS-1$
downloadSpeed = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
downloadSpeed.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT); //$NON-NLS-1$
Messages.setLanguageText(label, "GeneralView.label.hashfails");
hashFails = new BufferedLabel(gTransfer, SWT.LEFT); //$NON-NLS-1$
gridData = new GridData(GridData.FILL_HORIZONTAL);
hashFails.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.uploaded"); //$NON-NLS-1$
upload = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
upload.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.uploadspeed"); //$NON-NLS-1$
uploadSpeed = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = 3;
uploadSpeed.setLayoutData(gridData);
// blah
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.seeds");
seeds = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
seeds.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.peers");
peers = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = 3;
peers.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.totalspeed");
totalSpeed = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
totalSpeed.setLayoutData(gridData);
label = new Label(gTransfer, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.swarm_average_completion");
ave_completion = new BufferedLabel(gTransfer, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
gridData.horizontalSpan = 3;
ave_completion.setLayoutData(gridData);
////////////////////////
gInfo = new Group(genComposite, SWT.SHADOW_OUT);
Messages.setLanguageText(gInfo, "GeneralView.section.info");
gridData = new GridData(GridData.FILL_BOTH);
gInfo.setLayoutData(gridData);
GridLayout layoutInfo = new GridLayout();
layoutInfo.numColumns = 4;
gInfo.setLayout(layoutInfo);
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.filename"); //$NON-NLS-1$
fileName = new BufferedLabel(gInfo, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
fileName.setLayoutData(gridData);
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.totalsize"); //$NON-NLS-1$
fileSize = new BufferedLabel(gInfo, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
fileSize.setLayoutData(gridData);
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.savein"); //$NON-NLS-1$
saveIn = new BufferedLabel(gInfo, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
saveIn.setLayoutData(gridData);
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.hash"); //$NON-NLS-1$
hash = new BufferedLabel(gInfo, SWT.LEFT);
Messages.setLanguageText(hash.getWidget(), "GeneralView.label.hash.tooltip", true);
gridData = new GridData(GridData.FILL_HORIZONTAL);
hash.setLayoutData(gridData);
// click on hash -> copy to clipboard
hash.setCursor(Cursors.handCursor);
hash.setForeground(Colors.blue);
label.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent arg0) {
String hash_str = hash.getText();
if(hash_str != null && hash_str.length() != 0)
new Clipboard(display).setContents(new Object[] {hash_str.replaceAll(" ","")}, new Transfer[] {TextTransfer.getInstance()});
}
public void mouseDown(MouseEvent arg0) {
String hash_str = hash.getText();
if(hash_str != null && hash_str.length() != 0)
new Clipboard(display).setContents(new Object[] {hash_str.replaceAll(" ","")}, new Transfer[] {TextTransfer.getInstance()});
}
});
hash.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent arg0) {
String hash_str = hash.getText();
if(hash_str != null && hash_str.length() != 0)
new Clipboard(display).setContents(new Object[] {hash_str.replaceAll(" ","")}, new Transfer[] {TextTransfer.getInstance()});
}
public void mouseDown(MouseEvent arg0) {
String hash_str = hash.getText();
if(hash_str != null && hash_str.length() != 0)
new Clipboard(display).setContents(new Object[] {hash_str.replaceAll(" ","")}, new Transfer[] {TextTransfer.getInstance()});
}
});
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.numberofpieces"); //$NON-NLS-1$
pieceNumber = new BufferedLabel(gInfo, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
pieceNumber.setLayoutData(gridData);
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.size"); //$NON-NLS-1$
pieceSize = new BufferedLabel(gInfo, SWT.LEFT);
gridData = new GridData(GridData.FILL_HORIZONTAL);
pieceSize.setLayoutData(gridData);
label = new Label(gInfo, SWT.LEFT);
Messages.setLanguageText(label, "GeneralView.label.trackerurl"); //$NON-NLS-1$
label.setCursor(Cursors.handCursor);
label.setForeground(Colors.blue);
label.addMouseListener(new MouseAdapter() {
public void mouseDoubleClick(MouseEvent arg0) {
String announce = trackerUrlValue.getText();
if(announce != null && announce.length() != 0)
new Clipboard(display).setContents(new Object[] {announce}, new Transfer[] {TextTransfer.getInstance()});
}
public void mouseDown(MouseEvent arg0) {
String announce = trackerUrlValue.getText();
if(announce != null && announce.length() != 0)
new Clipboard(display).setContents(new Object[] {announce}, new Transfer[] {TextTransfer.getInstance()});
}
});
menuTracker = new Menu(genComposite.getShell(),SWT.POP_UP);
itemSelect = new MenuItem(menuTracker,SWT.CASCADE);
Messages.setLanguageText(itemSelect, "GeneralView.menu.selectTracker");
MenuItem itemEdit = new MenuItem(menuTracker,SWT.NULL);
Messages.setLanguageText(itemEdit, "MyTorrentsView.menu.editTracker");
itemEdit.addListener(
SWT.Selection,
new Listener()
{
public void
handleEvent(Event e)
{
final TOTorrent torrent = manager.getTorrent();
if ( torrent == null ){
return;
}
List group = TorrentUtils.announceGroupsToList( torrent );
new MultiTrackerEditor(null,group,
new TrackerEditorListener()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -