📄 opentorrentwindow.java
字号:
cmbStartMode.setLayoutData(gridData);
updateStartModeCombo();
cmbStartMode.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
setSelectedStartMode(cmbStartMode.getSelectionIndex());
}
});
label = new Label(cTorrentModes, SWT.NONE);
gridData = new GridData(GridData.VERTICAL_ALIGN_CENTER);
label.setLayoutData(gridData);
Messages.setLanguageText(label, "OpenTorrentWindow.addPosition");
cmbQueueLocation = new Combo(cTorrentModes, SWT.BORDER | SWT.READ_ONLY);
gridData = new GridData(GridData.FILL_HORIZONTAL);
cmbQueueLocation.setLayoutData(gridData);
updateQueueLocationCombo();
cmbQueueLocation.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
setSelectedQueueLocation(cmbQueueLocation.getSelectionIndex());
}
});
}
// Save To..
// =========
cSaveTo = new Composite(cTorrentOptions, SWT.NONE);
layout = FixupLayout(new GridLayout(), false);
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.verticalSpacing = 0;
layout.numColumns = 2;
cSaveTo.setLayout(layout);
Label lblDataDir = new Label(cSaveTo, SWT.NONE);
gridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
gridData.horizontalSpan = 2;
lblDataDir.setLayoutData(gridData);
Messages.setLanguageText(lblDataDir, "OpenTorrentWindow.dataLocation");
cmbDataDir = new Combo(cSaveTo, SWT.BORDER);
gridData = new GridData(GridData.FILL_HORIZONTAL);
cmbDataDir.setLayoutData(gridData);
cmbDataDir.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (bSkipDataDirModify) {
return;
}
sDestDir = cmbDataDir.getText();
int[] indexes = tableTorrents.getSelectionIndices();
for (int i = 0; i < indexes.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indexes[i]);
if (!info.allFilesMoving())
info.sDestDir = sDestDir;
}
tableTorrents.clearAll();
checkSeedingMode();
File file = new File(sDestDir);
if (!file.isDirectory()) {
cmbDataDir.setBackground(Colors.colorErrorBG);
} else {
cmbDataDir.setBackground(null);
}
cmbDataDir.redraw();
cmbDataDir.update();
}
});
updateDataDirCombo();
if (sDestDir != null && sDestDir.length() > 0) {
cmbDataDir.add(sDestDir);
}
dirList = COConfigurationManager.getStringListParameter("saveTo_list");
StringIterator iter = dirList.iterator();
while (iter.hasNext()) {
String s = iter.next();
if (!s.equals(sDestDir)) {
cmbDataDir.add(s);
}
}
Button browseData = new Button(cSaveTo, SWT.PUSH);
Messages.setLanguageText(browseData, "ConfigView.button.browse");
browseData.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
String sSavePath;
String sDefPath = cmbDataDir.getText();
if (sDefPath.length() > 0) {
File f = new File(sDefPath);
if (!f.exists()) {
FileUtil.mkdirs(f);
}
}
DirectoryDialog dDialog = new DirectoryDialog(shell, SWT.SYSTEM_MODAL);
dDialog.setFilterPath(sDefPath);
dDialog.setMessage(MessageText.getString("MainWindow.dialog.choose.savepath_forallfiles"));
sSavePath = dDialog.open();
if (sSavePath != null) {
cmbDataDir.setText(sSavePath);
}
File file = new File(sDestDir);
if (!file.isDirectory()) {
cmbDataDir.setBackground(Colors.colorErrorBG);
} else {
cmbDataDir.setBackground(null);
}
}
});
gridData = new GridData(GridData.FILL_HORIZONTAL);
cSaveTo.setLayoutData(gridData);
// File List
// =========
Group gFilesArea = new Group(shell, SWT.NONE);
gridData = new GridData(GridData.FILL_BOTH);
gFilesArea.setLayoutData(gridData);
layout = FixupLayout(new GridLayout(), true);
gFilesArea.setLayout(layout);
Messages.setLanguageText(gFilesArea, "OpenTorrentWindow.fileList");
createTableDataFiles(gFilesArea);
// Ok, cancel
cArea = new Composite(shell, SWT.NULL);
layout = new GridLayout();
layout.marginHeight = 0;
layout.numColumns = 2;
cArea.setLayout(layout);
ok = new Button(cArea, SWT.PUSH);
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) {
okPressed();
}
});
checkSeedingMode();
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);
}
});
Utils.setGridData(cArea, GridData.HORIZONTAL_ALIGN_END, ok,
MIN_BUTTON_HEIGHT);
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);
Utils.createTorrentDropTarget(shell, false);
shell.pack();
if (!Utils.linkShellMetricsToConfig(shell, "OpenTorrentWindow")) {
Utils.centreWindow(shell);
}
resizeTables(3);
shell.open();
if (cSaveTo != null && !cSaveTo.isDisposed()) {
cSaveTo.setFocus();
}
}
protected void okPressed() {
if (bClosed) {
return;
}
if ((torrentList.size() == 0 && downloaders.size() == 0)) {
close(true, false);
return;
}
File file = new File(cmbDataDir.getText());
File fileDefSavePath = new File(
COConfigurationManager.getStringParameter(PARAM_DEFSAVEPATH));
if (file.equals(fileDefSavePath) && !fileDefSavePath.isDirectory()) {
FileUtil.mkdirs(fileDefSavePath);
}
if (cmbDataDir.getText().length() == 0 || !file.isDirectory()) {
Utils.openMessageBox(shellForChildren, SWT.OK | SWT.ICON_ERROR,
"OpenTorrentWindow.mb.noGlobalDestDir",
new String[] { file.toString()
});
cmbDataDir.setFocus();
return;
}
String sExistingFiles = "";
int iNumExistingFiles = 0;
for (int i = 0; i < torrentList.size(); i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(i);
file = new File(info.sDestDir);
if (!file.isDirectory() && !FileUtil.mkdirs(file)) {
Utils.openMessageBox(shellForChildren, SWT.OK | SWT.ICON_ERROR,
"OpenTorrentWindow.mb.noDestDir", new String[] {
file.toString(),
info.getTorrentName()
});
return;
}
if (!info.isValid) {
Utils.openMessageBox(shellForChildren, SWT.OK | SWT.ICON_ERROR,
"OpenTorrentWindow.mb.notValid",
new String[] { info.getTorrentName()
});
return;
}
TorrentFileInfo[] files = info.getFiles();
for (int j = 0; j < files.length; j++) {
TorrentFileInfo fileInfo = files[j];
if (fileInfo.getDestFile().exists()) {
sExistingFiles += fileInfo.sFileName + " - " + info.getTorrentName()
+ "\n";
iNumExistingFiles++;
if (iNumExistingFiles > 5) {
// this has the potential effect of adding 5 files from the first
// torrent and then 1 file from each of the remaining torrents
break;
}
}
}
}
if (sExistingFiles.length() > 0) {
if (Utils.openMessageBox(shellForChildren, SWT.OK | SWT.CANCEL
| SWT.ICON_WARNING, "OpenTorrentWindow.mb.existingFiles",
new String[] { sExistingFiles
}) != SWT.OK) {
return;
}
}
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
if (dirList.size() > 15)
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("DefaultDir.AutoUpdate")
&& !COConfigurationManager.getBooleanParameter("Use default data dir"))
COConfigurationManager.setParameter(PARAM_DEFSAVEPATH, sDestDir);
openTorrents();
close(true, false);
}
/**
* @param layout
* @return
*/
private GridLayout FixupLayout(GridLayout layout, boolean bFixMargin) {
if (Constants.isOSX) {
layout.horizontalSpacing = 0;
layout.verticalSpacing = 0;
if (bFixMargin) {
layout.marginHeight = 0;
layout.marginWidth = 0;
}
}
return layout;
}
private void updateDataDirCombo() {
if (cmbDataDir == null) {
return;
}
try {
bSkipDataDirModify = true;
int[] indexes = tableTorrents.getSelectionIndices();
if (indexes.length == 0) {
cmbDataDir.setText(sDestDir);
return;
}
boolean allSame = true;
String lastDir = null;
for (int i = 0; i < indexes.length; i++) {
TorrentInfo info = (TorrentInfo) torrentList.get(indexes[i]);
if (lastDir != null && !info.sDestDir.equals(lastDir)) {
allSame = false;
break;
}
lastDir = info.sDestDir;
}
if (allSame && lastDir != null) {
cmbDataDir.setText(lastDir);
sDestDir = lastDir;
} else {
cmbDataDir.setText("");
}
} finally {
bSkipDataDirModify = false;
}
}
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -