放置動作

org.eclipse.ui.dropActions

這個延伸點是用來將放置行為新增至其他外掛程式所定義的視圖中。

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

class 屬性值必須是實作 org.eclipse.ui.part.IDropActionDelegate 的完整 Java 類別名稱。 這個類別的載入要儘可能晚,以避免在真正需要它之前載入整個外掛程式。

工作台不會提供這個延伸點的實作。外掛程式可以提供到這個延伸點, 以將放置行為新增至其他外掛程式所定義的視圖中。