由於外掛程式機制所強制實施的 UI 分層作業,因此,視圖通常不會知道其他視圖的內容和本質。結果不同外掛程式的拖放作業也有可能不同。比方說,有人可能會想提供 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); } } }如果需要較完整的範例,請參閱「平台」的 Readme 範例。 在該範例中,放置動作定義在 ReadmeDropActionDelegate 中, 而且是由 ReadmeContentOutlineDragListener 使用。
Copyright (c) 2002, 2004 IBM Corporation and others.
All
rights reserved. 本程式與隨附的資料依照 Elipse Public License 1.0 版此次發行所隨附的條款而提供,
可以在以下網址取得:http://www.eclipse.org/legal/epl-v10.html