📄 dndexample.java
字号:
/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.swt.examples.dnd; import org.eclipse.swt.*;import org.eclipse.swt.dnd.*;import org.eclipse.swt.events.*;import org.eclipse.swt.graphics.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;public class DNDExample { private int dragOperation = 0; private Transfer[] dragTypes = new Transfer[0]; private Control dragControl; private int dragControlType = 0; private DragSource dragSource; private String dragDataText; private String dragDataRTF; private String[] dragDataFiles; private List fileList; private boolean dragEnabled = false; private int dropOperation = 0; private int dropDefaultOperation = 0; private Transfer[] dropTypes = new Transfer[0]; private DropTarget dropTarget; private Control dropControl; private int dropControlType = 0; private Composite defaultParent; private boolean dropEnabled = false; private Text dragConsole; private boolean dragEventDetail = false; private Text dropConsole; private boolean dropEventDetail = false; private static final int BUTTON_TOGGLE = 0; private static final int BUTTON_RADIO = 1; private static final int BUTTON_CHECK = 2; private static final int CANVAS = 3; private static final int LABEL = 4; private static final int LIST = 5; private static final int TABLE = 6; private static final int TREE = 7; private static final int TEXT = 8; public static void main(String[] args) { DNDExample example = new DNDExample(); example.open();}private void addDragTransfer(Transfer transfer){ Transfer[] newTypes = new Transfer[dragTypes.length + 1]; System.arraycopy(dragTypes, 0, newTypes, 0, dragTypes.length); newTypes[dragTypes.length] = transfer; dragTypes = newTypes; if (dragSource != null) { dragSource.setTransfer(dragTypes); }}private void addDropTransfer(Transfer transfer){ Transfer[] newTypes = new Transfer[dropTypes.length + 1]; System.arraycopy(dropTypes, 0, newTypes, 0, dropTypes.length); newTypes[dropTypes.length] = transfer; dropTypes = newTypes; if (dropTarget != null) { dropTarget.setTransfer(dropTypes); }}private void createDragOperations(Composite parent) { parent.setLayout(new RowLayout(SWT.VERTICAL)); final Button moveButton = new Button(parent, SWT.CHECK); moveButton.setText("DND.DROP_MOVE"); moveButton.setSelection(true); dragOperation = DND.DROP_MOVE; moveButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { dragOperation |= DND.DROP_MOVE; } else { dragOperation = dragOperation &~DND.DROP_MOVE; if (dragOperation == 0) { dragOperation = DND.DROP_MOVE; moveButton.setSelection(true); } } if (dragEnabled) { createDragSource(); } } }); Button b = new Button(parent, SWT.CHECK); b.setText("DND.DROP_COPY"); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { dragOperation |= DND.DROP_COPY; } else { dragOperation = dragOperation &~DND.DROP_COPY; if (dragOperation == 0) { dragOperation = DND.DROP_MOVE; moveButton.setSelection(true); } } if (dragEnabled) { createDragSource(); } } }); b = new Button(parent, SWT.CHECK); b.setText("DND.DROP_LINK"); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { dragOperation |= DND.DROP_LINK; } else { dragOperation = dragOperation &~DND.DROP_LINK; if (dragOperation == 0) { dragOperation = DND.DROP_MOVE; moveButton.setSelection(true); } } if (dragEnabled) { createDragSource(); } } });}private void createDragSource() { if (dragSource != null) dragSource.dispose(); dragSource = new DragSource(dragControl, dragOperation); dragSource.setTransfer(dragTypes); dragSource.addDragListener(new DragSourceListener() { public void dragFinished(org.eclipse.swt.dnd.DragSourceEvent event) { dragConsole.append(">>dragFinished\n"); printEvent(event); dragDataText = dragDataRTF = null; dragDataFiles = null; if (event.detail == DND.DROP_MOVE) { switch(dragControlType) { case BUTTON_CHECK: case BUTTON_TOGGLE: case BUTTON_RADIO: { Button b = (Button)dragControl; b.setText(""); break; } case TABLE: { Table table = (Table)dragControl; TableItem[] items = table.getSelection(); for (int i = 0; i < items.length; i++) { items[i].dispose(); } break; } case TEXT: { Text text = (Text)dragControl; text.clearSelection(); break; } case TREE: { Tree tree = (Tree)dragControl; TreeItem[] items = tree.getSelection(); for (int i = 0; i < items.length; i++) { items[i].dispose(); } break; } case CANVAS: { dragControl.setData("STRINGS", null); dragControl.redraw(); break; } case LABEL: { Label label = (Label)dragControl; label.setText(""); break; } case LIST: { List list = (List)dragControl; int[] indices = list.getSelectionIndices(); list.remove(indices); break; } } } } public void dragSetData(org.eclipse.swt.dnd.DragSourceEvent event) { dragConsole.append(">>dragSetData\n"); printEvent(event); if (TextTransfer.getInstance().isSupportedType(event.dataType)) { event.data = dragDataText; } if (RTFTransfer.getInstance().isSupportedType(event.dataType)) { event.data = dragDataRTF; } if (FileTransfer.getInstance().isSupportedType(event.dataType)) { event.data = dragDataFiles; } } public void dragStart(org.eclipse.swt.dnd.DragSourceEvent event) { dragConsole.append(">>dragStart\n"); printEvent(event); dragDataFiles = fileList.getItems(); switch(dragControlType) { case BUTTON_CHECK: case BUTTON_TOGGLE: case BUTTON_RADIO: { Button b = (Button)dragControl; dragDataText = b.getSelection() ? "true" : "false"; break; } case TABLE: { Table table = (Table)dragControl; TableItem[] items = table.getSelection(); if (items.length == 0) { event.doit = false; } else { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < items.length; i++) { buffer.append(items[i].getText()); if (items.length > 1 && i < items.length - 1) { buffer.append("\n"); } } dragDataText = buffer.toString(); } break; } case TEXT: { Text text = (Text)dragControl; String s = text.getSelectionText(); if (s.length() == 0) { event.doit = false; } else { dragDataText = s; } break; } case TREE: { Tree tree = (Tree)dragControl; TreeItem[] items = tree.getSelection(); if (items.length == 0) { event.doit = false; } else { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < items.length; i++) { buffer.append(items[i].getText()); if (items.length > 1 && i < items.length - 1) { buffer.append("\n"); } } dragDataText = buffer.toString(); } break; } case CANVAS: { String[] strings = (String[])dragControl.getData("STRINGS"); if (strings == null || strings.length == 0) { event.doit = false; } else { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < strings.length; i++) { buffer.append(strings[i]); if (strings.length > 1 && i < strings.length - 1) { buffer.append("\n"); } } dragDataText = buffer.toString(); } break; } case LABEL: { Label label = (Label)dragControl; String string = label.getText(); if (string.length() == 0) { event.doit = false; } else { dragDataText = string; } break; } case LIST: { List list = (List)dragControl; String[] selection = list.getSelection(); if (selection.length == 0) { event.doit = false; } else { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < selection.length; i++) { buffer.append(selection[i]); if (selection.length > 1 && i < selection.length - 1) { buffer.append("\n"); } } dragDataText = buffer.toString(); } break; } default: throw new SWTError(SWT.ERROR_NOT_IMPLEMENTED); } if (dragDataText != null) { dragDataRTF = "{\\rtf1{\\colortbl;\\red255\\green0\\blue0;}\\cf1\\b "+dragDataText+"}"; } for (int i = 0; i < dragTypes.length; i++) { if (dragTypes[i] instanceof TextTransfer && dragDataText == null) { event.doit = false; } if (dragTypes[i] instanceof RTFTransfer && dragDataRTF == null) { event.doit = false; } if (dragTypes[i] instanceof FileTransfer && (dragDataFiles == null || dragDataFiles.length == 0)) { event.doit = false; } } } });}private void createDragTypes(Composite parent) { parent.setLayout(new GridLayout()); Button b = new Button(parent, SWT.CHECK); b.setText("Text Transfer"); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { addDragTransfer(TextTransfer.getInstance()); } else { removeDragTransfer(TextTransfer.getInstance()); } } }); b = new Button(parent, SWT.CHECK); b.setText("RTF Transfer"); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { addDragTransfer(RTFTransfer.getInstance()); } else { removeDragTransfer(RTFTransfer.getInstance()); } } }); Composite c = new Composite(parent, SWT.NONE); c.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); GridLayout layout = new GridLayout(3, false); layout.marginHeight = layout.marginWidth = 0; c.setLayout(layout); b = new Button(c, SWT.CHECK); b.setText("File Transfer"); b.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button b = (Button)e.widget; if (b.getSelection()) { addDragTransfer(FileTransfer.getInstance()); } else { removeDragTransfer(FileTransfer.getInstance()); } } }); b = new Button(c, SWT.PUSH); b.setText("Select File(s)"); b.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); b.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -