linkentry.java
来自「SANCHO」· Java 代码 · 共 184 行
JAVA
184 行
/* * Copyright (C) 2004-2005 Rutger M. Ovidius for use with the sancho project. * See LICENSE.txt for license information. */package sancho.view.statusline;import gnu.regexp.RE;import gnu.regexp.REException;import gnu.regexp.REMatch;import org.eclipse.swt.SWT;import org.eclipse.swt.custom.CLabel;import org.eclipse.swt.dnd.DND;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.KeyAdapter;import org.eclipse.swt.events.KeyEvent;import org.eclipse.swt.events.SelectionAdapter;import org.eclipse.swt.events.SelectionEvent;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.layout.GridData;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.FileDialog;import org.eclipse.swt.widgets.Text;import org.eclipse.swt.widgets.ToolBar;import org.eclipse.swt.widgets.ToolItem;import sancho.core.Sancho;import sancho.model.mldonkey.utility.OpCodes;import sancho.utility.SwissArmy;import sancho.view.StatusLine;import sancho.view.preferences.PreferenceLoader;import sancho.view.transfer.UniformResourceLocator;import sancho.view.utility.MyViewForm;import sancho.view.utility.SResources;import sancho.view.utility.WidgetFactory;public class LinkEntry { private StatusLine statusLine; public LinkEntry(StatusLine statusLine, Composite parent) { this.statusLine = statusLine; createContents(parent); } public void createContents(final Composite parent) { MyViewForm linkEntryViewForm = WidgetFactory.createViewForm(parent, false); linkEntryViewForm.setLayoutData(new GridData(GridData.FILL_BOTH)); CLabel linkEntryCLabel = WidgetFactory.createCLabel(linkEntryViewForm, "sl.linkEntryHeader", "up_arrow_green"); linkEntryCLabel.setFont(PreferenceLoader.loadFont("headerFontData")); final Text linkEntryText = new Text(linkEntryViewForm, SWT.WRAP | SWT.MULTI | SWT.V_SCROLL); linkEntryText.setLayoutData(new FillLayout()); linkEntryText.setFont(PreferenceLoader.loadFont("ircConsoleFontData")); linkEntryText.setForeground(PreferenceLoader.loadColor("ircConsoleInputForeground")); linkEntryText.setBackground(PreferenceLoader.loadColor("ircConsoleInputBackground")); linkEntryText.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { if ((e.stateMask & SWT.CTRL) != 0) { if ((e.character == SWT.LF) || (e.character == SWT.CR)) { enterLinks(linkEntryText); e.doit = false; } } } }); final ToolBar linkEntryToolBar = new ToolBar(linkEntryViewForm, SWT.RIGHT | SWT.FLAT); ToolItem torrentItem = new ToolItem(linkEntryToolBar, SWT.PUSH); torrentItem.setToolTipText(SResources.getString("sl.addLocalTorrents")); torrentItem.setImage(SResources.getImage("folder-12")); torrentItem.setText(SResources.S_ES); torrentItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent s) { if (!Sancho.hasCollectionFactory()) return; FileDialog fileDialog = new FileDialog(linkEntryToolBar.getShell(), SWT.MULTI); fileDialog.setFilterExtensions(new String[]{"*.torrent"}); if (fileDialog.open() != null) { if (Sancho.getCore() != null) { String path = fileDialog.getFilterPath() + System.getProperty("file.separator"); String[] fileNames = fileDialog.getFileNames(); for (int i = 0; i < fileNames.length; i++) SwissArmy.sendLink(Sancho.getCore(), path + fileNames[i]); statusLine.setText(SResources.getString("sl.linksSent") + fileNames.length); } } } }); ToolItem clearItem = new ToolItem(linkEntryToolBar, SWT.PUSH); clearItem.setText(SResources.getString("sl.clear")); clearItem.setImage(SResources.getImage("clear-12")); clearItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent s) { linkEntryText.setText(SResources.S_ES); } }); ToolItem sendItem = new ToolItem(linkEntryToolBar, SWT.PUSH); sendItem.setText(SResources.getString("sl.send")); sendItem.setImage(SResources.getImage("up_arrow_green")); sendItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent s) { enterLinks(linkEntryText); } }); linkEntryViewForm.setTopLeft(linkEntryCLabel); linkEntryViewForm.setContent(linkEntryText); linkEntryViewForm.setTopRight(linkEntryToolBar); linkEntryToolBar.pack(); if (SWT.getPlatform().equals("win32") && PreferenceLoader.loadBoolean("dragAndDrop")) activateDropTarget(linkEntryText); } public void enterLinks(Text linkEntryText) { String input = linkEntryText.getText(); RE regex = null; try { regex = new RE("(ed2k://\\|file\\|[^\\|]+\\|(\\d+)\\|([\\dabcdef]+)\\|)" + "|(sig2dat:///?\\|File:[^\\|]+\\|Length:.+?\\|UUHash:\\=.+?\\=)" + "|(\\\"magnet:\\?xt=.+?\\\")" + "|(magnet:\\?xt=.+?\n)" + ((linkEntryText.getLineCount() == 1) ? "|(magnet:\\?xt=.+)" : SResources.S_ES) + ((linkEntryText.getLineCount() == 1) ? "|(http://.+?\\.torrent.+)" : SResources.S_ES) + ((linkEntryText.getLineCount() == 1) ? "|(.+?\\.torrent.*)" : SResources.S_ES) + ((linkEntryText.getLineCount() == 1) ? "|(.+?\\.torrent)" : SResources.S_ES) + "|(\"http://.+\\.torrent\\?[^>]+\")" + "|(http://.+\\.torrent)", RE.REG_ICASE | RE.REG_MULTILINE); } catch (REException e) { e.printStackTrace(); } REMatch[] matches = regex.getAllMatches(input); for (int i = 0; i < matches.length; i++) { String link = SwissArmy.replaceAll(matches[i].toString(), "\"", SResources.S_ES); link = SwissArmy.replaceAll(link, "\n", SResources.S_ES); Sancho.send(OpCodes.S_DLLINK, link); } statusLine.setText(SResources.getString("sl.linksSent") + matches.length); linkEntryText.setText(SResources.S_ES); } private void activateDropTarget(final Text linkEntryText) { DropTarget dropTarget = new DropTarget(linkEntryText, 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) return; linkEntryText.append((String) event.data); } }); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?