package tests.views;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceEvent;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.DropTargetListener;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.part.ViewPart;
public class SampleView extends ViewPart {
public static final String XDEVICE_ID = "tests.views.SampleView";
public static TreeItem fileItem = null;
public static TreeItem tmssItem = null;
public SampleView() {
}
@Override
public void createPartControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(1, 1, true, false));
composite.setLayout(new FillLayout(SWT.VERTICAL));
Group upGroup = new Group(composite, SWT.NONE);
upGroup.setLayoutData(new GridData(1, 1, true, true));
upGroup.setLayout(new FillLayout());
// tmss树
final Tree upTree = new Tree(upGroup, SWT.SINGLE);
tmssItem = new TreeItem(upTree, SWT.NONE);
tmssItem.setText("Test Tmss Manager");
new TreeItem(tmssItem, SWT.NULL).setText("tmsskey1");
new TreeItem(tmssItem, SWT.NULL).setText("tmsskey2");
new TreeItem(tmssItem, SWT.NULL).setText("tmsskey3");
new TreeItem(tmssItem, SWT.NULL).setText("tmsskey4");
// 本地文件
Group downGroup = new Group(composite, SWT.NONE);
downGroup.setLayoutData(new GridData(1, 1, true, true));
downGroup.setLayout(new FillLayout());
final Tree downTree = new Tree(downGroup, SWT.SINGLE);
fileItem = new TreeItem(downTree, SWT.NONE);
fileItem.setText("Test File Manager");
new TreeItem(fileItem, SWT.NULL).setText("key1");
new TreeItem(fileItem, SWT.NULL).setText("key2");
new TreeItem(fileItem, SWT.NULL).setText("key3");
new TreeItem(fileItem, SWT.NULL).setText("key4");
// 定义拖放源对象
DragSource dragSource = new DragSource(downTree, DND.DROP_MOVE
| DND.DROP_COPY);
// 设置传输的数据为文本型String类型
dragSource.setTransfer(new Transfer[] { TextTransfer.getInstance() });
// 注册拖放源时的事件处理
dragSource.addDragListener(new DragSourceListener() {
public void dragStart(DragSourceEvent event) {
if (downTree.getSelectionCount() == 0)
event.doit = false;
}
public void dragSetData(DragSourceEvent event) {
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
event.data = downTree.getSelection()[0].getText(0);
fileItem = downTree.getSelection()[0];
System.out.println(fileItem);
}
}
public void dragFinished(DragSourceEvent event) {
}
});
// 定义拖放目标对象
DropTarget dropTarget = new DropTarget(upTree, DND.DROP_MOVE
| DND.DROP_DEFAULT | DND.DROP_COPY);
// 设置目标对象可传输的数据类型
dropTarget.setTransfer(new Transfer[] { TextTransfer.getInstance() });
// 注册目标对象的事件处理
dropTarget.addDropListener(new DropTargetListener() {
public void dragEnter(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_COPY;
}
public void dragOperationChanged(DropTargetEvent event) {
if (event.detail == DND.DROP_DEFAULT)
event.detail = DND.DROP_COPY;
}
public void dragOver(DropTargetEvent event) {
event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SELECT;
}
// 当松开鼠标时触发的事件
public void drop(DropTargetEvent event) {
if (event.item == null)
return;
// 首先获得目标对象中拖拽的树节点
TreeItem eventItem = (TreeItem) event.item;
if(fileItem.getText().equals("Test File Manager"))return ;
if (TextTransfer.getInstance().isSupportedType(
event.currentDataType)) {
// 获得数据源设置的字符串
String s = (String) event.data;
// 在tmss位置插入一个节点
if (eventItem.getParentItem() == null)
tmssItem = new TreeItem(eventItem.getParent(), SWT.NONE);
else
tmssItem = new TreeItem(eventItem.getParentItem(), SWT.NONE);
tmssItem.setText(s);
// 删除原来的节点
if (downTree != null) {
fileItem.dispose();
}
}
}
public void dragLeave(DropTargetEvent event) {
}
public void dropAccept(DropTargetEvent event) {
}
});
// downTree.addDragDetectListener(new DragDetectListener() {
//
//
// @Override
// public void dragDetected(DragDetectEvent e) {
// TreeItem[] items = downTree.getSelection();
// String name = items[0].getText();
// if (!name.equals(fileItem.getText())){
// Shell shell = new Shell();
// new TreeItem(tmssItem, SWT.NULL).setText(name);
// }
// }
// });
// 对模块进行布局
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP)
.grab(false, false).span(1, 1).applyTo(upGroup);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP)
.grab(false, false).span(1, 1).applyTo(downGroup);
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
}