downloadtabletreemenulistener.java

来自「SANCHO」· Java 代码 · 共 787 行 · 第 1/2 页

JAVA
787
字号
/* * 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 java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.dialogs.Dialog;import org.eclipse.jface.dialogs.IDialogConstants;import org.eclipse.jface.dialogs.InputDialog;import org.eclipse.jface.viewers.IStructuredSelection;import org.eclipse.jface.viewers.SelectionChangedEvent;import org.eclipse.swt.SWT;import org.eclipse.swt.dnd.DND;import org.eclipse.swt.dnd.DragSource;import org.eclipse.swt.dnd.DragSourceAdapter;import org.eclipse.swt.dnd.DragSourceEvent;import org.eclipse.swt.dnd.DropTarget;import org.eclipse.swt.dnd.DropTargetAdapter;import org.eclipse.swt.dnd.DropTargetEvent;import org.eclipse.swt.dnd.TextTransfer;import org.eclipse.swt.dnd.Transfer;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Button;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Control;import org.eclipse.swt.widgets.Event;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.MessageBox;import org.eclipse.swt.widgets.Scale;import org.eclipse.swt.widgets.Shell;import sancho.core.Sancho;import sancho.model.mldonkey.Client;import sancho.model.mldonkey.File;import sancho.model.mldonkey.enums.EnumFileState;import sancho.model.mldonkey.enums.EnumFormat;import sancho.model.mldonkey.enums.EnumNetwork;import sancho.model.mldonkey.enums.EnumPriority;import sancho.model.mldonkey.utility.OpCodes;import sancho.utility.SwissArmy;import sancho.view.preferences.PreferenceLoader;import sancho.view.transfer.FileClient;import sancho.view.transfer.FileDetailDialog;import sancho.view.transfer.UniformResourceLocator;import sancho.view.utility.SResources;import sancho.view.utility.Spinner;import sancho.view.utility.WidgetFactory;import sancho.view.viewer.GView;import sancho.view.viewer.actions.AddClientAsFriendAction;import sancho.view.viewer.actions.ClientDetailAction;import sancho.view.viewer.actions.CopyED2KLinkToClipboardAction;import sancho.view.viewer.table.GTableMenuListener;public class DownloadTableTreeMenuListener extends GTableMenuListener {  private File selectedFile;  private List selectedClients = new ArrayList();  private GView clientView;  private boolean clientTableVisible = false;  private boolean myDrag = false;  public DownloadTableTreeMenuListener(DownloadTableTreeView downloadTableTreeViewer) {    super(downloadTableTreeViewer);  }  public void setClientView(GView clientView) {    this.clientView = clientView;  }  public void initialize() {    super.initialize();    if (SWT.getPlatform().equals("win32") && PreferenceLoader.loadBoolean("dragAndDrop"))      activateDragAndDrop();  }  public void deselectAll() {    super.deselectAll();    selectedClients.clear();    selectedFile = null;    if (clientTableVisible)      clientView.getViewer().setInput(null);  }  /**   * Activate drag and drop   */  public void activateDragAndDrop() {    DragSource dragSource = new DragSource(gView.getTable(), DND.DROP_COPY | DND.DROP_LINK);    dragSource.setTransfer(new Transfer[]{TextTransfer.getInstance()});    dragSource.addDragListener(new DragSourceAdapter() {      public void dragStart(DragSourceEvent event) {        if (selectedFile == null)          event.doit = false;        else {          event.doit = true;          myDrag = true;        }      }      public void dragSetData(DragSourceEvent event) {        event.data = selectedFile.getED2K();      }      public void dragFinished(DragSourceEvent event) {        myDrag = false;      }    });    DropTarget dropTarget = new DropTarget(gView.getTable(), DND.DROP_COPY | DND.DROP_DEFAULT | DND.DROP_LINK);    final UniformResourceLocator uRL = UniformResourceLocator.getInstance();    final TextTransfer textTransfer = TextTransfer.getInstance();    dropTarget.setTransfer(new Transfer[]{uRL, textTransfer});    dropTarget.addDropListener(new DropTargetAdapter() {      public void dragEnter(DropTargetEvent event) {        event.detail = DND.DROP_COPY;        for (int i = 0; i < event.dataTypes.length; i++) {          if (uRL.isSupportedType(event.dataTypes[i])) {            event.detail = DND.DROP_LINK;            break;          }        }      }      public void drop(DropTargetEvent event) {        if ((event.data == null) || myDrag)          return;        SwissArmy.sendLink(gView.getCore(), (String) event.data);      }    });  }  public void selectionChanged(SelectionChangedEvent e) {    IStructuredSelection sSel = (IStructuredSelection) e.getSelection();    selectedClients.clear();    selectedObjects.clear();    for (Iterator it = sSel.iterator(); it.hasNext();) {      Object object = it.next();      if (object instanceof File)        selectedObjects.add(object);      else if (object instanceof FileClient)        selectedClients.add(object);    }    if (selectedObjects.size() > 0) {      selectedFile = (File) selectedObjects.get(0);      if (clientTableVisible && clientView.getViewer().getInput() != selectedFile)        clientView.getViewer().setInput(selectedFile);    } else      selectedFile = null;  }  public void updateClientsTable(boolean visible) {    if (visible) {      if (clientTableVisible != visible && selectedFile != null)        clientView.getViewer().setInput(selectedFile);    } else      clientView.getViewer().setInput(null);    clientTableVisible = visible;  }  public void menuAboutToShow(IMenuManager menuManager) {    if ((selectedFile != null) && selectedFileListContains(EnumFileState.DOWNLOADED))      menuManager.add(new CommitAction());    if ((selectedFile != null) && (selectedFile.getFileStateEnum() == EnumFileState.DOWNLOADED)) {      MenuManager commitAsSubMenu = new MenuManager(SResources.getString("m.d.commitAs"));      commitAsSubMenu.add(new CommitAction(true));      for (int i = 0; i < selectedFile.getNames().length; i++)        commitAsSubMenu.add(new CommitAction(selectedFile.getNames()[i]));      menuManager.add(commitAsSubMenu);    }    if (selectedFile != null)      menuManager.add(new FileDetailAction());    if (selectedFile != null && selectedFile.getEnumNetwork() == EnumNetwork.FILETP)      menuManager.add(new AddMirrorAction(selectedFile));    if ((selectedFile != null)        && (selectedFileListContains(EnumFileState.DOWNLOADING) || selectedFileListContains(EnumFileState.QUEUED)))      menuManager.add(new PauseAction());    if ((selectedFile != null) && selectedFileListContains(EnumFileState.PAUSED))      menuManager.add(new ResumeAction());    if ((selectedFile != null) && selectedFileListContainsOtherThan(EnumFileState.DOWNLOADED))      menuManager.add(new CancelAction());    if ((selectedFile != null) && selectedFileListContainsOtherThan(EnumFileState.DOWNLOADED)) {      MenuManager prioritySubMenu = new MenuManager(SResources.getString("m.d.priority"));      prioritySubMenu.add(new PriorityAction(EnumPriority.VERY_HIGH));      prioritySubMenu.add(new PriorityAction(EnumPriority.HIGH));      prioritySubMenu.add(new PriorityAction(EnumPriority.NORMAL));      prioritySubMenu.add(new PriorityAction(EnumPriority.LOW));      prioritySubMenu.add(new PriorityAction(EnumPriority.VERY_LOW));      prioritySubMenu.add(new Separator());      prioritySubMenu.add(new CustomPriorityAction(false));      prioritySubMenu.add(new CustomPriorityAction(true));      menuManager.add(prioritySubMenu);    }    if ((selectedFile != null) && selectedFileListContainsOtherThan(EnumFileState.DOWNLOADED)) {      MenuManager renameSubMenu = new MenuManager(SResources.getString("m.d.rename"));      renameSubMenu.add(new RenameAction(true));      for (int i = 0; i < selectedFile.getNames().length; i++)        renameSubMenu.add(new RenameAction(selectedFile.getNames()[i]));      menuManager.add(renameSubMenu);    }    if (selectedFile != null && selectedFile.getDownloaded() > 0) {      String previewExtensions = PreferenceLoader.loadString("previewExtensions");      String[] apps = null;      if (!previewExtensions.equals(SResources.S_ES)) {        apps = SwissArmy.getPreviewApps(selectedFile.getName());      }      if (apps != null && apps.length > 1) {        MenuManager previewSubMenu = new MenuManager(SResources.getString("m.d.preview"));        for (int i = 0; i < apps.length; i++)          previewSubMenu.add(new PreviewAppAction(selectedFile, apps[i]));        menuManager.add(previewSubMenu);      } else        menuManager.add(new PreviewAction());    }    if ((selectedFile != null)) {      if (selectedFile.getFormat().getFormat() == EnumFormat.MP3)        menuManager.add(new EditMP3TagsAction());      menuManager.add(new ConnectAllAction());      menuManager.add(new VerifyChunksAction());      menuManager.add(new RequestFileInfoAction());      if (selectedObjects.size() > 1)        menuManager.add(new SetBrothersAction());    }    if (selectedClients.size() > 0) {      Client[] clientArray = new Client[selectedClients.size()];      for (int i = 0; i < selectedClients.size(); i++) {        FileClient fileClient = (FileClient) selectedClients.get(i);        clientArray[i] = fileClient.getClient();      }      menuManager.add(new AddClientAsFriendAction(clientArray));    }    if (selectedClients.size() > 0) {      FileClient selectedClient = (FileClient) selectedClients.get(0);      menuManager.add(new ClientDetailAction(gView.getShell(), selectedClient.getFile(), selectedClient          .getClient(), gView.getCore()));    }    if (selectedFile != null) {      String[] linkList = new String[selectedObjects.size()];      for (int i = 0; i < selectedObjects.size(); i++)        linkList[i] = ((File) selectedObjects.get(i)).getED2K();      MenuManager clipboardMenu = new MenuManager(SResources.getString("m.d.copyTo"));      clipboardMenu.add(new CopyED2KLinkToClipboardAction(false, linkList));      clipboardMenu.add(new CopyED2KLinkToClipboardAction(true, linkList));      menuManager.add(clipboardMenu);    }    if ((selectedFile != null))      addWebServicesMenu(menuManager, selectedFile.getMd4(), selectedFile.getED2K(), selectedFile.getSize());  }  // Helpers  private boolean selectedFileListContains(EnumFileState e) {    for (int i = 0; i < selectedObjects.size(); i++)      if (((File) selectedObjects.get(i)).getFileStateEnum() == e)        return true;    return false;  }  private boolean selectedFileListContainsOtherThan(EnumFileState e) {    for (int i = 0; i < selectedObjects.size(); i++)      if (((File) selectedObjects.get(i)).getFileStateEnum() != e)        return true;    return false;  }  // Menu Actions  /**   * VerifyChunksAction   */  private class VerifyChunksAction extends Action {    public VerifyChunksAction() {      super(SResources.getString("m.d.verifyChunks"));      setImageDescriptor(SResources.getImageDescriptor("verify"));    }    public void run() {      for (int i = 0; i < selectedObjects.size(); i++)        ((File) selectedObjects.get(i)).verifyChunks();    }  }  private class ConnectAllAction extends Action {    public ConnectAllAction() {      super(SResources.getString("m.d.connectAll"));      setImageDescriptor(SResources.getImageDescriptor("menu-connect"));    }    public void run() {      for (int i = 0; i < selectedObjects.size(); i++)        ((File) selectedObjects.get(i)).connectAll();    }  }  /**   * PreviewAction   */  private class PreviewAction extends Action {    public PreviewAction() {      super(SResources.getString("m.d.preview"));      setImageDescriptor(SResources.getImageDescriptor("preview"));    }    public void run() {      for (int i = 0; i < selectedObjects.size(); i++)        ((File) selectedObjects.get(i)).preview();    }  }  private class PreviewAppAction extends Action {    File file;    String app;    public PreviewAppAction(File file, String app) {      super(new java.io.File(app).getName());      setImageDescriptor(SResources.getImageDescriptor("preview"));      this.file = file;      this.app = app;    }    public void run() {      file.preview(app);    }  }  /**   * FileDetailAction   */  private class FileDetailAction extends Action {    public FileDetailAction() {      super(SResources.getString("m.d.fileDetails"));      setImageDescriptor(SResources.getImageDescriptor("info"));    }    public void run() {      if (selectedFile == null)        return;      new FileDetailDialog(gView.getShell(), selectedFile).open();    }  }

⌨️ 快捷键说明

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