プラグインのメカニズムによる 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 によって使用されます。
Copyright (c) 2002, 2004 IBM Corporation and others.
All rights reserved. This program and the accompanying materials are made
available under the terms of the Eclipse Public License v1.0 which accompanies
this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html