由于插件机制实施的用户界面分层,各视图通常不了解其它视图的内容和性质。这使在插件之间进行拖放操作很困难。例如,人们可能想提供 Java 重构支持,从而用户可将方法从 Java 编辑器的内容大纲窗口拖动到资源导航器中的另一个 java 文件中。由于资源导航器不了解 Java 内容,当将 java 方法放到其上时,资源导航器不知道该如何处理。类似地,某个 ISV 可能想将其某些内容放到其中一个 Java 查看器中。
平台提供了 org.eclipse.ui.dropActions 扩展点以解决这些情况。此机制授权放下行为返回到拖动操作的起始处。此行为包含在必须实现 org.eclipse.ui.part.IDropActionDelegate 的操作中。作为拖动操作源的查看器必须支持 org.eclipse.ui.part.PluginTransfer 传输类型,并将 PluginTransferData 对象置于拖动事件中。请参阅 org.eclipse.jface.viewers.StructuredViewer#addDragSupport 以了解如何将拖动支持添加到查看器中。
<!ELEMENT extension (action*)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT action EMPTY>
<!ATTLIST action
id CDATA #REQUIRED
class CDATA #REQUIRED>
以下是利用上面所定义的放下操作的拖动侦听器一个示例。<extension point=
"org.eclipse.ui.dropActions"
>
<action id=
"my_drop_action"
class=
"com.xyz.eclipse.TestDropAction"
>
</action>
</extension>
class MyDragListener extends DragSourceAdapter { public void dragSetData(DragSourceEvent event) { if (PluginTransfer.getInstance().isSupportedType(event.dataType)) { byte[] dataToSend = ...//enter the data to be sent. event.data = new PluginTransferData( my_drop_action, dataToSend); } } }有关较完整的示例,请参阅“平台”自述文件示例。在该示例中,放下操作是在 ReadmeDropActionDelegate 中定义的,且由 ReadmeContentOutlineDragListener 使用。
Copyright (c) 2002, 2004 IBM Corporation and others.
All rights reserved. 本程序及所附带提供的资料依据 Common Public License v1.0 的条款方可使用,本发行中提供了该许可条款,并且在以下位置也可获得该条款:http://www.eclipse.org/legal/cpl-v10.html。