ドロップ・アクション

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 クラスの完全修飾名である必要があります。 このクラスは、プラグイン全体が実際に必要となる前に全体がロードされてしまうことがないよう、できる限り後からロードされます。

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