图形编辑器中拖拽对象到swt控件

图形编辑器中拖拽对象到swt控件
    前面一段时间有一个需求就是从 swt 控件中拖拽对象到图形编辑器中(就是 class org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor 的儿子们 )编辑器。

后来就想假如我需要从图形编辑器中拖拽对象到swt控件中又该怎么做。
经过一段时间的探索,终于搞定了。

记下如下过程,希望对需要的朋友有点帮助。

首先有了《从SWT控件中托拽对象到GEF编辑器中》文中对addDropTargetListener方法使用的经历,很快就确定我需要对GraphicalViewer添加一个DragSourceListener

想着到这个地方我应该可以很快收工了。但是添加完了以后发现原来的拖动功能都没有了,这个怎么回事。谁在后面搞鬼。

经过一段时间的狂搜滥索终于找到了问题的关键。因为GEF不允许同时有两个活动 DragSource 。

它本身已经拥有一个DragSource了(编辑器内部的托拽),我们这时候添加一个就会存在多

DragSource了。当我添加一个新的DragSource时候我们新家的DragSource就会被认为是默认的DragSource。

他以前的DragSource就失效了。这不是我像看到的。

怎么处理。看到了一个牛人的解决方案。


What I made to fix the problem was to only allow my DragSource to act under certain 
conditions (in my application this happens when you click and drag the mouse AND
 the SHIFT key is pressed). So when the SHIFT key is not pressed my DragSource does
nothing and the editor's internal drag and drop works fine。

public void dragStart(DragSourceEvent event)
{
...

if (!condition.isValid())
event.doit = false;

...
}

我尝试了一下这种状况,一下就搞定了。
在我的项目中,由于还有一些数据需要转化。呵呵,感觉不错。

参考文档:
http://dev.eclipse.org/newslists/news.eclipse.tools.gef/msg15754.html

你可能感兴趣的:(图形编辑器中拖拽对象到swt控件)