拖放 Eclipse Workbench 标签
http://tech.ddvip.com 2006年11月20日 社区交流
本文详细介绍拖放 Eclipse Workbench 标签
要查看这种假设是否有效(这也是 清单 1 的一个可能用途),让我们来看一下与这个编辑器标签有关的默认拖放行为。默认的行为提示说存放这个编辑器标签的 CTabFolder 容器可能早已为其创建了一个拖放源。然而,快速查看 org.eclipse.swt.custom.CTabFolder.java 的代码可以看到,CTabFolder 的默认拖放操作都不是通过创建一个拖放源来实现的,而是通过为 SWT.DragDetect、SWT.MouseMove 和 SWT.MouseUp 类型的事件添加监听程序来实现的。CTabFolder 容器还没有创建拖放源的假设仍然有效,正如我们可以看到的一样,这是基于查看非 API 内部类获得的信息而作出的假设。因此,如果这种假设在将来的版本中无效,也不用感到惊奇;不过我认为这种可能性非常小。
下面让我们来看一下如何捕获存放编辑器的 CTabFolder 容器。通过对编辑器平铺行为的观察,我们注意到不管在何时平铺显示编辑器,都会创建一个新的 Tab 文件夹。另外,当一个标签组中的所有编辑器全部关闭或被移动到一个不同的 Tab 文件夹上时,原来的 Tab 文件夹就会被销毁。这意味着 CTabFolder 容器的创建和销毁都是动态的,因此 CTabFolder 容器的拖放源的创建也应该是动态完成的。
要实现这种功能,需要能够对 CTabFolder 容器的创建进行控制。但是 Eclipse 并没有提供任何可以在创建 CTabFolder 容器时进行回调的功能。另外一种方法是对 CTabFolders 进行特殊化 (specialize) 处理(继承),继承这些 specialized CTabFolders(继承类,而不是基类 CTabFolder),并在这些 specialized CTabFolders 的 constructors 中创建拖放源。然而,在 Eclipse 中实例化这些 specialized CTabFolders 是一项非常繁杂的任务,因此我们需要寻找一种新的解决方案。
来源:IBM 作者:Shiva Kumar H.R. 责编:豆豆技术应用