ドロップ・アクション

org.eclipse.ui.dropActions

この拡張ポイントは、他のプラグインにより定義されるビューにドロップ動作を追加するために使用します。

プラグインのメカニズムによる UI 階層化の影響で、ビューが他のビューのコンテンツおよび特性を認識しないことがあります。 したがって、プラグイン間でのドラッグ・アンド・ドロップ操作が困難になる場合があります。 例えば、ユーザーが Java エディターのコンテンツ・アウトライナーからリソース・ナビゲーターの他の Java ファイルにメソッドをドラッグ・アンド・ドロップすることにより、Java リファクタリング・サポートを提供したいものとします。 リソース・ナビゲーターには Java コンテンツがわからないため、Java メソッドがドロップされても、どのような動作をしてよいのかわかりません。 同様に、ISV は、それらのコンテンツの一部を Java ビューアーにドロップしたい場合があります。

これらの状況に対処するために、org.eclipse.ui.dropActions 拡張ポイントがプラットフォームによって提供されています。 このメカニズムにより、ドラッグ動作をその操作の発生元にさかのぼって委譲します。 この動作は、org.eclipse.ui.part.IDropActionDelegate を実装しなければならないアクションの中に含まれています。 ドラッグ操作の発生元であるビューアーは、the 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 クラスの完全修飾名である必要があります。 このクラスは、プラグイン全体が実際に必要となる前に全体がロードされてしまうことがないよう、できる限り後からロードされます。

ワークベンチでは、この拡張ポイントに対する実装は提供しません。 プラグインにより拡張ポイントを使用して、他のプラグインにより定義されるビューにドロップ動作を追加することができます。