📄 mytorrentsview.java
字号:
if (categories[i] == currentCategory) {
catButton.setSelection(true);
}
catButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Button curButton = (Button)e.widget;
boolean isEnabled = curButton.getSelection();
Control[] controls = cCategories.getChildren();
if (!isEnabled)
curButton = (Button)controls[0];
for (int i = 0; i < controls.length; i++) {
Button b = (Button)controls[i];
if (b != curButton && b.getSelection())
b.setSelection(false);
else if (b == curButton && !b.getSelection())
b.setSelection(true);
}
activateCategory( (Category)curButton.getData("Category") );
}
});
catButton.addListener(SWT.MouseHover, new Listener() {
public void handleEvent(Event event) {
Button curButton = (Button)event.widget;
Category curCategory = (Category)curButton.getData("Category");
List dms = curCategory.getDownloadManagers();
long ttlActive = 0;
long ttlSize = 0;
long ttlRSpeed = 0;
long ttlSSpeed = 0;
int count = 0;
for (Iterator iter = dms.iterator(); iter.hasNext();) {
DownloadManager dm = (DownloadManager) iter.next();
if (!isOurDownloadManager(dm))
continue;
count++;
if (dm.getState() == DownloadManager.STATE_DOWNLOADING
|| dm.getState() == DownloadManager.STATE_SEEDING)
ttlActive++;
ttlSize += dm.getSize();
ttlRSpeed += dm.getStats().getDataReceiveRate();
ttlSSpeed += dm.getStats().getDataSendRate();
}
if (count == 0) {
curButton.setToolTipText(null);
return;
}
curButton.setToolTipText("Total: " + count + "\n"
+ "Downloading/Seeding: " + ttlActive + "\n"
+ "\n"
+ "Speed: "
+ DisplayFormatters.formatByteCountToKiBEtcPerSec(ttlRSpeed / count) + "/"
+ DisplayFormatters.formatByteCountToKiBEtcPerSec(ttlSSpeed / count) + "\n"
+ "Size: " + DisplayFormatters.formatByteCountToKiBEtc(ttlSize));
}
});
final DropTarget tabDropTarget = new DropTarget(catButton, DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK);
Transfer[] types = new Transfer[] { TextTransfer.getInstance()};
tabDropTarget.setTransfer(types);
tabDropTarget.addDropListener(new DropTargetAdapter() {
public void dragOver(DropTargetEvent e) {
if(drag_drop_line_start >= 0)
e.detail = DND.DROP_MOVE;
else
e.detail = DND.DROP_NONE;
}
public void drop(DropTargetEvent e) {
e.detail = DND.DROP_NONE;
//System.out.println("DragDrop on Button:" + drag_drop_line_start);
if(drag_drop_line_start >= 0) {
drag_drop_line_start = -1;
assignSelectedToCategory((Category)catButton.getData("Category"));
}
}
});
catButton.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
if (tabDropTarget != null && !tabDropTarget.isDisposed()) {
tabDropTarget.dispose();
}
}
});
Menu menu = new Menu(getComposite().getShell(), SWT.POP_UP);
final MenuItem itemDelete = new MenuItem(menu, SWT.PUSH);
Messages.setLanguageText(itemDelete, "MyTorrentsView.menu.category.delete");
menu.setDefaultItem(itemDelete);
if (categories[i].getType() == Category.TYPE_USER) {
itemDelete.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
Category catToDelete = (Category)catButton.getData("Category");
if (catToDelete != null) {
java.util.List managers = catToDelete.getDownloadManagers();
// move to array,since setcategory removed it from the category,
// which would mess up our loop
DownloadManager dms[] = (DownloadManager [])managers.toArray(new DownloadManager[managers.size()]);
for (int i = 0; i < dms.length; i++) {
dms[i].getDownloadState().setCategory(null);
}
if (currentCategory == catToDelete){
activateCategory(CategoryManager.getCategory(Category.TYPE_ALL));
}else{
// always activate as deletion of this one might have
// affected the current view
activateCategory( currentCategory );
}
CategoryManager.removeCategory(catToDelete);
}
}
});
itemDelete.setEnabled(true);
}
else {
itemDelete.setEnabled(false);
}
catButton.setMenu(menu);
}
cCategories.layout();
getComposite().layout();
// layout hack - relayout
if (catResizeAdapter == null) {
catResizeAdapter = new ControlAdapter() {
public void controlResized(ControlEvent event) {
if (getComposite().isDisposed() || cCategories.isDisposed())
return;
GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_END);
int parentWidth = cCategories.getParent().getClientArea().width;
int catsWidth = cCategories.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
// give text a 5 pixel right padding
int textWidth = 5
+ cHeader.computeSize(SWT.DEFAULT, SWT.DEFAULT).x
+ cHeader.getBorderWidth() * 2;
Object layoutData = cHeader.getLayoutData();
if (layoutData instanceof GridData) {
GridData labelGrid = (GridData) layoutData;
textWidth += labelGrid.horizontalIndent;
}
if (textWidth + catsWidth > parentWidth) {
gridData.widthHint = parentWidth - textWidth;
}
cCategories.setLayoutData(gridData);
cCategories.getParent().layout(true);
}
};
getTableComposite().addControlListener(catResizeAdapter);
}
catResizeAdapter.controlResized(null);
}
}
private boolean isOurDownloadManager(DownloadManager dm) {
if (!isInCategory(dm, currentCategory)) {
return false;
}
boolean bCompleted = dm.isDownloadComplete(bDNDalwaysIncomplete);
boolean bOurs = (bCompleted && isSeedingView)
|| (!bCompleted && !isSeedingView);
// System.out.println("ourDM? " + sTableID + "; " + dm.getDisplayName()
// + "; Complete=" + bCompleted + ";Ours=" + bOurs + ";bc"
// + dm.getStats().getDownloadCompleted(false) + ";"
// + dm.getStats().getDownloadCompleted(true));
if (bOurs && sLastSearch.length() > 0) {
try {
String[][] names = { {"", dm.getDisplayName()},
{"t:", dm.getTorrent().getAnnounceURL().getHost()},
{"st:", "" + dm.getState()}
};
String name = names[0][1];
String tmpSearch = sLastSearch;
for(int i = 0; i < names.length; i++){
if (tmpSearch.startsWith(names[i][0])) {
tmpSearch = tmpSearch.substring(names[i][0].length());
name = names[i][1];
}
}
String s = bRegexSearch ? tmpSearch : "\\Q"
+ tmpSearch.replaceAll("[|;]", "\\\\E|\\\\Q") + "\\E";
Pattern pattern = Pattern.compile(s, Pattern.CASE_INSENSITIVE);
if (!pattern.matcher(name).find())
bOurs = false;
} catch (Exception e) {
// Future: report PatternSyntaxException message to user.
}
}
return bOurs;
}
public Table createTable(Composite panel) {
Table table = new Table(cTablePanel, iTableStyle);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
table.addKeyListener(this);
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
computePossibleActions();
UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
if (uiFunctions != null) {
uiFunctions.refreshIconBar();
}
}
});
}
});
cTablePanel.layout();
return table;
}
public void runDefaultAction() {
DownloadManager dm = (DownloadManager)getFirstSelectedDataSource();
if (dm != null) {
UIFunctions uiFunctions = UIFunctionsManager.getUIFunctions();
if (uiFunctions != null) {
uiFunctions.openManagerView(dm);
}
}
}
public void fillTorrentMenu(final Menu menu) {
Object[] dms = getSelectedDataSources();
boolean hasSelection = (dms.length > 0);
isTrackerOn = TRTrackerUtils.isTrackerEnabled();
// Enable/Disable Logic
boolean bChangeDir = hasSelection;
boolean start, stop, changeUrl, barsOpened, forceStart;
boolean forceStartEnabled, recheck, manualUpdate, fileMove, fileRescan;
changeUrl = barsOpened = manualUpdate = fileMove = fileRescan = true;
forceStart = forceStartEnabled = recheck = start = stop = false;
boolean upSpeedDisabled = false;
long totalUpSpeed = 0;
boolean upSpeedUnlimited = false;
long upSpeedSetMax = 0;
boolean downSpeedDisabled = false;
long totalDownSpeed = 0;
boolean downSpeedUnlimited = false;
long downSpeedSetMax = 0;
boolean allScanSelected = true;
boolean allScanNotSelected = true;
boolean allStopped = true;
if (hasSelection) {
for (int i = 0; i < dms.length; i++) {
DownloadManager dm = (DownloadManager) dms[i];
try {
int maxul = dm.getStats().getUploadRateLimitBytesPerSecond();
if (maxul == 0) {
upSpeedUnlimited = true;
}else{
if ( maxul > upSpeedSetMax ){
upSpeedSetMax = maxul;
}
}
if (maxul == -1) {
maxul = 0;
upSpeedDisabled = true;
}
totalUpSpeed += maxul;
int maxdl = dm.getStats().getDownloadRateLimitBytesPerSecond();
if (maxdl == 0) {
downSpeedUnlimited = true;
}else{
if ( maxdl > downSpeedSetMax ){
downSpeedSetMax = maxdl;
}
}
if (maxdl == -1) {
maxdl = 0;
downSpeedDisabled = true;
}
totalDownSpeed += maxdl;
} catch (Exception ex) {
Debug.printStackTrace(ex);
}
if (dm.getTrackerClient() == null) {
changeUrl = false;
}
if (barsOpened && !MinimizedWindow.isOpen(dm)) {
barsOpened = false;
}
stop = stop || ManagerUtils.isStopable(dm);
start = start || ManagerUtils.isStartable(dm);
recheck = recheck || dm.canForceRecheck();
forceStartEnabled = forceStartEnabled
|| ManagerUtils.isForceStartable(dm);
forceStart = forceStart || dm.isForceStart();
boolean stopped = ManagerUtils.isStopped(dm);
allStopped &= stopped;
fileMove = fileMove && stopped && dm.isPersistent();
if (userMode > 1) {
TRTrackerAnnouncer trackerClient = dm.getTrackerClient();
if (trackerClient != null) {
boolean update_state = ((SystemTime.getCurrentTime() / 1000
- trackerClient.getLastUpdateTime() >= TRTrackerAnnouncer.REFRESH_MINIMUM_SECS));
manualUpdate = manualUpdate & update_state;
}
}
int state = dm.getState();
bChangeDir &= (state == DownloadManager.STATE_ERROR || state == DownloadManager.STATE_STOPPED)
&& dm.isDownloadComplete(false) && !dm.filesExist();
boolean scan = dm.getDownloadState().getFlag( DownloadManagerState.FLAG_SCAN_INCOMPLETE_PIECES );
// include DND files in incomplete stat, since a recheck may
// find those files have been completed
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -