📄 resulttablemenulistener.java
字号:
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.search.result;import java.util.Arrays;import java.util.Timer;import java.util.TimerTask;import org.eclipse.jface.action.Action;import org.eclipse.jface.action.IMenuListener;import org.eclipse.jface.action.IMenuManager;import org.eclipse.jface.action.MenuManager;import org.eclipse.jface.action.Separator;import org.eclipse.jface.viewers.SelectionChangedEvent;import org.eclipse.jface.viewers.TableViewer;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.CLabel;import org.eclipse.swt.custom.CTabItem;import org.eclipse.swt.events.DisposeEvent;import org.eclipse.swt.events.DisposeListener;import org.eclipse.swt.events.MouseAdapter;import org.eclipse.swt.events.MouseEvent;import org.eclipse.swt.events.MouseTrackAdapter;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.graphics.Font;import org.eclipse.swt.graphics.FontData;import org.eclipse.swt.graphics.GC;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.graphics.Rectangle;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Control;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Event;import org.eclipse.swt.widgets.Label;import org.eclipse.swt.widgets.List;import org.eclipse.swt.widgets.Listener;import org.eclipse.swt.widgets.MessageBox;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.widgets.Table;import org.eclipse.swt.widgets.TableItem;import org.eclipse.swt.widgets.ToolBar;import org.eclipse.swt.widgets.ToolItem;import org.eclipse.swt.widgets.Widget;import sancho.core.Sancho;import sancho.model.mldonkey.Result;import sancho.view.MainWindow;import sancho.view.SearchTab;import sancho.view.preferences.PreferenceLoader;import sancho.view.utility.SResources;import sancho.view.utility.WidgetFactory;import sancho.view.viewer.ICustomViewer;import sancho.view.viewer.actions.CopyED2KLinkToClipboardAction;import sancho.view.viewer.actions.WebServicesAction;import sancho.view.viewer.table.GTableMenuListener;import sancho.view.viewer.table.GTableView;public class ResultTableMenuListener extends GTableMenuListener { private CTabItem cTabItem; public ResultTableMenuListener(GTableView rTableViewer, CTabItem aCTabItem) { super(rTableViewer); this.cTabItem = aCTabItem; } public void initialize() { super.initialize(); if (PreferenceLoader.loadBoolean("searchTooltips")) { final ToolTipHandler toolTipHandler = new ToolTipHandler(gView.getShell()); toolTipHandler.activateHoverHelp(gView.getTable(), (ICustomViewer) gView.getViewer()); gView.getTable().addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { toolTipHandler.dispose(); } }); } } public void selectionChanged(SelectionChangedEvent event) { collectSelections(event, Result.class); } public void menuAboutToShow(IMenuManager menuManager) { if (selectedObjects.size() > 0) { menuManager.add(new DownloadAction()); menuManager.add(new ResultDetailAction()); menuManager.add(new Separator()); menuManager.add(new CopyNameAction()); String[] linkList = new String[selectedObjects.size()]; for (int i = 0; i < selectedObjects.size(); i++) linkList[i] = ((Result) 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); menuManager.add(new Separator()); Result result = (Result) selectedObjects.get(0); addWebServicesMenu(menuManager, result.getMd4(), result.getED2K(), result.getSize()); } } public boolean downloadResult(final Result result) { if (!Sancho.hasCollectionFactory()) return true; boolean force = PreferenceLoader.loadBoolean("searchForceDownload"); if (result.downloaded() && !force) { Shell shell = ((TableViewer) tableViewer).getTable().getShell(); MessageBox box = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.YES | SWT.NO); box.setText(SResources.getString("s.alreadyDownloadedTitle")); box.setMessage(result.getName() + "\n" + SResources.getString("s.alreadyDownloadedText")); if (box.open() == SWT.YES) { gView.getCore().getResultCollection().download(result, true); tableViewer.getTable().getDisplay().timerExec(2000, new Runnable() { public void run() { if (tableViewer != null && tableViewer.getTable() != null && !tableViewer.getTable().isDisposed()) tableViewer.update(result, null); } }); return true; } } else { gView.getCore().getResultCollection().download(result, force); tableViewer.getTable().getDisplay().timerExec(2000, new Runnable() { public void run() { if (tableViewer != null && tableViewer.getTable() != null && !tableViewer.getTable().isDisposed()) tableViewer.update(result, null); } }); return true; } return false; } public void downloadSingleFile(Result result) { downloadResult(result); postDownloadStats(1, SResources.S_ES); } // note ...:w public void downloadSelected() { if (!Sancho.hasCollectionFactory()) return; String anErrorString = SResources.S_ES; int counter = 0; for (int i = 0; i < selectedObjects.size(); i++) { Result result = (Result) selectedObjects.get(i); if (downloadResult(result)) counter++; else anErrorString += (result.getName() + "\n"); } postDownloadStats(counter, anErrorString); } public void postDownloadStats(int counter, String anErrorString) { SearchTab searchTab = (SearchTab) cTabItem.getParent().getData(); searchTab.getMainWindow().getStatusline().setText(SResources.getString("s.sl.startedDownload") + counter); } private class DownloadAction extends Action { public DownloadAction() { super(SResources.getString("s.r.download")); setImageDescriptor(SResources.getImageDescriptor("down_arrow_green")); } public void run() { downloadSelected(); } } private class ResultDetailAction extends Action { public ResultDetailAction() { super(SResources.getString("s.r.resultDetails")); setImageDescriptor(SResources.getImageDescriptor("info")); } public void run() { Result result = (Result) selectedObjects.get(0); if (result instanceof Result) { new ResultDetailDialog(gView.getShell(), result).open(); } } } private class CopyNameAction extends Action { public CopyNameAction() { super(SResources.getString("s.r.copyName")); setImageDescriptor(SResources.getImageDescriptor("copy")); } public void run() { String string = SResources.S_ES; String lSeparator = System.getProperty("line.separator"); for (int i = 0; i < selectedObjects.size(); i++) { Result result = (Result) selectedObjects.get(i); if (string.length() > 0) string += lSeparator; string += result.getName(); } MainWindow.copyToClipboard(string); } } private class ToolTipHandler implements IMenuListener { private Shell tipShell; private CLabel tipLabelImage; private Label tipLabelText; private Widget tipWidget; private Point tipPosition; private Composite parent; private List namesList; private Point pt; private Font boldFont; private ToolBar toolBar; private Composite namesComposite; private String fileSize; private String md4; private String ed2k; private int charHeight; private Result result; private MenuManager popupMenu; private Display display; private Timer timer; private boolean isVisible; public ToolTipHandler(final Composite parent) { this.parent = parent; this.pt = new Point(0, 0); GC gc = new GC(parent); charHeight = gc.getFontMetrics().getHeight(); gc.dispose(); display = parent.getDisplay(); tipShell = new Shell(parent.getShell(), SWT.ON_TOP); tipShell.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (boldFont != null) boldFont.dispose(); if (popupMenu != null) popupMenu.dispose(); if (timer != null) timer.cancel(); } }); // Don't close when you press ESC in the namesList tipShell.addListener(SWT.Close, new Listener() { public void handleEvent(Event e) { e.doit = false; } }); tipShell.setLayout(WidgetFactory.createGridLayout(1, 2, 2, 0, 0, false)); setColors(tipShell); tipLabelImage = new CLabel(tipShell, SWT.NONE); FontData[] fontDataArray = tipLabelImage.getFont().getFontData(); for (int i = 0; i < fontDataArray.length; i++) fontDataArray[i].setStyle(SWT.BOLD); boldFont = new Font(null, fontDataArray); tipLabelImage.setFont(boldFont); tipLabelImage.setAlignment(SWT.LEFT); setColors(tipLabelImage); tipLabelImage .setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING)); createSeparator(tipShell); tipLabelText = new Label(tipShell, SWT.NONE); setColors(tipLabelText);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -