由于插件机制实施的用户界面分层,各视图通常不了解其它视图的内容和性质。这使在插件之间进行拖放操作很困难。例如,人们可能想提供 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, 2005 IBM Corporation and others.
All rights reserved. This program and the accompanying materials are made
available under the terms of the Eclipse Public License v1.0 which accompanies
this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html