swt组件到GEF编辑器的拖动支持

来源:互联网 发布:linux配置lamp环境 编辑:程序博客网 时间:2024/04/29 16:04

 

       最近在项目中,需要完成从资源管理器(navigator)向GEF编辑器中拖放结点的功能。

现总结个人体会如下(具体的实现流程,请参考http://www.eclipse.org/articles/Article-GEF-dnd/GEF-dnd.html):

1.      GEF封装了底层的SWT拖放。无需自己定义DragSourceDropTarget

2.      GEF的拖拽功能需要

(1).一个可以注册在GEF 中上的监听器,该监听器需实现TransferDropTargetListener接口,一般来讲,直接继承AbstractTransferDropTargetListener类会更好些。

 

(2).一个生成拖放数据的工厂类,该类需实现CreationFactory 接口。

 

(3).GEF编辑器中,为GraphicalViewer注册该监听器,一般在initializeGraphicalViewer()方法中添加
getGraphicalViewer().addDropTargetListener(new FileTransferDropTargetListener(getGraphicalViewer()));

 

3.      DND拖放参数

一般在监听器中的处理拖动方法中,对拖动的操作类型进行设置。如:

protected void handleDragOver() {

   getCurrentEvent().detail =DND.DROP_COPY;

   super.handleDragOver();

}

Description
DND.DROP_COPY
拖放创建一个新的copy
DND.DROP_LINK
拖放创建一个链接
DND.DROP_MOVE
拖放创建一个移动

 

4.      Transfer

Transfer是拖放的关键。不同类型的拖放数据,应在监听器的初始化时,选择合适的。

Transfer类型


其中,TextTransfer默认处理文本拖动,FileTransfer默认处理文件拖动,在我的项目中,我采用的是LocalSelectionTransfer

 

原创粉丝点击