【编程开发】AspAsp.NetCGIPHPJspXMLPERLC++C#VCVBDelphiPowerBuilderJAVA汇编数据库编程移动开发其它语言

您现在的位置:首页 > 网络学院 > 编程开发 > 数据库编程 > 拖放 Eclipse Workbench 标签

拖放 Eclipse Workbench 标签

来源: 作者: 日期:2006-09-09

【聚杰网数据库编程】拖放 Eclipse Workbench 标签

  在这种新方法中,我们给 Display 为 SWT.DragDetect 类型的事件添加了一个 filter。默认拖放行为与编辑器标签有关,这意味着要对编辑器重新进行排列和平铺,说明 CTabFolder 存在多个拖放检测监听器。因此,我们有一个 filter 和多个与 CTabFolder 有关的 default-listeners,它们都要监听 SWT.DragDetect 事件。

  当我们拖动一个编辑器标签时,filter 会第一个接收到这种拖动操作。在 filter 的 handleEvent() 方法中,我们正在创建一个 drag source,并为这个 drag-source 添加了一个 DragSourceListener。然后,它会向父 CTabFolder 容器注册了另外一个拖放检测监听器,我们称之为 drag-listener-x。因此,当程序控制返回 filter 的 handleEvent() 方法时,就会有一组 default-listeners 和 drag-listener-x 在等待接收拖动事件的通知。在通知 default set of listeners 之后,新注册的 drag-listener-x 也会接收到拖放事件的通知,这样就可以实现我们的目的了。

  下图以图形方式显示了这些操作:

图 3. 拖放编辑器标签的序列图
拖放编辑器标签的序列图

  注意,在 dragFinished() 方法中(参见上面的 清单 3),我们对在 CTabFolder 容器上创建的 drag-source 进行了处理。实际上这是因为为每次拖放操作都创建了一个 drag-source,我们并没有对原来的 drag-source 进行处理,这会使问题变得更加复杂。对 drag-source 的处理还从 CTabFolder 的事件监听器表中删除了 drag-listener-x(它是在创建 drag-source 时添加的),如上面的 图 3 所示。
  如何捕获所拖放编辑器的 IEditorInput 和 Editor ID?

  下面让我们来看一下怎样在 dragSetData() 方法中实现 操作 1 和 操作 2。

  由于编辑器与包含它的 CTabFolder 之间的映射并没有公开,因此可以依靠 IWorkbenchPage.getActivePart() 来获得正在拖放的工作台部分,从中可以很容易地提取出所需的信息,如下面的代码所示:

清单 4. 捕获所拖放编辑器的 editor-input 和 editor-id

public void dragSetData(DragSourceEvent dsEvent) {   IWorkbenchWindow workbenchWindow =      PlatformUI.getWorkbench().getActiveWorkbenchWindow();   IWorkbenchPart workbenchPartBeingDragged =      workbenchWindow.getActivePage().getActivePart();   if(workbenchPartBeingDragged instanceof IEditorPart)   {     String editorId = workbenchPartBeingDragged.getSite().getId();     IEditorInput editorInput =        ((IEditorPart)workbenchPartBeingDragged).getEditorInput();     EditorInputTransfer.EditorInputData data =        EditorInputTransfer.createEditorInputData(editorId, editorInput);     dsEvent.data = new EditorInputTransfer.EditorInputData[] { data };   } } 

  限制 tab 文件夹的默认拖放监听器的行为

  正如上面介绍的一样,编辑器标签有一种默认的拖放行为,它将进行重新排列和平铺操作,这可以使用拖放检测鼠标移动鼠标释放 类型的事件的监听器实现。这些鼠标移动和鼠标释放的事件监听器的行为可能会与我们正在对编辑器实现的拖放行为冲突。例如,在将编辑器标签拖放到 Drop Window 上之后,如 图 2 所示,编辑器标签的重新排列和平铺会重新出现,这会导致在执行定制行为中产生意料不到的操作。(我们可以认为这是另外一次操作。)因此,限制默认监听器的行为是非常有必要的。

  我们的想法是取消或忽略所发生的其他拖放操作。Eclipse 用户可以通过使用 Esc 键或右键点击鼠标来轻松实现这种功能。通过编程可以很容易实现这种功能:使用 event.button 值而不是 1 来执行触发鼠标释放事件,如下所示:

上一页 1 2 3 4 5 下一页

评论   点击查看全部评论
您的评论参与,将为聚杰带来更大的动力!请不要吝啬!
快速回复
请使用文明语言让我们维护健康绿色网络环境!

匿名发表   验证码: