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 + -
显示快捷键?