説明: この拡張ポイントは、 他のプラグインにより定義されるビューにドロップ動作を追加するために使用します。
プラグインのメカニズムによる UI 階層化の影響で、ビューが他のビューのコンテンツおよび特性を認識しないことがあります。 したがって、プラグイン間でのドラッグ・アンド・ドロップ操作が困難になる場合があります。 たとえば、Java エディターのコンテンツ・アウトライナーから リソース・ナビゲーターの他の java ファイルにメソッドをドラッグ・アンド・ドロップすることにより、 Java リファクタリング・サポートを提供するものとします。 リソース・ナビゲーターでは、Java コンテンツについて認識しないため、 java メソッドをドロップした場合の動作を決めることができません。 ISV がいずれかの Java ビューアーにそのコンテンツをドロップする場合にも同様のことが考えられます。
こうした状況に対応するため、プラットフォームには org.eclipse.ui.dropActions 拡張ポイントが提供されています。 このメカニズムにより、ドラッグ動作をその操作の発生元にさかのぼって代行します。 この動作は、org.eclipse.ui.part.IDropActionDelegate をインプリメントする必要のあるアクションに含まれています。 ドラッグ操作のソースとなるビューは、org.eclipse.ui.part.PluginTransfer 転送タイプをサポートする必要があり、 ドラッグ・イベントに org.eclipse.ui.part.PluginTransferData オブジェクトを配置する必要があります。 ビューアーへのドラッグ・サポートの追加については、org.eclipse.jface.viewers.StructuredViewer#addDragSupport を 参照してください。
構成マークアップ:
<!ELEMENT dropContribution (action)*>
<!ELEMENT action*>
<!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 により使用されます。
API 情報: class 属性の値は、 org.eclipse.ui.part.IDropActionDelegate をインプリメントする Java クラスの完全修飾名である必要があります。 このクラスは、プラグイン全体が必要となる場合に全体がロードされることのないよう、 できる限り後からロードされます。
提供されるインプリメンテーション: ワークベンチには、 この拡張ポイントのインプリメンテーションは提供されません。 プラグインにより拡張ポイントを使用して、他のプラグインにより定義されるビューにドロップ動作を追加することができます。