放置動作

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 類別名稱。這個類別的載入要儘可能晚,以避免在真正需要它之前載入整個外掛程式。

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