📄 opentorrentwindow.java
字号:
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 instanceof Composite) || (c instanceof Table)) {
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(core, 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));
}
updateDataDirCombo();
updateStartModeCombo();
updateQueueLocationCombo();
dataFileTable.setItemCount(dataFiles.size());
dataFileTable.clearAll();
updateSize();
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());
checkSeedingMode();
}
}
});
}
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) {
chageFileDestination(new int[] { 0
});
} else {
DirectoryDialog dDialog = new DirectoryDialog(shellForChildren,
SWT.SYSTEM_MODAL);
dDialog.setFilterPath(sDefPath);
dDialog.setMessage(MessageText.getString("MainWindow.dialog.choose.savepath")
+ " (" + info.getTorrentName() + ")");
String sNewDir = dDialog.open();
if (sNewDir == null)
return;
info.sDestDir = sNewDir;
for (int j = 0; j < files.length; j++) {
TorrentFileInfo fileInfo = files[j];
File file = new File(sNewDir, fileInfo.sFileName);
fileInfo.sDestFileName = file.getAbsolutePath();
String sNewPath = file.getParent();
if (sNewPath != null)
sDefPath = sNewPath;
}
}
} // for i
checkSeedingMode();
}
});
tableTorrents.setMenu(menu);
Composite cTorrentListRight = new Composite(cArea, SWT.NONE);
gridData = new GridData();
cTorrentListRight.setLayoutData(gridData);
RowLayout rLayout = new RowLayout(SWT.VERTICAL);
rLayout.marginBottom = 0;
rLayout.marginLeft = 0;
rLayout.marginRight = 0;
rLayout.marginTop = 0;
if (!Constants.isOSX)
rLayout.spacing = 0;
rLayout.fill = true;
cTorrentListRight.setLayout(rLayout);
Button torMoveUp = new Button(cTorrentListRight, SWT.PUSH);
torMoveUp.setImage(ImageRepository.getImage("up"));
torMoveUp.setToolTipText(MessageText.getString("Button.moveUp"));
torMoveUp.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int[] indices = tableTorrents.getSelectionIndices();
if (indices.length == 0)
return;
Arrays.sort(indices);
if (indices[0] == 0)
return;
for (int i = 0; i < indices.length; i++) {
int pos = indices[i];
Object save = torrentList.get(pos - 1);
torrentList.set(pos - 1, torrentList.get(pos));
torrentList.set(pos, save);
indices[i]--;
}
tableTorrents.setSelection(indices);
tableTorrents.clearAll();
}
});
Button torMoveDown = new Button(cTorrentListRight, SWT.PUSH);
torMoveDown.setImage(ImageRepository.getImage("down"));
torMoveDown.setToolTipText(MessageText.getString("Button.moveDown"));
torMoveDown.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
int[] indices = tableTorrents.getSelectionIndices();
if (indices.length == 0)
return;
Arrays.sort(indices);
int max = indices.length - 1;
if (indices[max] == torrentList.size() - 1)
return;
for (int i = max; i >= 0; i--) {
int pos = indices[i];
Object save = torrentList.get(pos + 1);
torrentList.set(pos + 1, torrentList.get(pos));
torrentList.set(pos, save);
indices[i]++;
}
tableTorrents.setSelection(indices);
tableTorrents.clearAll();
}
});
Button torMoveRemove = new Button(cTorrentListRight, SWT.PUSH);
torMoveRemove.setToolTipText(MessageText.getString("OpenTorrentWindow.torrent.remove"));
torMoveRemove.setImage(ImageRepository.getImage("delete"));
torMoveRemove.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
deleteSelected(tableTorrents, torrentList);
}
});
}
/**
* @param iLocation
*/
protected void setSelectedQueueLocation(int iLocation) {
int[] indices = tableTorrents.getSelectionIndices();
for (int i = 0; i < indices.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indices[i]);
info.iQueueLocation = iLocation;
}
updateQueueLocationCombo();
tableTorrents.clear(indices);
}
/**
* @param iStartID
*/
protected void setSelectedStartMode(int iStartID) {
int[] indices = tableTorrents.getSelectionIndices();
for (int i = 0; i < indices.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indices[i]);
info.iStartID = iStartID;
}
checkSeedingMode();
updateStartModeCombo();
tableTorrents.clear(indices);
}
private void checkSeedingMode() {
// Check for seeding
for (int i = 0; i < torrentList.size(); i++) {
boolean bTorrentValid = true;
TorrentInfo info = (TorrentInfo) torrentList.get(i);
if (info.iStartID == STARTMODE_SEEDING) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -