拖放 Eclipse Workbench 标签
http://tech.ddvip.com 2006年11月20日 社区交流
本文详细介绍拖放 Eclipse Workbench 标签
下面让我们来学习定制拖放行为所涉及的步骤,具体地说,这些步骤是针对编辑器标签的,但它们同样适用于视图标签。
定制编辑器标签的拖放行为
当 Eclipse 用户拖动一个编辑器标签时,要实现如 图 1 和 图 2 所示的定制拖放功能,并内部执行以下两个主要任务或操作:
操作 1 捕获底层编辑器的 IEditorInput 和 editor-id,前者包含有关正在编辑的文件的信息;后者包含有关编辑正在使用的编辑器的类型信息。 操作 2 将 editor-input 和 editor-id 放到 EditorInputTransfer.EditorInputData 对象中,并将其设置为拖放过程中正在转移的对象。这种操作可以让 SWT 负责实现其余的拖放操作,例如将编辑器标签放到使用 EditorInputTransfer 作为转移类型的控件上。
由于编辑器标签通常放在 CTabFolder 容器中,因此我们需要为存放编辑器的 CTabFolder 容器创建一个 DragSource,并在这个 DragSource 的 dragSetData() 方法中执行 操作 1 和 操作 2。假设我们可以捕获存放编辑器的 CTabFolder 容器,那么创建所需拖放源的任务就非常简单,如下所示:
清单 1. 为 Tab folder 创建拖放源
CTabFolder tabFolder = <"CTabFolder" composite that hosts editor-parts>;
int operations = DND.DROP_COPY | DND.DROP_DEFAULT;
DragSource dragSource = new DragSource(tabFolder, operations);
Transfer[] transferTypes = new Transfer[] {EditorInputTransfer.getInstance()};
dragSource.setTransfer(transferTypes);
dragSource.addDragListener(new DragSourceListener()
{
public void dragStart(DragSourceEvent dsEvent) { }
public void dragSetData(DragSourceEvent dsEvent)
{
//code to perform operation-1 and operation-2
}
public void dragFinished(DragSourceEvent dsEvent) { }
});此处另外一个非常重要的假设是:CTabFolder 容器并没有已经创建好的拖放源。否则,代码 DragSource dragSource = new DragSource(tabFolder, operations); 就会触发一个 SWTError 错误,这是因为我们不能为同一个控件创建多个拖放源。
来源:IBM 作者:Shiva Kumar H.R. 责编:豆豆技术应用