Auf Grund der Schichtengestaltung in der Benutzerschnittstelle, die durch den Plug-in-Mechanismus vorgegeben ist, können Sichten häufig Inhalt und Gattung anderer Sichten nicht erkennen. Dies kann das Ziehen und Übergeben zwischen Plug-ins erschweren. So kann es beispielsweise denkbar sein, dass eine Unterstützung für das Java-Refactoring bereitgestellt werden soll, wobei der Benutzer eine Methode aus der Inhaltsgliederung des Java-Editors mit der Maus in eine andere Datei zieht, die im Ressourcennavigator angezeigt wird. Da der Ressourcennavigator Java-Inhalt nicht erkennt, weiß er nicht, welches Verhalten beim Übergeben von Java-Methoden ausgeführt werden soll. Analog könnte es denkbar sein, dass ein unabhängiger Softwarelieferant Teilinhalte in eine der Java-Anzeigefunktionen übergeben wollen.
Der Erweiterungspunkt org.eclipse.ui.dropActions wird durch die Plattform bereitgestellt, um solche Situationen verarbeiten zu können. Dieser Mechanismus delegiert das Übergabeverhalten zurück an den Absender der Übergabeoperation. Dieses Verhalten ist in einer Aktion enthalten, die org.eclipse.ui.part.IDropActionDelegate implementieren muss. Die Anzeigefunktion, die die Quelle der Ziehoperation ist, muss den Übertragungstyp org.eclipse.ui.part.PluginTransfer unterstützen und ein Objekt PluginTransferData in das Ziehereignis stellen. Informationen dazu, wie die Ziehunterstützung zu einer Sicht hinzugefügt werden kann, finden Sie in 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>
Das folgende Beispiel stellt eine Listener-Funktion für Ziehereignisse dar, die die oben definierte Übergabeaktion verwendet:<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); } } }Ein umfangreicheres Beispiel finden Sie im Beispiel der Readme-Datei für die Plattform. In diesem Beispiel ist in "ReadmeDropActionDelegate" eine Übergabeaktion definiert. Es wird von "ReadmeContentOutlineDragListener" verwendet.
Copyright (c) 2002, 2004 IBM Corporation und Andere.
Alle Rechte vorbehalten. Dieses Programm und sein Begleitmaterial werden gemäß den Bedingungen der "Eclipse Public License v1.0" zur Verfügung gestellt, die dieser Lieferung beiliegt und unter
http://www.eclipse.org/legal/epl-v10.html abgerufen werden kann.