快速业务通道

拖放Eclipse Workbench标签 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
  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 来执行触发鼠标释放事件,如下所示:

清单 5. 取消其他拖放操作

public void dragFinished(DragSourceEvent dsEvent) {   dragSource.dispose();     // inhibit the action of CTabFolder''s default drag-drop-listeners   draggedFolder.notifyListeners(SWT.MouseUp, null); }

拖放Eclipse Workbench标签(5)

时间:2011-01-11 IBM Shiva Kumar

对视图标签的拖放行为进行定制

由于视图通常都存放在 CTabFolder 容器中,因此上面用来定制编辑器的拖放行为的方法也可以用来定制视图的拖放行为。要像上面的 图 1 和 图 2 中所显示的那样对视图的拖放行为进行定制,则需要执行以下操作:当用户拖动一个视图标签时,捕获底层视图的 view-id,并将其设置为拖放过程中正在转移的对象。下面黑色字体表示的代码是应该在上面 清单 3 和 清单 4 的基础上添加的代码。

清单 6. 定制编辑器和视图标签的拖放行为

PlatformUI.getWorkbench().getDisplay().addFilter(SWT.DragDetect, new Listener() {   public void handleEvent(Event event)   {    //ignore drag of widgets other than tab-folders (which host    //editor and view tabs)    if(!(event.widget instanceof CTabFolder))     return;    final CTabFolder draggedFolder = (CTabFolder)event.widget;    //Handle special case where no editors are open but editor area    //(and hence containing tab-folder) are still visible. Now try    //dragging the tab-folder. This drag should be ignored.    if( draggedFolder.getItemCount() < 1 )     return;    int operations = DND.DROP_COPY | DND.DROP_DEFAULT;    final DragSource dragSource = new DragSource(draggedFolder, operations);    //get a reference to the workbench-part that is being dragged    IWorkbenchWindow workbenchWindow =     PlatformUI.getWorkbench().getActiveWorkbenchWindow();    final IWorkbenchPart workbenchPartBeingDragged =     workbenchWindow.getActivePage().getActivePart();    Transfer[] transferTypes = null;    if(workbenchPartBeingDragged instanceof I

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号