由於外掛程式機制所強制實施的 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