📄 opentorrentwindow.java
字号:
cArea = new Composite(shell, SWT.NULL);
layout = new GridLayout();
layout.numColumns = 2;
cArea.setLayout(layout);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
cArea.setLayoutData(gridData);
ok = new Button(cArea, SWT.PUSH);
ok.setEnabled(false);
Messages.setLanguageText(ok, "Button.ok");
gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
gridData.widthHint = 70;
ok.setLayoutData(gridData);
shell.setDefaultButton(ok);
ok.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
String sDefaultPath = COConfigurationManager
.getStringParameter(PARAM_DEFSAVEPATH);
if (!sDestDir.equals(sDefaultPath)) {
// Move sDestDir to top of list
// First, check to see if sDestDir is already in the list
File fDestDir = new File(sDestDir);
int iDirPos = -1;
for (int i = 0; i < dirList.size(); i++) {
String sDirName = dirList.get(i);
File dir = new File(sDirName);
if (dir.equals(fDestDir)) {
iDirPos = i;
break;
}
}
// If already in list, remove it
if (iDirPos > 0 && iDirPos < dirList.size())
dirList.remove(iDirPos);
// and add it to the top
dirList.add(0, sDestDir);
// Limit to 10
if (dirList.size() > 10)
dirList.remove(dirList.size() - 1);
// Temporary list cleanup
try {
for (int j = 0; j < dirList.size(); j++) {
File dirJ = new File(dirList.get(j));
for (int i = 0; i < dirList.size(); i++) {
try {
if (i == j)
continue;
File dirI = new File(dirList.get(i));
if (dirI.equals(dirJ)) {
dirList.remove(i);
// dirList shifted up, fix indexes
if (j > i)
j--;
i--;
}
} catch (Exception e) {
// Ignore
}
}
}
} catch (Exception e) {
// Ignore
}
COConfigurationManager.setParameter("saveTo_list", dirList);
COConfigurationManager.save();
}
if (!COConfigurationManager.getBooleanParameter("Use default data dir"))
COConfigurationManager.setParameter(PARAM_DEFSAVEPATH, sDestDir);
openTorrents();
close(true, false);
}
});
Button cancel = new Button(cArea, SWT.PUSH);
Messages.setLanguageText(cancel, "Button.cancel");
gridData = new GridData();
gridData.widthHint = 70;
cancel.setLayoutData(gridData);
cancel.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
close(true, true);
}
});
shell.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
if (!bClosed)
close(false, true);
}
});
shell.addListener(SWT.Traverse, new Listener() {
public void handleEvent(Event e) {
if (e.detail == SWT.TRAVERSE_ESCAPE) {
close(true, true);
}
}
});
KeyListener pasteKeyListener = new org.eclipse.swt.events.KeyAdapter() {
public void keyPressed(KeyEvent e) {
int key = e.character;
if ((e.stateMask & SWT.MOD1) != 0 && e.character <= 26
&& e.character > 0)
key += 'a' - 1;
if ((key == 'v' && (e.stateMask & SWT.MOD1) > 0)
|| (e.keyCode == SWT.INSERT && (e.stateMask & SWT.SHIFT) > 0)) {
e.doit = false;
// Paste
Clipboard clipboard = new Clipboard(shell.getDisplay());
String sClipText = (String) clipboard.getContents(TextTransfer
.getInstance());
if (sClipText != null) {
addTorrentsFromTextList(sClipText, false);
}
}
}
};
setPasteKeyListener(shell, pasteKeyListener);
DropTarget dropTarget = new DropTarget(shell, DND.DROP_DEFAULT
| DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK | DND.DROP_TARGET_MOVE);
// Order is important
dropTarget.setTransfer(new Transfer[] { URLTransfer.getInstance(),
FileTransfer.getInstance(), TextTransfer.getInstance() });
dropTarget.addDropListener(new DropTargetAdapter() {
public void dropAccept(DropTargetEvent event) {
event.currentDataType = URLTransfer.pickBestType(event.dataTypes,
event.currentDataType);
}
public void dragEnter(DropTargetEvent event) {
if ((event.operations & DND.DROP_LINK) > 0)
event.detail = DND.DROP_LINK;
else if ((event.operations & DND.DROP_COPY) > 0)
event.detail = DND.DROP_COPY;
}
public void drop(DropTargetEvent event) {
if (event.data instanceof URLTransfer.URLType)
addTorrents(null,
new String[] { ((URLTransfer.URLType) event.data).linkURL });
else if (event.data instanceof String[])
addTorrents(null, (String[]) event.data);
else if (event.data instanceof String)
addTorrents(null, new String[] { (String) event.data });
}
});
shell.pack();
if (!Utils.linkShellMetricsToConfig(shell, "OpenTorrentWindow")) {
if (!Constants.isOSX)
Utils.centreWindow(shell);
}
shell.open();
}
private void updateStartModeCombo() {
if (cmbStartMode == null)
return;
int[] indexes = tableTorrents.getSelectionIndices();
String[] sItemsText = new String[startModes.length];
int iMaxMatches = 0;
int iIndexToSelect = getDefaultStartMode();
for (int i = 0; i < startModes.length; i++) {
int iMatches = 0;
for (int j = 0; j < indexes.length; j++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indexes[j]);
if (info.iStartID == i)
iMatches++;
}
if (iMatches > iMaxMatches) {
iMaxMatches = iMatches;
iIndexToSelect = i;
}
String sText = MessageText.getString("OpenTorrentWindow.startMode."
+ startModes[i]);
if (iMatches > 0)
sText += " "
+ MessageText.getString("OpenTorrentWindow.xOfTotal", new String[] {
Integer.toString(iMatches), Integer.toString(indexes.length) });
sItemsText[i] = sText;
}
cmbStartMode.setItems(sItemsText);
cmbStartMode.select(iIndexToSelect);
cmbStartMode.layout(true);
}
private void updateQueueLocationCombo() {
if (cmbQueueLocation == null)
return;
int[] indexes = tableTorrents.getSelectionIndices();
String[] sItemsText = new String[queueLocations.length];
int iMaxMatches = 0;
int iIndexToSelect = QUEUELOCATION_BOTTOM;
for (int i = 0; i < queueLocations.length; i++) {
int iMatches = 0;
for (int j = 0; j < indexes.length; j++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indexes[j]);
if (info.iQueueLocation == i)
iMatches++;
}
if (iMatches > iMaxMatches) {
iMaxMatches = iMatches;
iIndexToSelect = i;
}
String sText = MessageText.getString("OpenTorrentWindow.addPosition."
+ queueLocations[i]);
if (iMatches > 0)
sText += " "
+ MessageText.getString("OpenTorrentWindow.xOfTotal", new String[] {
Integer.toString(iMatches), Integer.toString(indexes.length) });
sItemsText[i] = sText;
}
cmbQueueLocation.setItems(sItemsText);
cmbQueueLocation.select(iIndexToSelect);
}
/**
* @param c
* @param keyListener
*/
private void setPasteKeyListener(Control c, KeyListener keyListener) {
if (!(c instanceof Text || c instanceof Combo))
c.addKeyListener(keyListener);
if (c instanceof Composite) {
Control[] controls = ((Composite) c).getChildren();
for (int i = 0; i < controls.length; i++) {
setPasteKeyListener(controls[i], keyListener);
}
}
}
private void browseURL() {
new OpenUrlWindow(MainWindow.getWindow().getAzureusCore(),
shellForChildren, null, null, OpenTorrentWindow.this);
}
private void close(boolean dispose, boolean bCancel) {
stOpenTorrentWindow = null;
// Can't rely on (stOpenTorrentWindow == null) to check if we are closed
// since another thread may create another OpenTorrentWindow while
// we are closing this one.
bClosed = true;
if (dispose && shell != null && !shell.isDisposed()) {
// We won't be recalled by disposal hook because we set bClosed
shell.dispose();
}
Utils.disposeSWTObjects(disposeList);
if (downloaders.size() > 0) {
for (Iterator iter = downloaders.iterator(); iter.hasNext();) {
TorrentDownloader element = (TorrentDownloader) iter.next();
element.cancel();
}
downloaders.clear();
}
if (bCancel) {
for (Iterator iter = torrentList.iterator(); iter.hasNext();) {
TorrentInfo info = (TorrentInfo) iter.next();
if (info.bDeleteFileOnCancel) {
File file = new File(info.sFileName);
if (file.exists())
file.delete();
}
}
torrentList.clear();
}
}
private void createTorrentListArea(Composite cArea) {
GridData gridData;
TableColumn tc;
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.numColumns = 2;
cArea.setLayout(layout);
tableTorrents = new Table(cArea, SWT.MULTI | SWT.BORDER
| SWT.FULL_SELECTION | SWT.VIRTUAL);
gridData = new GridData(GridData.FILL_HORIZONTAL
| GridData.VERTICAL_ALIGN_FILL);
gridData.heightHint = 50;
gridData.widthHint = 450;
tableTorrents.setLayoutData(gridData);
tc = new TableColumn(tableTorrents, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.torrentTable.name");
tc.setWidth(150);
tc = new TableColumn(tableTorrents, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.torrentTable.saveLocation");
tc.setWidth(150);
tc = new TableColumn(tableTorrents, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.startMode");
tc.setWidth(70);
tc = new TableColumn(tableTorrents, SWT.NULL);
Messages.setLanguageText(tc, "OpenTorrentWindow.addPosition");
tc.setWidth(80);
if (Utils.LAST_TABLECOLUMN_EXPANDS)
tc.setData("Width", new Long(80));
tableTorrents.addListener(SWT.SetData, new Listener() {
public void handleEvent(Event event) {
if (bClosed)
return;
TableItem item = (TableItem) event.item;
int index = tableTorrents.indexOf(item);
if (index < 0)
return;
TorrentInfo info = (TorrentInfo) torrentList.get(index);
String sRealDestDir;
TorrentFileInfo[] files = info.getFiles();
if (files.length > 1 && !info.allFilesMoving()) {
File f = new File(info.sDestDir, info.getTorrentName());
sRealDestDir = f.getAbsolutePath();
} else {
sRealDestDir = info.sDestDir;
}
item.setText(new String[] {
info.getTorrentName(),
sRealDestDir,
MessageText.getString("OpenTorrentWindow.startMode."
+ startModes[info.iStartID]),
MessageText.getString("OpenTorrentWindow.addPosition."
+ queueLocations[info.iQueueLocation]) });
if (!info.isValid) {
item.setForeground(Colors.red);
Font font = item.getFont();
FontData[] fd = font.getFontData();
for (int i = 0; i < fd.length; i++) {
fd[i].setStyle(SWT.ITALIC);
}
font = new Font(item.getDisplay(), fd);
disposeList.add(font);
item.setFont(font);
}
Utils.alternateRowBackground(item);
}
});
tableTorrents.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
dataFiles.clear();
int[] indexes = tableTorrents.getSelectionIndices();
for (int i = 0; i < indexes.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indexes[i]);
TorrentFileInfo[] files = info.getFiles();
dataFiles.addAll(Arrays.asList(files));
}
updateStartModeCombo();
updateQueueLocationCombo();
dataFileTable.setItemCount(dataFiles.size());
dataFileTable.clearAll();
resizeTables(2);
}
});
tableTorrents.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.character == SWT.DEL) {
deleteSelected(tableTorrents, torrentList);
e.doit = false;
}
}
});
tableTorrents.setHeaderVisible(true);
// Menu for tableTorrents
String sTitle;
Menu menu = new Menu(tableTorrents);
MenuItem item;
sTitle = MessageText.getString("OpenTorrentWindow.startMode");
int userMode = COConfigurationManager.getIntParameter("User Mode");
for (int i = 0; i < startModes.length; i++) {
if (i == STARTMODE_FORCESTARTED && userMode == 0)
continue;
item = new MenuItem(menu, SWT.PUSH);
item.setData("Value", new Long(i));
item.setText(sTitle
+ ": "
+ MessageText.getString("OpenTorrentWindow.startMode."
+ startModes[i]));
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Long l = (Long) e.widget.getData("Value");
if (l != null) {
setSelectedStartMode(l.intValue());
updateOKButton();
}
}
});
}
item = new MenuItem(menu, SWT.SEPARATOR);
sTitle = MessageText.getString("OpenTorrentWindow.addPosition");
for (int i = 0; i < queueLocations.length; i++) {
item = new MenuItem(menu, SWT.PUSH);
item.setData("Value", new Long(i));
item.setText(sTitle
+ ": "
+ MessageText.getString("OpenTorrentWindow.addPosition."
+ queueLocations[i]));
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Long l = (Long) e.widget.getData("Value");
if (l != null) {
setSelectedQueueLocation(l.intValue());
}
}
});
}
item = new MenuItem(menu, SWT.SEPARATOR);
item = new MenuItem(menu, SWT.PUSH);
// steal text
Messages.setLanguageText(item, "MyTorrentsView.menu.remove");
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
deleteSelected(tableTorrents, torrentList);
}
});
item = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(item,
"OpenTorrentWindow.fileList.changeDestination");
item.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
int[] indexes = tableTorrents.getSelectionIndices();
String sDefPath = sDestDir;
for (int i = 0; i < indexes.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indexes[i]);
TorrentFileInfo[] files = info.getFiles();
if (files.length == 1) {
FileDialog fDialog = new FileDialog(shellForChildren,
SWT.SYSTEM_MODAL | SWT.SAVE);
fDialog.setFilterPath(sDefPath);
fDialog.setText(info.getTorrentName() + ": "
+ MessageText.getString("MainWindow.dialog.choose.savepath"));
String sNewFile = fDialog.open();
if (sNewFile != null) {
File f = new File(sNewFile);
info.sDestDir = f.getParent();
files[0].sDestFileName = sNewFile;
String sNewPath = new File(sNewFile).getParent();
if (sNewPath != null)
sDefPath = sNewPath;
}
} else {
DirectoryDialog dDialog = new DirectoryDialog(shellForChildren,
SWT.SYSTEM_MODAL);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -