/**创建子节点
* @param treeItem
*/
private void createChildTreeItem(TreeItem treeItem,TreeItem linkTreeItem){
if (treeItem.getItems().length != 0) {
TreeItem[] childTreeItems = treeItem.getItems();
for (TreeItem childTreeItem : childTreeItems) {
TreeItem childItem = new TreeItem(linkTreeItem,SWT.NONE);
childItem.setText(childTreeItem.getText());
createChildTreeItem(childItem,childItem);
}
}
}
Set<File> projectSet = new HashSet<File>();
SashForm sashForm = new SashForm(parent, SWT.VERTICAL | SWT.SMOOTH);
Group upGroup = new Group(sashForm, SWT.NONE);
upGroup.setLayout(new FillLayout());
upTree = new Tree(upGroup, SWT.SINGLE);
initProjectFile(file,projectSet);
showAllProjectFile(projectSet);
// 定义拖放源对象
DragSource dragSource = new DragSource(upTree, DND.DROP_MOVE | DND.DROP_COPY);
// 设置传输的数据为文本型String类型
dragSource.setTransfer(new Transfer[] { TextTransfer.getInstance() });
// 注册拖放源时的事件处理
dragSource.addDragListener(new DragSourceListener() {
public void dragStart(DragSourceEvent event) {
if (upTree.getSelectionCount() == 0)
event.doit = false;
}
public void dragSetData(DragSourceEvent event) {
if (TextTransfer.getInstance().isSupportedType(event.dataType)) {
event.data = upTree.getSelection()[0].getText(0);
/*fileItem = upTree.getSelection(); */
//event.
}
}
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;
if (TextTransfer.getInstance().isSupportedType(event.currentDataType)) {
// 首先获得目标对象节点
TreeItem eventItem = (TreeItem) event.item;
// 得到当前选中的对象节点
TreeItem selectTreeItem = upTree.getSelection()[0];
TreeItem[] childItem = selectTreeItem.getItems();
if (childItem.length == 0 || childItem == null) {
return;
}
if(fileMap.get(eventItem).equals(fileMap.get(selectTreeItem)))
return ;
String selectTreeItemText = event.data.toString();
TreeItem treeItem = new TreeItem(eventItem, SWT.NONE);
treeItem.setText(selectTreeItemText);
createChildTreeItem(selectTreeItem,treeItem);
}
}
public void dragLeave(DropTargetEvent event) {
}
public void dropAccept(DropTargetEvent event) {
}
});