📄 torrentlistview.java
字号:
}
});
}
protected void _expandNameColumn() {
int viewWidth = getClientArea().width;
int columnWidthTotal = 0;
int nameColumnIdx = -1;
TableColumnCore[] columns = getVisibleColumns();
for (int i = 0; i < columns.length; i++) {
if (columns[i].getName().equals("name")) {
nameColumnIdx = i;
} else {
columnWidthTotal += columns[i].getWidth() + (ListRow.MARGIN_WIDTH * 2);
}
}
if (nameColumnIdx >= 0) {
columns[nameColumnIdx].setWidth(viewWidth - columnWidthTotal
- (ListRow.MARGIN_WIDTH * 2));
}
}
private void fixupRowCount() {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
_fixupRowCount();
}
});
}
private void _fixupRowCount() {
if (dataArea.isDisposed()) {
return;
}
int changeCount = 0;
int curRowCount = size(true);
int maxRows = bAllowScrolling ? 100000 : dataArea.getSize().y
/ ListRow.ROW_HEIGHT;
long totalPossible = getTotalPossible();
if (curRowCount < maxRows && totalPossible > curRowCount) {
DownloadManager[] managers = sortDMList(globalManager.getDownloadManagers());
int pos = 0;
for (int i = 0; i < totalPossible && curRowCount < maxRows; i++) {
DownloadManager dm = managers[i];
if (isOurDownload(dm)) {
if (!dataSourceExists(dm)) {
addDataSource(dm, false, -1);
changeCount++;
curRowCount++;
pos++;
}
}
}
} else {
while (curRowCount > maxRows) {
ListRow row = getRow(--curRowCount);
if (row != null) {
removeDataSource(row.getDataSource(true), true);
}
changeCount++;
}
}
updateCount();
}
private DownloadManager[] sortDMList(List dms) {
DownloadManager[] dmsArray = (DownloadManager[]) dms.toArray(new DownloadManager[0]);
Arrays.sort(dmsArray, new Comparator() {
public int compare(Object o1, Object o2) {
DownloadManager dm1 = (DownloadManager) o1;
DownloadManager dm2 = (DownloadManager) o2;
boolean bOurDL1 = isOurDownload(dm1);
boolean bOurDL2 = isOurDownload(dm2);
if (bOurDL1 != bOurDL2) {
return bOurDL1 ? -1 : 1;
}
long l1 = dm1 == null ? 0 : dm1.getDownloadState().getLongParameter(
DownloadManagerState.PARAM_DOWNLOAD_ADDED_TIME);
long l2 = dm2 == null ? 0 : dm2.getDownloadState().getLongParameter(
DownloadManagerState.PARAM_DOWNLOAD_ADDED_TIME);
return l1 == l2 ? 0 : l1 > l2 ? -1 : 1;
}
});
return dmsArray;
}
// GlobalManagerListener
public void destroyInitiated() {
// TODO Auto-generated method stub
}
// GlobalManagerListener
public void destroyed() {
// TODO Auto-generated method stub
}
// GlobalManagerListener
public void downloadManagerAdded(DownloadManager dm) {
//regetDownloads();
dm.addListener(dmListener);
}
// GlobalManagerListener
public void downloadManagerRemoved(DownloadManager dm) {
removeDataSource(dm, true);
fixupRowCount();
}
// GlobalManagerListener
public void seedingStatusChanged(boolean seeding_only_mode) {
// TODO Auto-generated method stub
}
public boolean isOurDownload(DownloadManager dm) {
boolean bDownloadComplete = dm.isDownloadComplete(false);
switch (viewMode) {
/*
case VIEW_DOWNLOADING:
if (bDownloadComplete) {
return false;
}
int state = dm.getState();
return state != DownloadManager.STATE_STOPPED
&& state != DownloadManager.STATE_ERROR
&& state != DownloadManager.STATE_QUEUED;
*/
case VIEW_DOWNLOADING:
return !bDownloadComplete;
case VIEW_RECENT_DOWNLOADED:
return bDownloadComplete;
case VIEW_MY_MEDIA:
return true;
}
return false;
}
private static class dowloadManagerListener implements
DownloadManagerListener
{
private final TorrentListView view;
/**
* @param view
*/
public dowloadManagerListener(TorrentListView view) {
this.view = view;
}
public void completionChanged(DownloadManager manager, boolean bCompleted) {
view.regetDownloads();
}
public void downloadComplete(DownloadManager manager) {
view.regetDownloads();
}
public void filePriorityChanged(DownloadManager download,
DiskManagerFileInfo file) {
}
public void positionChanged(DownloadManager download, int oldPosition,
int newPosition) {
}
public void stateChanged(DownloadManager manager, int state) {
//System.out.println("SC " + manager + " " + state);
if (!view.isOurDownload(manager)) {
if (view.getRow(manager) != null) {
view.removeDataSource(manager, false);
view.regetDownloads();
}
// might be able to add another in..
//view.fixupRowCount();
// could be optimized so we don't call updateCount twice (once in fixup)
view.updateCount();
} else {
view.fixupRowCount();
}
try {
view.listeners_mon.enter();
for (Iterator iter = view.listeners.iterator(); iter.hasNext();) {
TorrentListViewListener l = (TorrentListViewListener) iter.next();
l.stateChanged(manager);
}
} finally {
view.listeners_mon.exit();
}
}
}
private void updateCount() {
try {
listeners_mon.enter();
for (Iterator iter = listeners.iterator(); iter.hasNext();) {
TorrentListViewListener l = (TorrentListViewListener) iter.next();
l.countChanged();
}
} finally {
listeners_mon.exit();
}
if (countArea != null) {
Utils.execSWTThread(new AERunnable() {
public void runSupport() {
if (countArea == null) {
return;
}
long size1 = size(true);
long size2 = getTotalPossible();
if (size1 == size2) {
countArea.setText(MessageText.getString("MainWindow.v3.count",
new String[] { "" + size1
}));
} else {
countArea.setText(MessageText.getString("MainWindow.v3.xofx",
new String[] {
"" + size1,
"" + size2
}));
}
}
});
}
}
private long getTotalPossible() {
int count;
if (viewMode == VIEW_DOWNLOADING) {
count = globalManager.downloadManagerCount(false);
} else if (viewMode == VIEW_RECENT_DOWNLOADED) {
count = globalManager.downloadManagerCount(true);
} else {
count = globalManager.getDownloadManagers().size();
}
return count;
}
public void addListener(TorrentListViewListener l) {
listeners.add(l);
l.countChanged();
l.stateChanged(null);
}
public void removeListener(TorrentListViewListener l) {
listeners.remove(l);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -