downloadtabletreesorter.java

来自「SANCHO」· Java 代码 · 共 233 行

JAVA
233
字号
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.transfer.downloads;import org.eclipse.jface.viewers.ITableLabelProvider;import org.eclipse.jface.viewers.TableTreeViewer;import org.eclipse.jface.viewers.Viewer;import sancho.model.mldonkey.Client;import sancho.model.mldonkey.File;import sancho.model.mldonkey.enums.EnumFileState;import sancho.view.preferences.PreferenceLoader;import sancho.view.transfer.FileClient;import sancho.view.utility.SResources;import sancho.view.viewer.GSorter;import sancho.view.viewer.GView;public class DownloadTableTreeSorter extends GSorter {  private ITableLabelProvider labelProvider;  private boolean maintainSortOrder = false;  public DownloadTableTreeSorter(GView gViewer) {    super(gViewer);  }  public int category(Object element) {    if (element instanceof File)      return 1;    else if (element instanceof FileClient)      return 2;    return 3;  }  public int compare(Viewer viewer, Object e1, Object e2) {    int cat1 = category(e1);    int cat2 = category(e2);    if (cat1 != cat2)      return cat1 - cat2;    // fill in all columns    if (e1 instanceof File) {      File file1 = (File) e1;      File file2 = (File) e2;      switch (cViewer.getColumnIDs()[columnIndex]) {        case DownloadTableTreeView.ID :          return compareInts(file1.getId(), file2.getId());        case DownloadTableTreeView.NETWORK :          return compareStrings(file1.getEnumNetwork().getName(), file2.getEnumNetwork().getName());        case DownloadTableTreeView.NAME :          return compareStrings(file1.getName(), file2.getName());        case DownloadTableTreeView.SIZE :          return compareLongs(file1.getSize(), file2.getSize());        case DownloadTableTreeView.DOWNLOADED :          return compareLongs(file1.getDownloaded(), file2.getDownloaded());        case DownloadTableTreeView.PERCENT :          return compareInts(file1.getPercent(), file2.getPercent());        case DownloadTableTreeView.SOURCES :          return compareInts(file1.getSources(), file2.getSources());        case DownloadTableTreeView.AVAIL :          return compareInts(file1.getRelativeAvail(), file2.getRelativeAvail());        case DownloadTableTreeView.RATE :          if (file1.getFileStateEnum() == EnumFileState.DOWNLOADED)            return -1;          else if (file2.getFileStateEnum() == EnumFileState.DOWNLOADED)            return 1;          else if (file1.getFileStateEnum() == EnumFileState.QUEUED)            return 2;          else if (file2.getFileStateEnum() == EnumFileState.QUEUED)            return -2;          else if (file1.getFileStateEnum() == EnumFileState.PAUSED)            return 3;          else if (file2.getFileStateEnum() == EnumFileState.PAUSED)            return -3;          else            return compareFloats(file1.getRate(), file2.getRate());        case DownloadTableTreeView.CHUNKS :          return compareInts(file1.getNumChunks(), file2.getNumChunks());        case DownloadTableTreeView.ETA :          labelProvider = (ITableLabelProvider) ((TableTreeViewer) viewer).getLabelProvider();          if (labelProvider.getColumnText(e1, columnIndex).equals(SResources.S_ES))            return 1;          else if (labelProvider.getColumnText(e2, columnIndex).equals(SResources.S_ES))            return -1;          else            return compareLongs(file1.getETA(), file2.getETA());        case DownloadTableTreeView.PRIORITY :          return compareInts(file1.getPriority(), file2.getPriority());        case DownloadTableTreeView.LAST :          return compareInts(file1.getLastSeen(), file2.getLastSeen());        case DownloadTableTreeView.AGE :          return compareLongs(file1.getAge(), file2.getAge());        case DownloadTableTreeView.ETA2 :          return compareLongs(file1.getETA2(), file2.getETA2());        case DownloadTableTreeView.NUMCLIENTS :          return compareInts(file1.getNumClients(), file2.getNumClients());        case DownloadTableTreeView.NUMSOURCES :          return compareInts(file1.getNumSources(), file2.getNumSources());        default :          return 0;      }    } else {      Client client1 = ((FileClient) e1).getClient();      Client client2 = ((FileClient) e2).getClient();      switch (cViewer.getColumnIDs()[columnIndex]) {        case DownloadTableTreeView.ID :          return compareInts(client1.getId(), client2.getId());        case DownloadTableTreeView.NETWORK :          return compareStrings(client1.getEnumNetwork().getName(), client2.getEnumNetwork().getName());        case DownloadTableTreeView.NAME :          return compareStrings(client1.getName(), client2.getName());        case DownloadTableTreeView.SIZE :        case DownloadTableTreeView.PRIORITY :          labelProvider = (ITableLabelProvider) ((TableTreeViewer) viewer).getLabelProvider();          return compareStrings(labelProvider.getColumnText(e1, columnIndex), labelProvider.getColumnText(e2,              columnIndex));        case DownloadTableTreeView.DOWNLOADED :          return compareLongs(client1.getDownloaded(), client2.getDownloaded());        case DownloadTableTreeView.AGE :          return compareInts(client1.getConnectedTime(), client2.getConnectedTime());        case DownloadTableTreeView.SOURCES :          return compareAddrs(client1.getAddr(), client2.getAddr());        case DownloadTableTreeView.PERCENT :          return compareInts(client1.getPort(), client2.getPort());        case DownloadTableTreeView.CHUNKS :          FileClient fileClient1 = (FileClient) e1;          FileClient fileClient2 = (FileClient) e2;          return compareInts(client1.getNumChunks(fileClient1.getFile().getId()), client2              .getNumChunks(fileClient2.getFile().getId()));        default :          return 0;      }    }  }  public boolean isSorterProperty(Object element, String property) {    if (maintainSortOrder && element instanceof File) {      File file = (File) element;      switch (cViewer.getColumnIDs()[columnIndex]) {        case DownloadTableTreeView.DOWNLOADED :          return file.hasChangedBit(File.CHANGED_DOWNLOADED);        //return property.equals(File.CHANGED_DOWNLOADED);        case DownloadTableTreeView.PERCENT :          return file.hasChangedBit(File.CHANGED_PERCENT);        //return property.equals(File.CHANGED_PERCENT);        case DownloadTableTreeView.SOURCES :          return file.hasChangedBit(File.CHANGED_SOURCES);        //return property.equals(File.CHANGED_ACTIVE);        case DownloadTableTreeView.AVAIL :          return file.hasChangedBit(File.CHANGED_RAVAIL);        // return property.equals(File.CHANGED_AVAIL);        case DownloadTableTreeView.RATE :          return file.hasChangedBit(File.CHANGED_RATE) || file.hasChangedBit(File.CHANGED_STATE);        // return property.equals(File.CHANGED_RATE) || property.equals(File.CHANGED_STATE);        case DownloadTableTreeView.ETA :          return file.hasChangedBit(File.CHANGED_ETA);        // return property.equals(File.CHANGED_ETA);        case DownloadTableTreeView.LAST :          return file.hasChangedBit(File.CHANGED_LAST);        //return property.equals(File.CHANGED_LAST);        default :          return false;      }    }    return false;  }  public boolean sortOrder(int columnIndex) {    switch (cViewer.getColumnIDs()[columnIndex]) {      case DownloadTableTreeView.ID :      case DownloadTableTreeView.NAME :      case DownloadTableTreeView.NETWORK :      case DownloadTableTreeView.LAST :      case DownloadTableTreeView.ETA :        return true;      default :        return false;    }  }  public void updateDisplay() {    maintainSortOrder = PreferenceLoader.loadBoolean("maintainSortOrder");  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?